gpt4 book ai didi

c++ - 在 C++ 中使用按引用传递的意外输出

转载 作者:行者123 更新时间:2023-11-28 00:01:41 26 4
gpt4 key购买 nike

考虑代码:

#include<iostream>
using namespace std;

int refcube(double &ra)
{
ra*=ra*ra;
return ra;
}

int main()
{
auto x=2.0;
cout<<"cube of "<<x<<" is "<<refcube(x)<<endl;
return 0;
}

输出是:

cube of 8 is 8

为什么第一个x的值显示为8而不是2

最佳答案

因为未指定评估顺序。

编译器可能会生成调用refcube(x)的代码,并在生成代码之前或之后计算其值,以获得x的值,输出到std::cout

您的编译器选择编译此 C++ 代码时先调用 refcube(x),然后计算 x

C++ 语言规范在“排序”主题上花费了相当多的篇幅,它(非常笼统地说)指定了求值顺序。长话短说,在此示例中,x 未根据 refcube(x) 排序,在生成输出到 std 的表达式中: :cout,这样的编译器可以自由地先编译表达式的任何一部分。

关于c++ - 在 C++ 中使用按引用传递的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493609/

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