std :: array初始化程序如何用于char?

use*_*846 7 c++ c++11 stdarray

我不确定以下代码是如何工作的.我以为你必须这样做,{'h', 'e' ...etc...}但似乎工作正常.另一方面,如果你这样做std::array<const char*只会向数组添加一个元素.字符串文字初始化是否有特殊规则?

std::array<char, strlen("hello world!") + 1> s = {"hello world!"};
for (size_t i = 0; i < s.size(); ++i)
{
    std::cout << s[i];
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 8

std::array是一个集合。在此声明中:

std::array<char, strlen("hello world!") + 1> s = {"hello world!"};
Run Code Online (Sandbox Code Playgroud)

使用列表初始化。由于该类实例化的第一个也是唯一一个元素std::array是一个字符数组,它可以用字符串文字进行初始化。

使用sizeofoperator 而不是 function会更正确strlen

std::array<char, sizeof( "hello world!" )> s = {"hello world!"};
Run Code Online (Sandbox Code Playgroud)

你也可以写

std::array<char, sizeof( "hello world!" )> s = { { "hello world!" } };
Run Code Online (Sandbox Code Playgroud)

因为字符数组又是一个集合。

根据 C++ 标准

8.5.2 字符数组[dcl.init.string]

1 窄字符类型 (3.9.1)、char16_t数组、char32_t 数组或wchar_t数组的数组可以分别由窄字符串文字、char16_t字符串文字、char32_t字符串文字或宽字符串文字初始化 ,或由适当类型的字符串文字包围在大括号 (2.14.5) 中。字符串文字值的连续字符初始化数组的元素。

[ 例子:

char msg[] = "Syntax error on line %s\n";
Run Code Online (Sandbox Code Playgroud)