0

指针和 {l,r} 值引用是否属于表示应该如何访问类型的同一组类型修饰?如果是这样,这个组的名称是什么?例如,{const, volatile, restrict}都是类型限定符。我正在寻找这样的名称,它可以应用于各种指针和引用(并且希望在某处的标准中提到)。

感谢您的洞察力!

4

3 回答 3

3

根据 C++ 语法,当它们出现在 [dcl.decl]/4 中定义的ptr-declarator中时,它们都被称为ptr-operator

ptr 运算符:
    * 属性说明符序列选择cv限定符序列选择
    &属性说明符序列选择
    && 属性说明符序列选择
    嵌套名称说明符 * 属性说明符序列选择cv 限定符序列选择

但这只是语法中的正式名称,就您如何使用指针和引用而言,它们并不相似,我认为将它们组合在一起没有太大价值。指针是对象,可以复制、按值传递、重新分配等。而引用不能做任何这些事情,它们是完全不同的语言结构。试图将它们分组为“表示应如何访问类型”的东西是恕我直言的错误。

于 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 月,Visual C++ 尚不支持此语法。

于 2012-08-26T07:12:53.860 回答
0

接受一种类型并返回另一种类型的东西通常称为类型构造函数。例如,类型构造函数*接受一个类型T并返回另一个类型pointer to T

于 2012-08-26T07:22:48.433 回答