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<<: 没有要求首先计算哪个函数参数。