我尝试运行一个简单的C++程序,但不确定为什么不同的编译器提供不同的输出结果。
#include <iostream>
struct A
{
A() { std::cout << "Object A created" << std::endl; }
friend std::ostream& operator<<(std::ostream& os, const A& a)
{
os << a.str << "\n";
return os;
}
static bool printMe()
{
std::cout << "static bool printMe() of object A" << std::endl;
return true;
}
std::string str{"This is object A"};
};
int main()
{
std::cout << A() << (A::printMe() ? "TRUE" : "FALSE") << std::endl;
}
输出1:一些编译器提供以下输出:
Object A created
This is object A
static bool printMe() of object A
TRUE
例如: https://www.programiz.com/cpp-programming/online-compiler/ 输出2:其他编译器会提供不同的输出。
static bool printMe() of object A
Object A created
This is object A
TRUE
例如: http://cpp.sh/ 我不理解为什么某些编译器会在创建对象A之前执行静态函数,我期望的顺序是保持不变,即在调用静态函数之前创建对象A,就像OUTPUT2中一样。
cout << i << i++; // 在C++17之前为未定义行为
- 273Ki
。 - Quimbycout << f() << g()
可以与auto e1 = f(); auto e2 = g(); cout << e1; cout << e2;
或者auto e1 = f(); cout << e1(); auto e2 = g(); cout << e2;
相同,或者是你看到的那个auto e2 = g(); auto e1 = f(); cout << e1; cout << e2;
。 - Ben Voigt