我不确定以下代码是如何工作的.我以为你必须做{‘h’,’e’……等……但似乎工作得很好.另一方面,如果你执行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]; }
解决方法
类std :: array是一个聚合.在这个声明中:
std::array<char,strlen("hello world!") + 1> s = {"hello world!"};
使用列表初始化.由于类std :: array的这个实例化的第一个也是唯一的元素是一个字符数组,它可以用字符串文字初始化.
使用sizeof运算符而不是函数strlen会更正确:
std::array<char,sizeof( "hello world!" )> s = {"hello world!"};
你也可以写
std::array<char,sizeof( "hello world!" )> s = { { "hello world!" } };
因为字符数组又是一个聚合.
根据C标准
8.5.2字符数组[dcl.init.string]
1 An array of narrow character type (3.9.1),char16_t array,char32_t
array,or wchar_t array can be initialized by a narrow string literal,
char16_t string literal,char32_t string literal,or wide string
literal,respectively,or by an appropriately-typed string literal
enclosed in braces (2.14.5). Successive characters of the value of the
string literal initialize the elements of the array.[ Example: char msg[] = “Syntax error on line %s\n”;