我不确定是否有遗漏,但是,用户定义的字面量会调用用户定义的函数,该函数可以返回任何值,也是一种字面量。
标准规定字面量始终是prvalue,除非它是字符串字面量,但是:
标准规定字面量始终是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
(不是字符串文字)被视为左值而不是右值:
[expr.prim.literal]/1 字面量 是一种基本表达式。它的类型取决于其形式。字符串文字是左值;所有其他字面量都是 prvalues。
并且用户定义的字面量也是字面量。
我错过了什么?
5_a
是一个左值,并且可能所有编译器都正确地将其作为左值调用。是否存在真正的困惑源? - Barry