首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lvalue引用是否受到从lvalue到rvalue的转换?

lvalue引用是否受到从lvalue到rvalue的转换?
EN

Stack Overflow用户
提问于 2016-07-11 18:06:15
回答 1查看 102关注 0票数 2

我一直认为,引用在表达式中使用时,会受到从lvalue到rvalue的转换,就像任何其他glvalue一样。然而,似乎每次在表达式中使用引用时,它都是在[expr.const]/2的项目点(2.9)中处理,而不是在项目点(2.7) (在C++14或C++1z中)处理。

例如,下面的引用r用于初始化变量j。它是否受到从lvalue到rvalue的转换?

代码语言:javascript
复制
const int i = 1;
constexpr int& r = i
constexpr int j = r;

根据这个答案,引用r是在expr.const/2的项目点(2.9)中处理的,而不是像我预期的那样在项目2.7中处理。为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2016-07-11 18:33:01

在某些上下文中,lvalue到rvalue的转换之所以发生,是因为它被明确指定要在给定的上下文中发生(例如,对于三元条件运算符,请参见这里)。但它在第4条中列出,因此它是一个隐式标准转换;与所有其他隐式标准转换一样,它在需要时发生。例如,int类型的glvalue将在用作算术表达式的操作数时隐式转换为prvalue,因为它需要存储的值。

constexpr int j = r中,是的,glvalue表达式r需要从lvalue到rvalue的转换,因为这个初始化需要存储的值。尽管没有明确指定读取对象的存储值会调用lvalue到rvalue转换,但在不使用"rvalue“一词的整个标准以及C标准中,这一事实显然必须是正确的,但是lvalue转换的类似概念是指将lvalue转换为”存储在指定对象中的值“。

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

https://stackoverflow.com/questions/38313425

复制
相关文章

相似问题

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