在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繼承的。
不需要任何擴展。多字符文字非常標準,它們不是很有用,因爲它們的價值是實現定義的。 – Praetorian