指针和 {l,r}值引用的通用名称
Generalized name for pointers and {l,r}value references?
指针和 {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
。
相关文章:
- C++取消引用指针.为什么会发生变化
- 深层复制具有自引用指针的类
- Visual c ++,使用字符串引用/指针调用 dll 函数
- std::unordered_map::提取引用/指针失效
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 如何在 c++ 中使用带有数学运算的引用/指针?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何获取指向类(而不是对象)的引用/指针
- 将类型参数传递给自引用指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 在析构函数内取消引用指针时出现分段错误
- 来自引用指针的内存泄漏
- 引用指针后面的值
- 无法取消引用指针
- 引用指针调用成员函数
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 取消引用指针以创建数组的副本
- 有关启动引用指针的引用的问题