26

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

4

2 回答 2

30

它是一个const char[N]与 相同的东西char const[N],其中N是字符串的长度加上一个用于终止的NUL(或者如果您将“字符串的长度”定义为已经包含 ,则只是字符串的长度NUL)。

这就是为什么您可以sizeof("hello") - 1获取字符串中的字符数(包括任何嵌入NUL的 s);如果它是一个指针,它将不起作用,因为它始终是系统上指针的大小(减一)。

于 2012-09-20T17:47:29.680 回答
8

"Hello world"const char[12](十一个字符加上'\0'终止符)。

L"Hello world"const wchar_t[12]

从 C++14 开始,"Hello world"s就是std::string.

还要注意 C++11 添加的u8"",u""U""string 文字符号,它们分别指定 UTF-8、UTF-16 和 UTF-32 编码。非限定字符串文字(即""L"")的编码是(并且一直是)实现定义的。

于 2014-09-30T08:11:16.423 回答