考虑以下代码:
#include <iostream>
int func(){
int a = 0;
return a;
}
int main(){
int result = func();
}根据cpp标准,有关返回语句的一些规则如下:
中初始化(显式或隐式)函数调用的glvalue结果或prvalue结果对象。
因此,对int result = func();的调用,似乎可以转换为:
//a fiction code
func(){
int a = 0;
int result = a; #1
}因为a是一个glvalue,所以应该将它转换为prvalue来进行prvalue计算(初始化一个对象)。因此,我的问题是,在调用int result = func();时,作为return的操作数的glvalue a是否需要转换为prvalue?
发布于 2020-04-03 02:44:25
是的,作为初始化结果对象的一部分,a会进行lvalue到rvalue的转换。(非正式地说,这意味着检索存储在名为a的内存位置的值)。
见dcl.init/17.8:
否则,被初始化对象的初始值是初始化器表达式的(可能转换的)值。如果有必要,将使用标准转换(第7条)将初始化器表达式转换为目标类型的cv非限定版本;不考虑用户定义的转换。
第7条包括lvalue到rvalue的转换.
https://stackoverflow.com/questions/61004055
复制相似问题