gpt4 book ai didi

c++ - 使用初始化列表将 const 数组引用实例化为构造函数参数,是否允许?

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:41 24 4
gpt4 key购买 nike

我有一个构造函数,它将对数组的引用作为参数。我可以使用大括号括起来的初始化列表来调用该构造函数吗?
临时数组的生命周期是构造函数的生命周期,还是不能保证?

我的主要问题:
下面的示例程序是否正确?

class Test {
public:
template <size_t N>
Test(const int (&numbers)[N]) {
for (const int &number : numbers)
sum += number;
}

int getSum() const {
return sum;
}

private:
int sum = 0;
};

int main() {
Test test({1, 2, 3});
assert(test.getSum() == 6);
}

上面的代码工作正常,但是,我问这个的原因是我在一个更大的项目中使用相同的方法,其中数组的元素没有正确初始化。

例如如果 {16} 被用作构造函数的参数,有时 numbers[0] 的值是 0b00000000 00000000 00000000 00010000,即正确,有时它是一个不同的数字,例如0b11111111 11111111 11111111 000100000b00000000 00000000 00000011 00010000
int 的大小在我正在处理的微 Controller 平台上是 4 个字节,当 numbers[0] 错误时,我总是看到相同的模式:最少significant byte 是正确的,但是在 3 个最重要的字节中,总是有一个全 1 的 block 。这让我相信它没有正确初始化。

我无法隔离问题或使用小示例重现它。

最佳答案

Test test({1, 2, 3}); ,临时数组的生命周期结束于 ; (因此在构造函数调用完成后)。

所以你在构造函数中的用法是正确的。

但如果您一直将该数组作为成员引用,则该引用将变为悬空。

关于c++ - 使用初始化列表将 const 数组引用实例化为构造函数参数,是否允许?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527512/

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