0
我無法解釋爲什麼C++中的以下代碼構造即使使用-Wall選項也未給出任何編譯錯誤或警告。C++中的未初始化引用(使用extern聲明)
說有一個頭文件,referencesTest.hpp,其中int的參考聲明使用的extern像這樣:
#ifndef REFERENCES_TEST_HPP
#define REFERENCES_TEST_HPP
extern int &refToInt;
#endif /* REFERENCES_TEST_HPP */
在相應的源文件,referencesTest.cpp,我們則有定義的參考但未初始化,我們嘗試在運行時爲它分配一個值,像這樣:
#include "referencesTest.hpp"
//Why no error/warning is raised here ?
int &refToInt;
int main()
{
int testVariable = 8;
//This crashes on run time with Seg fault but no compilation error/warnings.
refToInt = testVariable;
return 0;
}
當使用GCC編譯版本5.4.0
g++ -Wall referencesTest.cpp -o output
它在運行時崩潰時出現分段錯誤,但爲什麼編譯器不會在此處引發任何錯誤/警告? 我的低估是,C++中的引用在聲明時總是需要初始化。 有人可以幫助解釋爲什麼上面的代碼編譯器?
嗨德文..謝謝你的回覆!這是否提到了標準中的某些地方? –
該標準對未定義的行爲沒有要求。對不起,我不能向你推薦實際的文件,因爲它需要花錢購買。我只是從堆棧溢出的各種帖子知道這個事實。 –