【发布时间】:2020-04-03 02:09:26
【问题描述】:
考虑下面的代码:
#include <iostream>
int func(){
int a = 0;
return a;
}
int main(){
int result = func();
}
根据cpp标准,关于return语句的一些规则是:
- 函数通过 return 语句返回给它的调用者。
- [...] return 语句通过 操作数 中的 copy-initialization 初始化(显式或隐式)函数调用的泛左值结果或纯右值结果对象/li>
所以,int result = func(); 的调用,好像可以翻译成:
//a fiction code
func(){
int a = 0;
int result = a; #1
}
因为a是一个glvalue,它应该被转换为prvalue进行prvalue评估(初始化一个对象)。所以我的问题是,在func 的主体中调用int result = func(); 时,作为return 的操作数的glvalue a 是否需要转换为prvalue?
【问题讨论】:
-
询问转换是否发生在词法范围(函数体)中是什么意思?
-
@xskxzr 根据
return statement规则,从return的操作数复制初始化对象并根据copy-initialize规则,因此需要将gvalue 转换为prvalue 进行初始化.正如@MM 给出的答案
标签: c++ c++17 language-lawyer