什么保证了slice_array类操作员的行为?
What guarantees behaviors of operators for slice_array class?
在<valarray>
标头中,定义了五个类模板:valarray
、slice_array
、gslice_array
、mask_array
和indirect_array
。
对于valarray<Type>
对象,任何运算符都会影响所有元素。例如
int array1[] = {1,2,3};
int array2[] = {4,5,6};
valarray<int> v1(array1, 3);
valarray<int> v2(array2, 3);
valarray<int> v3 = v1 + v2; //v3 has 5, 7 and 9.
这就是一些用户使用valarray
而不是其他容器(如vector
)的原因,并且许多可靠的网站都描述了该运算符的行为。
顺便说一下,事实是,同样在<valarray>
的 rest 类模板中,运算符是重载的。但是,我没有找到任何描述操作员行为的文档。至少在我的环境中,运算符的行为与类模板valarray
相同,但我想获得一些书面证据。
在阅读标题<valarray>
,找到一个句子#include <bits/slice_array.h>
。在slice_array.h
标题中,我找到了运算符的定义:
/// Assign slice elements to corresponding elements of @a v.
void operator=(const valarray<_Tp>&) const;
/// Multiply slice elements by corresponding elements of @a v.
void operator*=(const valarray<_Tp>&) const;
/// Divide slice elements by corresponding elements of @a v.
void operator/=(const valarray<_Tp>&) const;
/// Modulo slice elements by corresponding elements of @a v.
void operator%=(const valarray<_Tp>&) const;
也许这些可以成为热门,但我不明白@a v
是什么意思。(然而,这只是一个例子,而不是证据。
有人有书面证据吗?
与任何标准功能一样,这些运算符由C++标准定义。
例如,在 C++14 中:
[C++14: 26.6.5.2]
slice_array
分配[slice.arr.assign]
void operator=(const valarray<T>&) const;
const slice_array& operator=(const slice_array&) const;
1这些赋值运算符具有引用语义,将参数数组元素的值分配给
slice_array
对象所引用的valarray<T>
对象的选定元素。
[C++14: 26.6.5.3]
slice_array
计算分配[slice.arr.comp.assign]
void operator*= (const valarray<T>&) const;
void operator/= (const valarray<T>&) const;
void operator%= (const valarray<T>&) const;
void operator+= (const valarray<T>&) const;
void operator-= (const valarray<T>&) const;
void operator^= (const valarray<T>&) const;
void operator&= (const valarray<T>&) const;
void operator|= (const valarray<T>&) const;
void operator<<=(const valarray<T>&) const;
void operator>>=(const valarray<T>&) const;
1这些计算赋值具有引用语义,将指示的操作应用于参数数组的元素以及
slice_array
对象所引用的valarray<T>
对象的选定元素。
另一方面,文档注释与标准无关,是特定实现/工具链的作者的选择。@a
几乎可以肯定是doxygen指令。
- <<操作员在下面的行中工作
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- C++ 与操作员不匹配<<
- 操作员C++的模棱两可的过载
- OpenGL VBO Indexing ( How to compute Index Array)
- C++中>>操作员过载时出现问题?
- 标准::unordered_map 中的 std::array 的值初始化
- NaN 上的宇宙飞船操作员
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 比根<操作员
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- SFINAE不能防止模棱两可的操作员过载吗?
- std::bind on statd::array 的运算符 []