2014-12-23 160 views
3

在C和C++中,規則是相同的。在C中,爲什麼字符常量/文字不能爲空?

[§6.4.4.4]/2一個整數的字符常數爲括在單引號的一個或更多 多字節字符的序列,如在'x'

在C++中,

[§2.14.3]/1字符文字是在單引號包圍 一個或多個字符,如在'x',任選地通過本 字母u之一,U,或L之前,如分別爲u'y',U'z'L'x', 。

關鍵短語是「一個或多個」。相反,字符串文字可以是空的,"",大概是因爲它由空終止字符組成。在C中,這會導致字符的初始化很尷尬。您可以將其保持未初始化狀態,或使用無用的值,如0'\0'

char garbage; 
char useless = 0; 
char useless2 = '\0'; 

在C++中,如果你希望它是空的,你必須使用字符串而不是字符。

(somecondition ? ' ' : '') // error 
(somecondition ? " " : "") // necessary 

這是什麼原因?我假設C++的原因是從C繼承的。

回答

10

原因是字符文字被定義爲一個字符。可能有擴展名使其成爲更多而不是一個字符,但它至少需要一個字符或者它沒有任何意義。這與試圖做的是一樣的:

int i = ; 

如果你沒有指定一個值,那你放什麼?

+3

不需要任何擴展。多字符文字非常標準,它們不是很有用,因爲它們的價值是實現定義的。 – Praetorian

3

這是因爲空字符串末尾仍然包含空字符'\0',所以仍然存在綁定到變量名稱的值,而空字符常量沒有值。

0

字符串是由空字符('\ 0')終止的一組字符。 所以一個空字符串在最後總會有一個NULL字符。

但是在字符文字的情況下沒有值。 它至少需要一個字符。

相關問題