2016-07-19 11 views
1

Ich lerne gefunden C++ mit früherem Java experience.I das folgende Beispiel in dem cplusplus.com:Warum gibt die Funktion einen booleschen Wert zurück, wenn sie int deklariert ist?

int CDummy::isitme (CDummy& param) 
{ 
    if (&param == this) 
    { 
     return true; //ampersand sign on left side?? 
    } 
    else 
    {  
     return false; 
    } 
} 

Meine Frage ist: Warum eindeutig die Methode als int erklärt hat es boolean false zurück, wenn ich? In Java ist das nie möglich. Die Verbindung des Beispiels ist: here.

+0

Sind Sie fragen, warum es legal ist (das ist, weil es eine implizite Konvertierung ist von 'bool' zu' int'), oder sind Sie fragen, warum der Code so geschrieben ist (was nur vom Autor beantwortet werden kann)? Kannst du mit der Quelle verlinken? Als eine Frage des Stils, und mit ungenügendem Kontext, um sicher zu sein, sollte es wahrscheinlich definiert sein, 'bool' zurückzugeben. –

+5

@KeithThompson - Der Autor schreibt Mist Code IMHO –

+0

Ich frage, warum es legal ist.Ist es sogar möglich? Als Person aus Java, sehe ich es als falsch. –

Antwort

8

Während die Frage, warum die Funktion tut, was sie am besten können vom Autor der Funktion beantwortet wird, ist es leicht zu erklären, warum C++ solche Funktion ermöglicht es, ohne ein Problem zu kompilieren.

In C++ ist boola fundamental integral type, so dass es frei in eine Zahl umgewandelt werden: true1 wird und false Null wird.

0

Dies ist nur eine Instanz der impliziten Konvertierung. In C++ sind 1 und True (auch 0 und False) die gleichen Sache (n).

Sie könnten auch etwas tun, wie

while (1) 
    //Infinite loop 

oder

bool b = false; 
if (b == 0) { 
    //This is reached 
} 
else { 
    //This is not 
} 
+0

(Java ist ein bisschen weniger unordentlich hier, aber das zweite Beispiel würde afaik auch funktionieren.) – Cadoiz