std::valarr...ator+,-,~,!(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::valarr...ator+,-,~,!(3) πŸ’–

okay bestie, this is the C++ Standard Libary manual page for std::valarray::operator+,-,~,!, and the manual name is exactly std::valarr...ator+,-,~,!(3) β€” folding that right in near the top so the header line doesn’t have to be all extra. slay. πŸ’…


πŸ’… NAME πŸ’…

std::valarray::operator+,-,~,! - std::valarray::operator+,-,~,!


✨ Synopsis ✨

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) β€” literally no parameters, bestie.


πŸ’– Return value πŸ’–

You get back a numeric array containing elements with values obtained by applying the corresponding operator to the values in *this.


🫢 Exceptions 🫢

May throw implementation-defined exceptions.

bestie, that’s the whole warning: implementation-defined exceptions are possible, so don’t act surprised if your implementation has opinions. 😭

πŸ¦‹ 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 std::valarray. In this case, the replacement type has the following properties:

  • All const member functions of std::valarray are provided.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array and std::indirect_array can be constructed from the replacement type.
  • For every function taking a const std::valarray<T>& except begin() and end() (since C++11), identical functions taking the replacement types shall be added;
  • For every function taking two const std::valarray<T>& arguments, identical functions taking every combination of const std::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 🌈

okay, // Run this code β€” literally copy-paste this:

        #include <iostream>
        #include <string_view>
        #include <valarray>

        template<typename T>
        void print(std::string_view const note,
                   std::valarray<T> const vala, // by-value, see Notes above
                   std::string_view const term = "\n")
        {
            std::cout << note << std::boolalpha << std::showpos;
            for (T const element : vala)
                std::cout << '\t' << element;
            std::cout << term;
        }

        int main()
        {
            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 πŸ‘‘

  • operator+=, operator-=, operator*=, operator/=, operator%=, operator&=, operator|=, operator^=, operator<<=, operator>>= β€” applies compound assignment operator to each element of the valarray (public member function)
  • operator+, operator-, operator*, operator/, operator%, operator&, operator|, operator^, operator<<, operator>>, operator&&, operator|| β€” applies binary operators to each element of two valarrays, or a valarray and a value (function template)

πŸ’€ Hidden category πŸ’€

  • Pages with unreviewed LWG DR marker

mwah πŸ’‹ this lil page came from http://cppreference.com, dated 2024.06.10, and it’s the std::valarr...ator+,-,~,!(3) manual β€” that’s the whole footer folded into this cute sign-off instead of a boring last line. periodt. 🌸

πŸ“¦ where this page comes from