ポインタと{l、r}値の参照は、型へのアクセス方法を示す同じ型装飾のグループに属していますか?もしそうなら、このグループの名前は何ですか?たとえば、{const, volatile, restrict}
すべての型修飾子です。私は、あらゆる種類のポインターと参照に適用できるこのような名前を探しています(そして、標準のどこかで言及されていることを願っています)。
あなたの洞察に感謝します!
C ++の文法によると、[dcl.decl] / 4で定義されているように、 ptr-declaratorで発生する場合、両方ともptr-operatorと呼ばれます。
ptr-演算子: * attribute-specifier-seq opt cv-qualifier-seq opt &attribute-specifier-seq opt && attribute-specifier-seq optnested -name-specifier * attribute-specifier-seq opt cv-qualifier-seq opt
しかし、それは文法の正式な名前にすぎません。ポインターと参照の使用方法に関しては、それらは類似しておらず、それらをグループ化することにあまり価値はないと思います。ポインタはオブジェクトであり、コピー、値の受け渡し、再割り当てなどが可能ですが、参照はこれらのことを実行できませんが、完全に異なる言語構造です。それらを「タイプへのアクセス方法を示す」ものにグループ化しようとするのは、私見の間違いです。
AFAIK C ++標準では、ポインターと参照を含む「型デコレーター」のグループに名前を付けていませんが、それらを型ビルダーと呼ぶことができます。
他の言語の対応する組み込み型ビルダーは、異なる構文を使用します。
最新のC++のテンプレートメカニズムをC++11と組み合わせると、using
カスタムタイプビルダーを定義できます。理想的には、「失敗した実験」のC構文ではなく、それに切り替える必要があると主張できます。
例えば、
template< class Pointee >
using Ptr = Pointee*;
template< class Referent >
using Ref = Referent&;
int main()
{
Ptr<int> p = new int( 42 );
Ref<int> r = *p;
}
ただし、2012年8月の時点では、この構文はVisualC++ではまだサポートされていません。
型を取り、別の型を返すものは、通常、型コンストラクターと呼ばれます。たとえば、型コンストラクターは型を*
取り、T
別の型を返しますpointer to T
。