C++ c++;主脑急转弯

C++ c++;主脑急转弯,c++,C++,您能想到这样一种情况吗?您的程序在没有到达main()开头设置的断点的情况下会崩溃吗 我的答案是在静态变量初始化期间,但不确定…一个非常简单的例子 struct abc { abc() { int* p = 0; *p = 42; // Drat! } }; abc obj; int main(){} 我的回答100%保证这将在main()之前崩溃 DEMO: < P>以上的例子是正确的,但在我的经验中,通常是由于加载DLL……/P>的一些问题,

您能想到这样一种情况吗?您的程序在没有到达main()开头设置的断点的情况下会崩溃吗

我的答案是在静态变量初始化期间,但不确定…

一个非常简单的例子

struct abc
{
   abc()
   {
       int* p = 0;
       *p = 42; // Drat!
   }
};

abc obj;
int main(){}

我的回答100%保证这将在
main()
之前崩溃


DEMO:

< P>以上的例子是正确的,但在我的经验中,通常是由于加载DLL……/P>的一些问题,在代码>主())/>代码被调用之前发生了很多事情,不是所有的代码都在……C++有静态{}块吗?如果真是这样的话,可能会有疯狂的魔法。@Ignacio,介意提及一些这样的事情吗?crt1.o/crt.lib中的所有内容。@Nawaz:在大多数实现中是的。从技术上讲,这是很快的,但不能保证@纳瓦兹:是的,但我想不出一个实现能在不崩溃的情况下工作。@Prason:如果UB不是指崩溃,那么它可能不会崩溃,相反,它可能会造成其他伤害(或者根本没有伤害,如果你幸运的话)。毕竟,它的未定义行为:P@Nawaz-在我所知道的系统上,如果零指针访问没有被硬件捕获,它将覆盖中断向量。“可能”崩溃的速度几乎与此相同。:-)
#include <exception>

struct A
{
   A() 
   {
       std::terminate(); //from <exception>
       //you can also call std::abort() from <cstdlib>
   }
};
A a;

int main(){}
struct A
{
   A() 
   {
       throw "none";
   }
};
A a;

int main(){}