Hjo Asked:2023-04-22 19:58:47 +0000 UTC2023-04-22 19:58:47 +0000 UTC 2023-04-22 19:58:47 +0000 UTC 创建静态全局对象时 gcc 崩溃 772 为什么clang它执行正确,但gcc使该程序崩溃?神栓 struct A { A(); ~A(); }; static A a; int main() { } #include <iostream> A::A() { std::cout << "A::A()\n"; } A::~A() { std::cout << "A::~A()\n"; } c++ 1 个回答 Voted Best Answer HolyBlackCat 2023-04-22T20:27:28Z2023-04-22T20:27:28Z std::cout使用前需要初始化。 通常这种初始化会自动发生,因为它#include <iostream>包含static一个在其构造函数中进行初始化的变量。(虽然 libstdc++-13 似乎想出了一个更聪明的方法。) 但要使其正常工作,#include <iostream>它必须高于使用std::cout. (这对模板变量没有帮助。) 解决方案是包含<iostream>higher,或者手动初始化,如下所示: std::ios_base::Init init; std::cout << "A::A()\n";
std::cout使用前需要初始化。通常这种初始化会自动发生,因为它
#include <iostream>包含static一个在其构造函数中进行初始化的变量。(虽然 libstdc++-13 似乎想出了一个更聪明的方法。)但要使其正常工作,
#include <iostream>它必须高于使用std::cout. (这对模板变量没有帮助。)解决方案是包含
<iostream>higher,或者手动初始化,如下所示: