Bla*_*ger 6 c++ proxy-classes assignment-operator valarray
例如,赋值运算符std::slice_array:
void operator=(const valarray<T>&) const; //#1
void operator=(const T&) const; //#2
const slice_array& operator=(const slice_array&) const; //#3
Run Code Online (Sandbox Code Playgroud)
#1并#2返回void,但#3返回const slice_array&。
它禁止某些代码,例如:
std::valarray<int> va{1, 2, 3, 4, 5, 6};
va[std::slice(3, 2, 2)] = va[std::slice(0, 2, 2)] = va[0];
Run Code Online (Sandbox Code Playgroud)
为什么?
虽然返回引用operator=是常见且合理的实现方式,但请记住,这valarray是一个很少使用且不受支持的库。有关此主题的更详细答案,请参阅C++ valarray 与向量。
来自其中一个答案:
ISTR 认为,它没有从标准中删除的主要原因是没有人花时间彻底评估该问题并编写删除它的提案。
即使在进行意见辩论之前,当前的实施中也存在错误。例如,请参阅分配给 gslice_array 会给出运行时错误。