Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein vordefiniertes Funktionsobjekt, mit dem der logische NOT-Vorgang (operator!) auf das Argument ausgeführt werden kann.
Syntax
template <class Type = void>
struct logical_not : public unary_function<Type, bool>
{
bool operator()(const Type& Left) const;
};
// specialized transparent functor for operator!
template <>
struct logical_not<void>
{
template <class Type>
auto operator()(Type&& Left) const
-> decltype(!std::forward<Type>(Left));
};
Parameter
Typ
Jeder Typ, der ein operator!-Element unterstützt, das einen Operanden des angegebenen oder abgeleiteten Typs akzeptiert.
Nach links
Der Operand des logischen NOT-Vorgangs. Die nicht angegebene Vorlage verwendet ein lvalue-Bezugsargument vom Typ "Typ ". Die spezielle Vorlage führt die perfekte Weiterleitung von lvalue- und rvalue-Bezugsargumenten des abgeleiteten Typs durch.
Rückgabewert
Das Ergebnis von !Left. Die spezialisierte Vorlage vervollkommnet die Weiterleitung des Ergebnisses mit dem von operator! zurückgegebenen Typs.
Beispiel
// functional_logical_not.cpp
// compile with: /EHsc
#include <deque>
#include <algorithm>
#include <functional>
#include <iostream>
int main( )
{
using namespace std;
deque<bool> d1, d2 ( 7 );
deque<bool>::iterator iter1, iter2;
int i;
for ( i = 0 ; i < 7 ; i++ )
{
d1.push_back((bool)((i % 2) != 0));
}
cout << boolalpha; // boolalpha I/O flag on
cout << "Original deque:\n d1 = ( " ;
for ( iter1 = d1.begin( ) ; iter1 != d1.end( ) ; iter1++ )
cout << *iter1 << " ";
cout << ")" << endl;
// To flip all the truth values of the elements,
// use the logical_not function object
transform( d1.begin( ), d1.end( ), d2.begin( ),logical_not<bool>( ) );
cout << "The deque with its values negated is:\n d2 = ( " ;
for ( iter2 = d2.begin( ) ; iter2 != d2.end( ) ; iter2++ )
cout << *iter2 << " ";
cout << ")" << endl;
}
Original deque:
d1 = ( false true false true false true false )
The deque with its values negated is:
d2 = ( true false true false true false true )