Struct logical_or
Oggetto funzione predefinito che esegue l'operazione di disgiunzione logica ( operator||
) negli argomenti.
Sintassi
template <class Type = void>
struct logical_or : public binary_function<Type, Type, bool>
{
bool operator()(const Type& Left, const Type& Right) const;
};
// specialized transparent functor for operator||
template <>
struct logical_or<void>
{
template <class T, class U>
auto operator()(T&& Left, U&& Right) const
-> decltype(std::forward<T>(Left) || std::forward<U>(Right));
};
Parametri
Tipo, T, U
Qualsiasi tipo che supporta un operator||
che accetta gli operandi dei tipi specificati o dedotti.
A sinistra
Operando sinistro dell'operazione di disgiunzione logica. Il modello non specifico accetta un argomento di riferimento lvalue di tipo Type. Il modello specializzato esegue l'inoltro perfetto degli argomenti di riferimento lvalue e rvalue di tipo T dedotto.
A destra
Operando destro dell'operazione di disgiunzione logica. Il modello non specifico accetta un argomento di riferimento lvalue di tipo Type. Il modello specializzato esegue l'inoltro perfetto degli argomenti di riferimento lvalue e rvalue di tipo U dedotto.
Valore restituito
Risultato di Left || Right
. Il modello specializzato esegue un inoltro perfetto del risultato, con il tipo restituito da operator||
.
Osservazioni:
Per i tipi definiti dall'utente, non si verifica alcun corto circuito nella valutazione degli operandi. Entrambi gli argomenti vengono valutati da operator||
.
Esempio
// functional_logical_or.cpp
// compile with: /EHsc
#include <deque>
#include <algorithm>
#include <functional>
#include <iostream>
int main( )
{
using namespace std;
deque <bool> d1, d2, d3( 7 );
deque <bool>::iterator iter1, iter2, iter3;
int i;
for ( i = 0 ; i < 7 ; i++ )
{
d1.push_back((bool)((rand() % 2) != 0));
}
int j;
for ( j = 0 ; j < 7 ; j++ )
{
d2.push_back((bool)((rand() % 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;
cout << "Original deque:\n d2 = ( " ;
for ( iter2 = d2.begin( ) ; iter2 != d2.end( ) ; iter2++ )
cout << *iter2 << " ";
cout << ")" << endl;
// To find element-wise disjunction of the truth values
// of d1 & d2, use the logical_or function object
transform( d1.begin( ), d1.end( ), d2.begin( ),
d3.begin( ), logical_or<bool>( ) );
cout << "The deque which is the disjuction of d1 & d2 is:\n d3 = ( " ;
for ( iter3 = d3.begin( ) ; iter3 != d3.end( ) ; iter3++ )
cout << *iter3 << " ";
cout << ")" << endl;
}
Original deque:
d1 = ( true true false false true false false )
Original deque:
d2 = ( false false false true true true true )
The deque which is the disjuction of d1 & d2 is:
d3 = ( true true false true true true true )