gpt4 book ai didi

c++ - std::array 初始化程序如何为 char 工作?

转载 作者:可可西里 更新时间:2023-11-01 18:37:43 28 4
gpt4 key购买 nike

我不确定下面的代码是如何工作的。我以为你必须做{'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];
}

最佳答案

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 Character arrays [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";

关于c++ - std::array 初始化程序如何为 char 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898883/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com