3
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, 3, 2)];
const std::slice_array<int> s2 = test[std::slice(0, 3, 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++ 库的错误吗?

4

1 回答 1

2

是的,您可以将一个分配std::slice_array给另一个operator=

将 sl_arr 中的选定元素分配给 *this 的引用元素。

另外,这里没有错误,结果s1 = [0, 0, 2]是正确的。

在你的情况下:

test { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
s1        ^     ^     ^
s2     ^  ^  ^

请注意, 引用的第一个元素s2是 0,它被分配给 的第一个元素s1,即 的第二个元素test

然后,这个新分配的值是s2分配给 的第二个值的第二个值s1,依此类推。

在任务结束时,test变为

test { 0, 0, 2, 0, 4, 2, 6, 7, 8, 9 }
于 2020-09-10T21:55:26.420 回答