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

前端之家收集整理的这篇文章主要介绍了c – std :: array初始化程序如何用于char?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不确定以下代码是如何工作的.我以为你必须做{‘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”;

原文链接:https://www.f2er.com/c/117887.html

猜你在找的C&C++相关文章