我对字符串文字的类型感到困惑。是
const char *
还是const char
?
它是一个
const char[N]
(与 char const[N]
相同的东西),其中
N
是字符串的长度加上终止 NUL
的长度(或者只是字符串的长度,如果您定义“字符串的长度”已经包括 NUL
)。
这就是为什么您可以执行
sizeof("hello") - 1
来获取字符串中的字符数(包括任何嵌入的 NUL
);如果它是一个指针,它将不起作用,因为它始终是系统上指针的大小(减一)。
"Hello world"
是 const char[12]
(十一个字符加上 '\0'
终止符)。
L"Hello world"
是const wchar_t[12]
。
自 C++14 起,
"Hello world"s
为 std::string
。
自 C++17 起,
"Hello world"sv
为 std::string_view
。
另请注意 C++11 添加的
u8""
、u""
和 U""
字符串文字表示法,它们分别指定 UTF-8、UTF-16 和 UTF-32 编码。非限定字符串文字(即 ""
和 L""
)的编码是(并且始终是)实现定义的。