該問題出現在答案的評論的問題Is C/C++ bool type always guaranteed to be 0 or 1 when typecast'ed to int?正在讀取一個不確定的值未定義的行爲?
有問題的代碼分配的bool
(本地)陣列而不初始化它們的值。
const int n = 100;
bool b[n];
很明顯,b
中的值是不確定的。
一些評論者認爲閱讀例如b[0]
是未定義的行爲。這是C++標準中的任何地方嗎?我仍然相信相反的:
有明確的存儲分配和基本布爾類型的初始化是完整的,因爲它沒有一個構造函數。因此,它肯定與取消引用未初始化的指針或調用未初始化的非重要對象上的方法/轉換運算符相同。這些具體情況似乎已被標準覆蓋。
C:What happens to a declared, uninitialized variable in C? Does it have a value?中的行爲確實未定義,有些受訪者似乎混淆了這兩者。
在最新的C++ 0x草稿中,我找不到不確定值的定義尤其沒有定義允許訪問這樣的值來觸發處理器陷阱。事實上,Bjarne的Stroustrup的是不知道的inderminate值可能是什麼:http://zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html
呵呵,「未定義的行爲」在StackOverflow中是一個非常喜歡的術語,它用於從定義的實現,直到未定義的實際定義。 – 2010-11-25 16:54:13
我的意思是諺語中的「鼻魔」種類未定義。 – Sebastian 2010-11-25 16:57:30