最近,我阅读了一个编码示例,其中解释了以下内容会导致 Visual Studio 中的编译器错误:
int* pointer1;
*pointer1 = 10;
Run Code Online (Sandbox Code Playgroud)
作者声称由于pointer1在解引用之前未初始化,所以在Visual Studio中出现如下错误:
C4700:使用了未初始化的局部变量“pointer1”
确实如此。这个场景是有道理的。
但是,如果我使用完全相同的代码并使用 g++ 进行编译,则不会发生编译器错误并且我可以pointer1以任何正常方式自由使用。
为什么会有差异?g++ 是否pointer1在初始化之前分配了地址?