将slice_array分配给另一个slice_array是否正确?

问题描述

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 }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...