C++ 03標準によると、不完全な型への参照は有効ですか?私は、null以外のポインタ以外のものとして参照を実装する実装は認識していないので、そのようなコードは動作するはずです。しかし、不完全な型への参照が標準に準拠しているかどうかは疑問です。不完全な型への参照
私は、引用符とC++標準への参照との回答に感謝します。
C++ 03標準によると、不完全な型への参照は有効ですか?私は、null以外のポインタ以外のものとして参照を実装する実装は認識していないので、そのようなコードは動作するはずです。しかし、不完全な型への参照が標準に準拠しているかどうかは疑問です。不完全な型への参照
私は、引用符とC++標準への参照との回答に感謝します。
C++標準では、わかっている限り、不完全な型への参照を明示的に指定することはできません。
3.2 1つの定義ルールAの[basic.def.odr]
4.正確に一つの定義:しかし、標準タイプは完了していなければならない時に指定するセクションを持っていますクラスタイプが であることが必要な方法でクラスが使用されている場合は、翻訳の ユニットでクラスが必要です。 [例:
struct X; // declare X as a struct type struct X* x1; // use X in pointer formation X* x2; // use X in pointer formation
末端例:は、以下の完全な変換ユニットは、それが
X
を定義することがないにもかかわらず、 よく形成されている] [注:宣言および表現のルール で記述どのコンテキストが完全なクラス型であるかが必要です。クラス タイプT
である必要があり、完全な場合:
- タイプ
T
の目的は、左辺値対右辺値変換は を参照左辺値に適用される(3.1、5.3.4)、または- 定義されていますタイプ
T
のオブジェクト(4.1)、又は- 発現は タイプ
T
(条項4、5.2.3、5.2.7、5.2.9、5.4)、又は- に(暗黙的または明示的に)変換されます。ヌルポインタ定数ではなく、型を持つ式
void *
以外 は、暗黙的な変換(項4)、dynamic_cast
(5.2.7) 又はstatic_cast
(5.2.9)、または- クラスのメンバーを使用して
T
にT
または参照 に型ポインタに変換されます。アクセス演算子は、タイプT
の式に適用されます(5.2。5)、又はtypeid
オペレータ(5.2.8)またはsizeof
オペレータ(5.3.3)タイプT
のオペランドに適用 、又は- タイプ
T
の戻り型や引数型を持つ関数です。 (3.1)または呼び出された(5.2.2)、またはT
の値が(5.17)に割り当てられています。 ]
不完全型への参照の宣言を含む他のすべての場合で、タイプが不完全になることができるように思われます。
は§15.1.3、スロー式の
型が不完全型、またはvoid *以外の不完全な型へ ポインタや参照、constの のvoid *であってはならないと言いますvolatile void *、またはconst volatile void *を返します。
これは、不完全なタイプへの参照を持つことができると思われるようです。
私はまだ標準を解釈するのにはあまりよくありませんので、その方法を取ってください。
このリストは、非常に便利ですが、非規範的なメモにあり、したがって何も指定していないことに注意してください。それはただ役に立ちます。 –