C++ 异常阻止 cout 打印
C++ exception preventing cout print
在下面的代码中:
#include <iostream>
using namespace std;
int f()
{
throw 1;
}
int main()
{
try
{
cout << "Output: " << f() << endl;
}
catch (int x)
{
cout << x;
}
}
为什么不打印 "Output: "
?不应该在 operator<<(cout, f())
之前调用 operator<<(cout, "Output: ")
吗?如果该行是原子的,那么如何反转打印?
<< 运算符的参数求值顺序未在 c++ 标准中定义。看起来您的编译器在实际打印之前首先评估所有参数。
考虑将实际的运算符函数调用组装为 operator<<(operator<<(operator<<(cout, "Output:"), f()), endl)
可能会有所帮助:然后您可以看到 operator<<(cout, "Output:")
和 f()
只是另一个调用的两个函数参数operator<<
: 没有要求首先计算哪个函数参数。
在下面的代码中:
#include <iostream>
using namespace std;
int f()
{
throw 1;
}
int main()
{
try
{
cout << "Output: " << f() << endl;
}
catch (int x)
{
cout << x;
}
}
为什么不打印 "Output: "
?不应该在 operator<<(cout, f())
之前调用 operator<<(cout, "Output: ")
吗?如果该行是原子的,那么如何反转打印?
<< 运算符的参数求值顺序未在 c++ 标准中定义。看起来您的编译器在实际打印之前首先评估所有参数。
考虑将实际的运算符函数调用组装为 operator<<(operator<<(operator<<(cout, "Output:"), f()), endl)
可能会有所帮助:然后您可以看到 operator<<(cout, "Output:")
和 f()
只是另一个调用的两个函数参数operator<<
: 没有要求首先计算哪个函数参数。