[英]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
是一個布爾文字,因此它屬於常量表達式的類別,因此它可以限定為空指針常量。
false
和true
是0
和1
快捷方式。 對於指針,使用NULL
define NULL 0
。 所以它正確的語法。
編譯器允許它,因為在C ++中false
與0
和NULL
相同。
就個人而言,至少對於作業,我發現使用NULL
來表示空指針更容易理解和更正確。
順便說一句,在C ++之前,在某些系統上, NULL
實際上是一個定義為(void*)0xffff
的宏; 在這個答案中可以找到一些背景知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.