В 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 это приводит к неудобной инициализации char. Либо вы оставите его неинициализированным, либо используйте бесполезное значение, например 0
или '\0'
.
char garbage;
char useless = 0;
char useless2 = '\0';
В C++, вы должны использовать строковые литералы вместо символьного литерала, если вы хотите, чтобы быть пустым.
(somecondition ? ' ' : '') // error
(somecondition ? " " : "") // necessary
Почему именно так? Я предполагаю, что причина C++ унаследована от C.
Нет необходимости в расширении. Многосимвольные литералы очень стандартны, они просто не очень полезны, потому что их значение определяется реализацией. – Praetorian