问题描述
int input[] = { 0,1,2,3,4,5,6,7,8,9 };
std::valarray<int> test(input,sizeof(input)/sizeof(input[0]));
const std::slice_array<int> s1 = test[std::slice(1,2)];
const std::slice_array<int> s2 = test[std::slice(0,1)];
// is it correct to do this?
s1 = s2;
std::valarray<int> temp(s1);
printf("temp[0]=%d temp[1]=%d temp[2]=%d\n",temp[0],temp[1],temp[2]);
运行代码,我得到:
test: 0 1 2 3 4 5 6 7 8 9
s1: 1 3 5
s2: 0 1 2
s1=s2
s1: 0 0 2 --> 0 1 2 is expected for s1
test: 0 0 2 0 4 5 6 7 8 9
我只是想知道s1 = s2
是否正确使用?
如果使用正确,那么可以肯定地说这是我的旧版LLVM C ++库的错误吗?
解决方法
是的,您可以使用operator=
将一个std::slice_array
分配给另一个{p
将sl_arr中的选定元素分配给* this的引用元素。
此外,这里没有错误,s1 = [0,2]
的结果是正确的。
在您的情况下:
test { 0,1,2,3,4,5,6,7,8,9 }
s1 ^ ^ ^
s2 ^ ^ ^
请注意,s2
引用的第一个元素为0,该元素被分配给s1
的第一个元素,即test
的第二个元素。
这个新分配的值就是s2
的第二个值,它被分配给s1
的第二个值,依此类推。
分配结束后,test
变为
test { 0,9 }