C++ 什么是未命名左值?
我在草案中看到了一个被称为“未命名左值”的概念,在下面被删除的部分 [注意:临时对象、未命名左值和未链接的命名左值是临时对象,当相应的模板参数具有引用类型时,它们不是可接受的模板参数。[示例:…] 我搜索了很多,但是stackoverflow和google都没有给我答案。 我只找到了这篇关于价值分类的文章C++ 什么是未命名左值?,c++,lvalue,C++,Lvalue,我在草案中看到了一个被称为“未命名左值”的概念,在下面被删除的部分 [注意:临时对象、未命名左值和未链接的命名左值是临时对象,当相应的模板参数具有引用类型时,它们不是可接受的模板参数。[示例:…] 我搜索了很多,但是stackoverflow和google都没有给我答案。 我只找到了这篇关于价值分类的文章 但它没有帮助。并非所有左值表达式都有名称。事实上,N4296中的措辞为我们提供了一些示例: 对于引用或指针类型的非类型模板参数 常量表达式的值不应引用(或指针) 类型,不应为以下地址: 子
但它没有帮助。并非所有左值表达式都有名称。事实上,N4296中的措辞为我们提供了一些示例: 对于引用或指针类型的非类型模板参数 常量表达式的值不应引用(或指针) 类型,不应为以下地址:
- 子对象(1.8)
- 临时物体(12.2)
- 字符串文字(2.14.5)
- typeid表达式(5.2.8)的结果,或
- 预定义的func变量(8.4.1)
- 作用域中变量或函数的名称,无论类型如何,如std::cin或std::endl。即使变量的类型是右值 引用时,由其名称组成的表达式是左值 表情
- 如果函数或重载运算符的返回类型是左值引用,则函数调用或重载运算符表达式,例如
std::getline(std::cin,str)或std::cout
是没有名称的左值的一个示例函数调用表达式,其中所述函数具有左值引用的返回类型,也是一个未命名的左值。*ptr