Namespaces
Variants

std::valarray<T>::operator+,-,~,!

Aus de.cppreference.net
 
 
 
 
valarray<T> operator+() const;
(1)
valarray<T> operator-() const;
(2)
valarray<T> operator~() const;
(3)
valarray<bool> operator!() const;
(4)

Wendet unäre Operatoren auf jedes Element im numerischen Array an.

Parameter

(keine)

Rückgabewert

Ein numerisches Array, das Elemente mit Werten enthält, die durch Anwendung des entsprechenden Operators auf die Werte in * this erhalten wurden.

Ausnahmen

Kann implementierungsdefinierte Ausnahmen auslösen.

Anmerkungen

Jeder der Operatoren kann nur instanziiert werden, wenn die folgenden Anforderungen erfüllt sind:

  • Der angegebene Operator kann auf den Typ T angewendet werden.
  • Der Ergebniswert kann eindeutig in T (1-3) oder bool (4) konvertiert werden.

Die Funktion kann mit einem von std::valarray verschiedenen Rückgabetyp implementiert werden. In diesem Fall hat der Ersatztyp die folgenden Eigenschaften:

  • Alle const Mitgliedsfunktionen von std::valarray werden bereitgestellt.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array und std::indirect_array können aus dem Ersatztyp konstruiert werden.
  • Für jede Funktion, die einen const std::valarray<T>& nimmt, mit Ausnahme von begin() und end()(seit C++11), werden identische Funktionen hinzugefügt, die die Ersatztypen nehmen;
  • Für jede Funktion, die zwei const std::valarray<T>& Argumente nimmt, werden identische Funktionen hinzugefügt, die jede Kombination aus const std::valarray<T>& und Ersatztypen nehmen.
  • Der Rückgabetyp fügt nicht mehr als zwei Ebenen der Template-Verschachtelung über dem am tiefsten verschachtelten Argumenttyp hinzu.

Beispiel

#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);
}

Mögliche Ausgabe:

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

Siehe auch

wendet zusammengesetzte Zuweisungsoperatoren auf jedes Element des valarray an
(öffentliche Elementfunktion)
wendet binäre Operatoren auf jedes Element von zwei valarrays oder einem valarray und einem Wert an
(Funktions-Template)