首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lvalue到Rvalue的转换是否发生在函数调用中?

Lvalue到Rvalue的转换是否发生在函数调用中?
EN

Stack Overflow用户
提问于 2020-04-03 02:09:26
回答 1查看 105关注 0票数 1

考虑以下代码:

代码语言:javascript
复制
#include <iostream>
int func(){
   int a = 0;
   return a;
}
int main(){
   int result = func();
}

根据cpp标准,有关返回语句的一些规则如下:

  1. 一个函数通过返回语句返回给调用方。
  2. ..。返回语句从copy-initialization操作数

中初始化(显式或隐式)函数调用的glvalue结果或prvalue结果对象。

因此,对int result = func();的调用,似乎可以转换为:

代码语言:javascript
复制
//a fiction code
func(){
   int a = 0;
   int result = a; #1
}

因为a是一个glvalue,所以应该将它转换为prvalue来进行prvalue计算(初始化一个对象)。因此,我的问题是,在调用int result = func();时,作为return的操作数的glvalue a是否需要转换为prvalue?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 02:44:25

是的,作为初始化结果对象的一部分,a会进行lvalue到rvalue的转换。(非正式地说,这意味着检索存储在名为a的内存位置的值)。

见dcl.init/17.8:

否则,被初始化对象的初始值是初始化器表达式的(可能转换的)值。如果有必要,将使用标准转换(第7条)将初始化器表达式转换为目标类型的cv非限定版本;不考虑用户定义的转换。

第7条包括lvalue到rvalue的转换.

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

https://stackoverflow.com/questions/61004055

复制
相关文章

相似问题

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