Насколько я могу судить, перед С++ 11 строковые литералы обрабатывались почти точно так же между C и С++.
Теперь я признаю, что существуют различия между C и С++ при обработке широких строковых литералов.
Единственные различия, которые я смог найти, - это инициализация массива строковым литералом.
char str[3] = "abc"; /* OK in C but not in C++ */
char str[4] = "abc"; /* OK in C and in C++. Terminating zero at str[3] */
И техническая разница, которая имеет значение только в С++. В С++ "abc"
есть const char [4]
, а в C - char [4]
. Однако у С++ есть специальное правило, которое позволяет преобразовать в const char *
, а затем в char *
, чтобы сохранить совместимость C до С++ 11, когда это специальное правило больше не применяется.
И разница в допустимых длинах литералов. Однако в практическом отношении любой компилятор, который компилирует код C и С++, не будет применять нижний предел C.
У меня есть интересные ссылки:
Есть ли другие отличия?