0

ポインタと{l、r}値の参照は、型へのアクセス方法を示す同じ型装飾のグループに属していますか?もしそうなら、このグループの名前は何ですか?たとえば、{const, volatile, restrict}すべての型修飾子です。私は、あらゆる種類のポインターと参照に適用できるこのような名前を探しています(そして、標準のどこかで言及されていることを願っています)。

あなたの洞察に感謝します!

4

3 に答える 3

3

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

しかし、それは文法の正式な名前にすぎません。ポインターと参照の使用方法に関しては、それらは類似しておらず、それらをグループ化することにあまり価値はないと思います。ポインタはオブジェクトであり、コピー、値の受け渡し、再割り当てなどが可能ですが、参照はこれらのことを実行できませんが、完全に異なる言語構造です。それらを「タイプへのアクセス方法を示す」ものにグループ化しようとするのは、私見の間違いです。

于 2012-08-26T10:49:13.357 に答える
1

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++ではまだサポートされていません。

于 2012-08-26T07:12:53.860 に答える
0

型を取り、別の型を返すものは、通常、型コンストラクターと呼ばれます。たとえば、型コンストラクターは型を*取り、T別の型を返しますpointer to T

于 2012-08-26T07:22:48.433 に答える