gpt4 book ai didi

c++ - 什么保证了 slice_array 类的运算符的行为?

转载 作者:行者123 更新时间:2023-11-28 01:35:35 26 4
gpt4 key购买 nike

<valarray> header ,定义了五个类模板:valarray , slice_array , gslice_array , mask_arrayindirect_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>中的其余类模板中也是如此。 ,运算符重载。但是,我还没有找到任何描述运算符(operator)行为的文档。至少在我的环境中,运算符的行为与 valarray 的相同。类模板,但我想获得一些书面证据。

阅读中<valarray>标题,一句话#include <bits/slice_array.h>被发现。而在 slice_array.h header ,我找到了运算符的定义:

  ///  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 assignment                                              [slice.arr.assign]

void operator=(const valarray<T>&) const;
const slice_array& operator=(const slice_array&) const;

1 These assignment operators have reference semantics, assigning the values of the argument array elements to selected elements of the valarray<T> object to which the slice_array object refers.

[C++14: 26.6.5.3] slice_array computed assignment                   [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 These computed assignments have reference semantics, applying the indicated operation to the elements of the argument array and selected elements of the valarray<T> object to which the slice_array object refers.

另一方面,文档注释与标准无关,是您的特定实现/工具链作者的选择。 @a几乎可以肯定是 a doxygen directive .

关于c++ - 什么保证了 slice_array 类的运算符的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com