C++中字符串文字的数据类型是什么?

Vih*_*rma 23 c++ string literals

我对字符串文字的数据类型感到困惑.是一个const char *还是一个const char

Set*_*gie 28

这是一个const char[N](这是同一件事char const[N]),这里N是字符串的长度加上一个用于终止NUL(或只是如果你定义"字符串长度"为已包括的字符串的长度NUL).

这就是为什么你sizeof("hello") - 1可以获得字符串中的字符数(包括任何嵌入的NULs); 如果它是一个指针,它将无法工作,因为它总是你的系统上指针的大小(减一).

  • 要备份它,*一个窄字符串文字的类型为"n const char数组",其中n是下面定义的字符串大小,并且具有静态存储持续时间(3.7).* (6认同)

Dev*_*lar 7

"Hello world"const char[12](11个字符加'\0'终结符).

L"Hello world"const wchar_t[12].

而且自从C++ 14以来"Hello world"s就是std::string.

还要注意u8"",u""U""由C++ 11加入字符串文字符号,其分别指定UTF-8,UTF-16和UTF-32的编码.非限定字符串文字(即""L"")的编码是(并且始终是)实现定义的.