2017-06-29 92 views
-2
#include<bits/stdc++.h> 
using namespace std; 
typedef struct trie 
{ 
    int arr[26]; 
    bool isleaf; 
    trie(int isleaf) 
    { 
     this->isleaf=9; 
     cout<<isleaf<<endl; 
     isleaf=false; 
     cout<<isleaf<<endl; 
     cout<<this->isleaf<<endl; 
    } 
}* tr; 
//void inser(s) 
int main() 
{ 
    tr k=new trie(3); 
    cout<<k->isleaf; 
} 

工作正常,並輸出結構變量查詢

3 
0 
1 
1 

#include<bits/stdc++.h> 
using namespace std; 
typedef struct trie 
{ 
    int arr[26]; 
    bool isleaf; 
    trie(int isleaf) 
    { 
     cout<<isleaf<<endl; 
     isleaf=false; 
     cout<<isleaf<<endl; 
     cout<<this->isleaf<<endl; 
    } 
}* tr; 
//void inser(s) 
int main() 
{ 
    tr k=new trie(3); 
    cout<<k->isleaf; 
} 

我得到

3 
0 
68 
68 

我明白,這是未初始化的,但仍爲什麼68?

如果使用普通布爾無論是在全球還是內部的功能和打印而無需初始化我得到0,那麼爲什麼不在這裏?

而且可有人還指出一些良好來源用來清除這樣的變量聲明,公共和私人的概念,和OOPS,區別結構和類等

+3

問計的未定義行爲的行爲大多是徒勞的。 –

+0

的事情是我不是問什麼價值被分配給它。 爲什麼布爾給出了68時,它應該是,如果1位 –

+0

,因爲這是在那裏程序加載時?因爲您使用的編譯器始終將整數初始化爲68?因爲那是你的幸運號碼? – kabanus

回答

0

[basic.fundamental]/6之間的疑慮bool類型的值可以是truefalse

腳註49)通過檢查未初始化自動對象的值使用在由本國際標準所描述的方式「未定義」,如bool值,可能會導致其表現得好像它既不true也不false

未定義行爲是不確定的。這是漫長而短暫的。討論爲什麼一個展示未定義行爲的程序恰好以特定方式表現出來是毫無意義的。