首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非字符串文本是prvalue吗?

非字符串文本是prvalue吗?
EN

Stack Overflow用户
提问于 2017-10-02 14:39:02
回答 1查看 178关注 0票数 3

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

标准规定文字总是一个prvalue,除非它是字符串文本,

代码语言:javascript
复制
#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。

用户定义的文字是文字也是

我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-02 16:21:20

是的,这是标准中的一个小的措词缺陷。你可以在N1905中发现这句话(几乎)几乎没有变化

文字是一个主表达式。其类型取决于其形式(2.13)。字符串文字是一个lvalue;所有其他文字都是rvalue。

这个标准比用户定义的文字早了几年(N2765是从2008年年中开始的),而这个特殊的措辞并没有改变以反映“所有其他文字都是prvalue”部分不应该包括用户定义的文字。

但是,很明显,由于用户定义的文字只是函数调用的语法糖,它的值类别也应该从函数调用中派生出来。这就是语言特征的要点。在您的示例中,5_a的值类别是lvalue而不是prvalue (所有编译器都同意),这一点并没有混淆,因此,如果存在这种措辞的缺陷报告,优先级会很低。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46527754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档