2017-08-03 2 views
4

に次のコードは、C言語ではなくC++でコンパイルしていない:Cで動作しますが、C++

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

エラー

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

しかし、これは、CおよびC++の両方でコンパイルされます。

int *ptr = 0; //compiles in both 

0を割り当てるとうまく機能しないのはなぜですか?

+1

正確にエラーとは何ですか? –

+5

ポインタコンテキストの '0'は特別な意味を持っているためです。 –

+3

'0'はヌルポインタ定数です。 '25 'は有効なポインタ定数ではありません。最初はC言語で警告なしでコンパイルすべきではありません。 –

答えて

6

あなたは暗黙的にそれはしばしばNULLの値として使用されているので、しかし0は、歴史的な理由のために、することができ、C++でintからint*に変換することはできませんので。

あなたがC++でそれをしたい場合は、明示的にポインタに番号をキャストする必要があります。

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

'NULL'の値としてよく使われるわけではありません.0は' nullptr'が到着する前にC++の公式な値でした。 'NULL'はCからです。 – Slava

+0

大丈夫です!確かめます。 @Tommy Andersen – Chaitanya

+0

@ Slava C++の実装では、NULLを#0として#定義するのが一般的です。-nullptrより前の他の値はどれくらいですか? –

関連する問題