指针和 {l,r}值引用的通用名称

Generalized name for pointers and {l,r}value references?

本文关键字:引用 指针      更新时间:2023-10-16

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

感谢您的见解!

根据C++语法,当它们出现在 ptr 声明符中时,它们都被称为 ptr 运算符,如 [dcl.decl]/4 中所定义

      PTR 运算符:    * 属性-说明符-序列OPT cv-限定符-序列opt    &属性说明符-seqopt    && 属性说明符-seqopt    嵌套名称说明符 * 属性说明符-seq opt cv-qualifier-seqopt
    

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

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++ 尚不支持此语法。

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