簡體   English   中英

編譯器允許'char * k = false'?為什么?

[英]compiler allows 'char * k= false'? Why?

我從我的角度看編譯器行為發現很奇怪,它允許將布爾值賦給* char

char * k= false;

為什么? 但是在賦值后,char仍未初始化。 為什么編譯器不允許賦值int值?

它將隱式地將布爾值false轉換為值為零的整數,並因此聲明NULL指針。 它實際上沒有什么不同

char* k = 0;

這是有效的語法

C ++ 03標准,#4.10:

空指針常量是整數類型的整數常量表達式(5.19)rvalue,其值為零。

5.19:

一個整數常量表達式只能包含文字(2.13),枚舉數,常量變量或用常量表達式(8.5)初始化的整數或枚舉類型的靜態數據成員,整數或枚舉類型的非類型模板參數,以及sizeof表達式。

false是一個布爾文字,因此它屬於常量表達式的類別,因此它可以限定為空指針常量。

falsetrue01快捷方式。 對於指針,使用NULL define NULL 0 所以它正確的語法。

編譯器允許它,因為在C ++中false0NULL相同。

就個人而言,至少對於作業,我發現使用NULL來表示空指針更容易理解和更正確。

順便說一句,在C ++之前,在某些系統上, NULL實際上是一個定義為(void*)0xffff的宏; 這個答案中可以找到一些背景知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM