我不确定我是不是遗漏了什么,但是,用户定义的文字,它调用用户定义的函数,可以返回任何东西,也是一种文字。
标准规定文字总是一个prvalue,除非它是字符串文本,但。
#include <iostream>
#include <typeinfo>
int& operator""_a(unsigned long long c);
int main()
{
std::cout << std::is_same<decltype(5_a), int&>::value;
} 在GCC和Clang中都打印了1,这证明了文本5_a (不是字符串文本)被视为lvalue而不是rvalue:
[expr.prim.literal]/1 A文字是一个主表达式。它的类型取决于它的形式。字符串文字是一个lvalue;所有其他文字都是prvalue。
用户定义的文字是文字也是。
我错过了什么?
发布于 2017-10-02 16:21:20
是的,这是标准中的一个小的措词缺陷。你可以在N1905中发现这句话(几乎)几乎没有变化
文字是一个主表达式。其类型取决于其形式(2.13)。字符串文字是一个lvalue;所有其他文字都是rvalue。
这个标准比用户定义的文字早了几年(N2765是从2008年年中开始的),而这个特殊的措辞并没有改变以反映“所有其他文字都是prvalue”部分不应该包括用户定义的文字。
但是,很明显,由于用户定义的文字只是函数调用的语法糖,它的值类别也应该从函数调用中派生出来。这就是语言特征的要点。在您的示例中,5_a的值类别是lvalue而不是prvalue (所有编译器都同意),这一点并没有混淆,因此,如果存在这种措辞的缺陷报告,优先级会很低。
https://stackoverflow.com/questions/46527754
复制相似问题