gpt4 book ai didi

c++ - 在函数调用中是否会发生左值到右值转换?

转载 作者:行者123 更新时间:2023-12-02 10:19:05 24 4
gpt4 key购买 nike

考虑下面的代码:

#include <iostream>
int func(){
int a = 0;
return a;
}
int main(){
int result = func();
}

根据cpp标准,关于return语句的一些规则是:

  1. A function returns to its caller by the return statement.
  2. [...] the return statement initializes the glvalue result or prvalue result object of the (explicit or implicit) function call by copy-initialization from the operand


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

//a fiction code
func(){
int a = 0;
int result = a; #1
}

由于 a是glvalue,因此应将其转换为prvalue以进行prvalue评估(初始化对象)。所以我的问题是,在 int result = func();主体中调用 func时,是否需要将作为 a的操作数的glvalue return转换为prvalue?

最佳答案

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

参见[dcl.init] /17.8:

Otherwise, the initial value of the object being initialized is the (possibly converted) value of the initializer expression. Standard conversions (Clause 7) will be used, if necessary, to convert the initializer expression to the cv-unqualified version of the destination type; no user-defined conversions are considered.



条款7包括从左值到右值的转换。

关于c++ - 在函数调用中是否会发生左值到右值转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com