gpt4 book ai didi

c++ - 非字符串文字是纯右值?

转载 作者:太空狗 更新时间:2023-10-29 20:52:14 24 4
gpt4 key购买 nike

我不确定我是否遗漏了什么,但是,调用可以返回任何内容的用户定义函数的用户定义文字也是一种文字。

标准说文字总是纯右值,除非它是字符串文字,but :

#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 A literal is a primary expression. Its type depends on its form. A string literal is an lvalue; all other literals are prvalues.

和用户定义的文字是 literals too .

我缺少什么?

最佳答案

是的,这是标准中的一个小措辞缺陷。你可以在 N1905 中找到那句话(几乎)一直没有变化。 :

A literal is a primary expression. Its type depends on its form (2.13). A string literal is an lvalue; all other literals are rvalues.

该标准早于用户定义的字面量几年(N2765 是从 2008 年年中开始的),并且这个特定的措辞没有改变以反射(reflect)“所有其他字面量都是 [p]rvalues”部分应该不包括用户定义的文字。

但是,很明显,因为用户定义文字只是 function call 的语法糖,它的值类别也应该从函数调用中派生。这就是语言功能的重点。毫无疑问,您的示例中 5_a 的值类别是左值而不是纯右值(所有编译器都同意),因此此措辞的缺陷报告将获得非常低的优先级(如果有的话)。

关于c++ - 非字符串文字是纯右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com