我正在浏览一些与将赋值操作左侧的函数用作左值相关的示例代码。我对此毫无疑问第一个代码是-
#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 引用。
我是一名优秀的程序员,十分优秀!