提问人:Arnaud M. 提问时间:1/10/2022 更新时间:1/10/2022 访问量:64
std::cout 在 C++ 中的行为?[复制]
Behavior of std::cout in C++? [duplicate]
问:
我正在用这个小代码观察到一个奇怪的行为:
#include <iostream>
#include <cstdio>
using namespace std;
int get_input()
{
int val;
cin >> val;
return val;
}
int main()
{
cout << "Res = " << get_input() << "\n";
//printf("Res = %d\n", get_input());
}
我通过这个命令以最简单的方式编译了它(我也尝试过不使用 -std 选项):
g++ -Wall -std=c++17 -o test.exe test.cpp
当我执行代码时,我看到
Res =
在适当的位置有一个空行等待用户输入。 我所期望的行为是在返回 get_input 函数后显示“Res =”。这是我使用C++在线编译器(如 cpp.sh)时观察到的行为。
谁能向我解释一下这里发生了什么?
我在 Debian 11 上的 gcc 版本是:
g++ --version
g++ (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
多谢
答:
0赞
Sudeep Prasad
1/10/2022
#1
这里有两件事在起作用:运算符优先级和表达式计算顺序。<<情况下的运算符优先级是从左到右。在以前版本的编译器中未定义计算顺序;现在是。
正如这个出色的答案中所描述的,计算顺序现在与运算符优先级兼容,这意味着它从左到右发生:
cout << "Res = "
首先发生。运算符返回 cout 本身的实例。<<
- 然后发生,在哪个时间点被调用。
...等等。
cout << get_input()
get_input
它曾经因编译器而异,但现在它是标准化的。
评论