2013-03-04 12 views
13

Oto fragment z dokumentacji std :: is_copy_constructible (1) i std::is_trivially_copy_constructible (2) na cppreference.com:Jakie są trywialne operacje w std :: is_trivially_copy_constructible w C++

1) sprawdza, czy typ jest CopyConstructible, tzn. Ma dostępny jawny lub niejawny konstruktor kopii. Jeśli wymóg jest spełniony, zapewniona jest stała stałej elementu składowego równa true, w przeciwnym razie wartość wynosi false.

2) Tak samo jak (1), ale wyrażenie konstruktora kopiowania nie wywołuje żadnej operacji, która nie jest trywialna.

Co tu jest banalną operacją?

+2

[W] (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special) może pomóc –

+0

@AndyProwl Bardzo przydatne, dzięki. – vitaut

Odpowiedz

15

Jak ujął to once before:

Tak, to są te wszystkie banalne i niebanalne rzeczy?

kopia/konstruktor ruch dla klasy X jest trywialny, gdy nie jest wprowadzona przez użytkownika i w przypadku

- kl x ma funkcje wirtualne (10.3) i nie klas bazowych wirtualne (10.1) i

- konstruktor wybrany skopiować/przeniesienie każdego bezpośredniego klasy bazowej podobiekt jest trywialna i

- dla każdego nie-statycznego elementu danych X, który jest związkiem typu klasy (lub jego tablicy), konstruktor wybranego z skopiuj/przenieś tego członka jest banalny;

inaczej konstruktor kopiowania/przenoszenia nie jest trywialny.

Zasadniczo oznacza to, że kopia lub przenieść konstruktor jest trywialne, jeśli nie jest wprowadzona przez użytkownika, klasa nie ma nic wirtualny w nim, i to nieruchomość posiada rekurencyjnie dla wszystkich członków klasy i dla klasa bazowa.

Powiązane problemy