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)
类std::array
是一个集合。在此声明中:
std::array<char, strlen("hello world!") + 1> s = {"hello world!"};
Run Code Online (Sandbox Code Playgroud)
使用列表初始化。由于该类实例化的第一个也是唯一一个元素std::array
是一个字符数组,它可以用字符串文字进行初始化。
使用sizeof
operator 而不是 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++ 标准
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)