
[英]I need declare a global array, but y my variable does not work, i have something like this:
[英]Why does my array initializer not work unless I create a separate variable for it?
以下 C++ 代码编译时没有错误或警告,但由于某种原因,当我打印出 foo.arr 的内容时,我得到的只是垃圾值。 看起来数组成员没有被正确初始化。
template<int n> class C{
public:
const uint8_t (&arr)[n];
const int length = n;
C(const uint8_t (&arr_arg)[n]):arr(arr_arg)
{}
};
int main() {
C<5> foo{{1,2,3,4,5}};
for(int i =0;i<foo.length;i++){
printf("foo.arr[%d]=%2x\r\n",i,foo.arr[i]);
};
}
但是如果我这样写,当我打印出结果时,foo.arr 就被正确地初始化了。
int main() {
const uint8_t x[]{1,2,3,4,5};
C<5> foo{x};
for(int i =0;i<foo.length;i++){
printf("foo.arr[%d]=%2x\r\n",i,foo.arr[i]);
};
}
为什么第二种情况有效,而第一种情况无效?
人们会认为编译器会为常量数据 {1,2,3,4,5} 创建一个包含五个字节的块,然后 foo 的初始化程序会将 foo.arr 指向该字节块。 似乎 foo.arr 指向的不是数据所在的位置,或者在我打印出来时数据不再存在(可能被覆盖)。
C<5> foo{{1,2,3,4,5}};
构造函数的参数是对临时 object 的引用,该引用在构造函数调用完成后被销毁。 对此 object 的所有后续引用都会导致未定义的行为。
C<5> foo{x};
这里,构造函数的参数是对一个object的引用,这个引用保留在scope中,只要后续被引用和使用,它就一直存在。
似乎...数据在我打印出来时已经不存在了(可能被覆盖)。
这确实是正在发生的事情。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.