std::swap
è dichiarata in questo modo:eccezioni disabili e noexcept()
template <class T> void swap (T& a, T& b)
noexcept (is_nothrow_move_constructible<T>::value &&
is_nothrow_move_assignable<T>::value);
Se rendo invalida eccezioni nel mio programma (come con -fno-exceptions
per g ++) sarà std::swap
operazioni di uso di movimento per i miei tipi personalizzati se sono abilitato per il movimento, indipendentemente dal fatto che siano inaffidabili o no?
EDIT: follow-up domanda:
Dopo aver capito che std :: swap sarà sempre usare le mosse se il mio tipo li ha, la mia vera domanda è che cosa accade a tratti come is_nothrow_move_assignable<>
?
std::vector
utilizza sempre le mosse durante la riallocazione se i miei tipi hanno operazioni di spostamento noexcept(true)
?
Le regole '' move'' del compilatore sono ortogonali alle eccezioni. –
@AmiTavory le regole di spostamento si, ma per quanto riguarda i tratti come '' 'is_nothrow_move_constructible'''? – onqtam
Scrivi un programma di test breve (3 righe) che stampa il risultato di 'is_nothrow_move_constructible' compila con e senza -fneccezioni –