gpt4 book ai didi

c++ - C++内联数组成员统一初始化

转载 作者:行者123 更新时间:2023-12-02 10:08:00 25 4
gpt4 key购买 nike

假设您有一个包含数组成员的类:

class A
{
private:
uint8_t length;
uint8_t arr[10];
public:
A(uint8_t length, const uint8_t array[]): length(length)
{
memcpy(arr, array, length);
}
};

然后,您有一个全局常量对象,并且想要使用统一的初始化,如下所示:
const A A_CONST{1,{23}};

在这种情况下,编译器将给出错误:“从'int'到'const uint8_t *的无效转换”

但这有效:
const uint8_t arr[]={23};
const A A_CONST{1,arr};

但是,那也有不必要的全局常量“arr”。我不明白为什么编译器无法通过查看构造函数将{23}强制转换为const uint8_t *。为什么会这样,并且有解决方法?

最佳答案

您定义的构造函数等效于

A(uint8_t length, const uint8_t *array)

这就是编译器试图告知的内容。

要像您的示例中那样进行初始化,您必须使用其他类型或 std::initializer_list ,例如
#include <algorithm>
#include <initializer_list>

A(const std::initializer_list<uint8_t> array)
: length(array.size())
{
std::copy(array.begin(), array.end(), arr);
}

除此之外,不要使用纯数组或(长度,指针)参数。更好地使用 std::arraystd::vector这样的现代类型,这样不容易出错,并且您可以免费获得这种初始化。

关于c++ - C++内联数组成员统一初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224698/

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