2013-03-04 18 views
13

Ecco un estratto dalla documentazione di std :: is_copy_constructible (1) e std::is_trivially_copy_constructible (2) sul cppreference.com:Quali sono le operazioni banali in std :: is_trivially_copy_constructible in C++

1) Verifica se un tipo è CopyConstructible, cioè ha un costruttore di copie esplicito o implicito accessibile . Se il requisito è soddisfatto, viene fornito un valore costante membro uguale a true, altrimenti il ​​valore è false.

2) Come in (1), ma l'espressione di costruttore di copia non chiama nessuna operazione che non sia banale.

Quindi ciò che è considerato un'operazione banale qui?

+2

[Questo] (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special) può aiutare –

+0

@AndyProwl: Molto utile, grazie. – vitaut

risposta

15

Come ho metterlo once before:

Allora, che cosa sono tutte quelle cose banali e non banali?

Una copia/spostamento costruttore di classe X è banale se non è fornita dall'utente e se

- classe X non ha funzioni virtuali (10.3) e senza classi base virtuali (10.1) e

- costruttore selezionato da copiare/spostare ogni classe base diretta subobject è banale, e

- per ciascun membro static dati di X che è di tipo classe (o matrice stessa), il costruttore selezionata per copiare/spostare quel membro è banale;

altrimenti il ​​costruttore di copia/spostamento non è banale.

Fondamentalmente questo significa che una copia o spostare costruttore è banale se non è fornito dall'utente, la classe ha nulla virtuale in esso, e questa proprietà tiene ricorsivamente per tutti i membri della classe e per la classe base.

Problemi correlati