Из любопытства, мне интересно, каков реальный базовый тип строкового литерала C++.Тип литерала строки C++
В зависимости от того, что я наблюдаю, у меня разные результаты.
Испытание TypeId как следующее:
std::cout << typeid("test").name() << std::endl;
показывает мне char const[5]
.
Попытка присвоить строку литерала несовместимого типа как так (чтобы увидеть данную ошибку):
wchar_t* s = "hello";
Я получаю a value of type "const char *" cannot be used to initialize an entity of type "wchar_t *"
от IntelliSense VS12 в.
Но я не вижу, как это может быть const char *
как следующая строка принята VS12:
char* s = "Hello";
Я прочитал, что это позволило в 11 стандартов обработки перед C++ как это было ретро-совместимость с C, хотя модификация s
приведет к Undefined Behavior. Я предполагаю, что это просто VS12, который еще не реализовал весь стандарт C++ 11 и что эта строка обычно приводит к ошибке.
Чтение стандарт C99 (from here, 6.4.5.5) предполагает, что он должен быть массивом:
многобайтовый символ последовательность затем используется для инициализации массив статической продолжительности хранения и длины всего , достаточный для сохранения последовательности.
Итак, Что такое тип под строковым литералом C++?
Большое спасибо за ваше драгоценное время.
VS12 говорит какой-то странный диалект, который похож, но не идентичны, C++. –