2017-08-03 7 views
4

Der folgende Code kompiliert in C, aber nicht in C++:Arbeiten in C, aber nicht in C++

int *ptr = 25; //why not in C++? 

Fehler

prog.cpp: In function ‘int main()’: 
prog.cpp:6:11: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive] 
    int *ptr = 25; 

Aber dies stellt in C und C++:

int *ptr = 0; //compiles in both 

Warum funktioniert die Zuweisung 0 gut und andere Zahlen funktioniert nicht?

+1

Was genau ist der Fehler? –

+5

Weil '0' in einem Zeigerkontext eine besondere Bedeutung hat. –

+3

'0' ist eine Nullzeigerkonstante; '25' ist keine gültige Zeigerkonstante. Der erste sollte nicht ohne Warnungen in C. kompilieren. –

Antwort

6

Weil Sie nicht implizit von int zu int* in C++ konvertieren kann, aber 0 kann, aus historischen Gründen, da es oft als der Wert von NULL verwendet wird.

Wenn Sie wollen, dass es in C++ zu tun, müssen Sie werfen explizit die Nummer auf einen Zeiger:

int *ptr = reinterpret_cast<int*>(25); 
+2

Es wird nicht oft als Wert von 'NULL' verwendet, 0 war offizieller Wert in C++ bevor 'nullptr' angekommen ist. 'NULL' ist von C. – Slava

+0

okay danke! Ich werde das überprüfen. @Tommy Andersen – Chaitanya

+0

@Slava Es ist üblich, dass NULL in C++ - Implementierungen als 0 definiert wird - welchen anderen Wert (vor nullptr) könnte es haben? –

Verwandte Themen