gpt4 book ai didi

c++ - 使用引用和左值时的意外输出

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:45 25 4
gpt4 key购买 nike

我正在浏览一些与将赋值操作左侧的函数用作左值相关的示例代码。我对此毫无疑问第一个代码是-

#include<iostream>
using namespace std;
static int x = 10;
int &foo()
{
cout << "inside func-- " << x << endl;;
return x;
}

int main()
{
foo() = 30;
cout << "printing from main-- " << foo() << endl;
return 0;
}

我得到的输出是-

inside func--10
inside func--30
printing from main--30

为什么第二条语句在第三条语句之前打印。输出的第二行应该是“从 main-- inside func--30 打印”,第三行应该是“30”。

还有第二个代码是-

#include<iostream>
using namespace std;

int foo(int &x)
{
return x;
}

int main()
{
cout << foo(10);
return 0;
}

上面的代码无法编译,但是当我尝试将引用类型从 int 更改为 const int 时,上面的代码可以编译。为什么会这样?

最佳答案

为什么第二条语句打印在第三条语句之前。”

运算符<< 将其数据写入缓冲区。当该缓冲区已满(或者有人刷新缓冲区或其他东西)时,只有它继续在屏幕上写入数据。这种与预期顺序的不匹配只是因为你使用了

cout << "printing from main-- "<<endl;
cout << foo()<<endl;

顺序与您指定的顺序相同,因为 endl 刷新缓冲区。

上面的代码编译失败但是当我尝试改变从 int 到 const int 的引用类型?

您不能将临时 foo(10) 绑定(bind)到非常量引用。你必须在那里使用 const 引用。

关于c++ - 使用引用和左值时的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27437926/

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