From cppreference.com
valarray<T>operator+()const; (1) valarray<T>operator-()const; (2) valarray<T>operator~()const; (3) valarray<bool>operator!()const; (4) Applies unary operators to each element in the numeric array.
Parameters
(none)
Return value
A numeric array containing elements with values obtained by applying corresponding operator to the values in *this.
Exceptions
May throw implementation-defined exceptions.
Notes
Each of the operators can only be instantiated if the following requirements are met:
The indicated operator can be applied to type T.
The result value can be unambiguously converted to T (1-3) or bool (4).
The function can be implemented with the return type different from
. In this case, the replacement type has the following properties:
All const member functions of
are provided.
,
,
,
and
can be constructed from the replacement type.
For every function taking a conststd::valarray<T>&except
and
(since C++11), identical functions taking the replacement types shall be added;
For every function taking two conststd::valarray<T>& arguments, identical functions taking every combination of conststd::valarray<T>& and replacement types shall be added.
The return type does not add more than two levels of template nesting over the most deeply-nested argument type.
Example
Run this code
#include<iostream>#include<string_view>#include<valarray>template<typenameT>voidprint(std::string_viewconstnote,std::valarray<T>constvala,// by-value, see Notes abovestd::string_viewconstterm="\n"){std::cout<<note<<std::boolalpha<<std::showpos;for(Tconstelement:vala)std::cout<<'\t'<<element;std::cout<<term;}intmain(){std::valarray<int>x{1,2,3,4};print<int>("x: ",x);print<int>("+x: ",+x);print<int>("+ + x: ",++x);print<int>("-x: ",-x);print<int>("- - x: ",--x,"\n\n");std::valarray<short>y{0,1,-1,0x7fff};print<short>("y: ",y);print<short>("~y: ",~y);print<short>("~~y: ",~~y,"\n\n");std::valarray<bool>z{true,false};print<bool>("z: ",z);print<bool>("!z: ",!z);print<bool>("!!z: ",!!z);}Possible output:
x: +1 +2 +3 +4 +x: +1 +2 +3 +4 + + x: +1 +2 +3 +4 -x: -1 -2 -3 -4 - - x: +1 +2 +3 +4 y: +0 +1 -1 +32767 ~y: -1 -2 +0 -32768 ~~y: +0 +1 -1 +32767 z: true false !z: false true !!z: true false See also