2017-06-29 6 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; 
} 

Adaequat und AusgängeStruct Variable Abfrage

3 
0 
1 
1 

Aber in

#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; 
} 

ich

3 
0 
68 
68 

Ich verstehe, dass es nicht initialisiert ist, aber immer noch 68 warum?

Wenn ein normales bool verwenden entweder global oder innerhalb Funktion und ausdrucken, ohne i 0 erhalten Initialisierung, warum hier nicht?

Und kann jemand auch einige gute Quelle hinweist Zweifel über solche Variablendeklarationen zu löschen, öffentliche und private Konzepte und OOPS, Unterschied zwischen structs und Klassen usw.

+3

Fragen nach dem Verhalten von undefiniertem Verhalten ist meist sinnlos. –

+0

die Sache ist, ich frage nicht, welcher Wert zugewiesen wird. warum ein Bool gibt eine 68, wenn es sein soll, wenn 1 Bit –

+0

Weil das war, was war, als das Programm geladen? Weil der verwendete Compiler initis immer auf 68 initialisiert? Weil das deine Glückszahl ist? – kabanus

Antwort

0

[basic.fundamental]/6 Werte vom Typ bool sind entweder true oder false.

Fußnote 49) Mit einem bool Wert in einer Weise von dieser Internationalen Norm beschrieben als „undefiniert“, wie durch den Wert einer nicht initialisierten automatischen Objekt untersuchen, könnte dazu führen, dass sich verhalten, als ob es weder true ist noch false.

Undefiniertes Verhalten ist nicht definiert. Das ist lang und kurz. Es ist wirklich sinnlos zu diskutieren, warum ein Programm, das undefiniertes Verhalten aufweist, es auf eine bestimmte Art und Weise manifestiert.