Каковы тривиальные операции в std::is_tribuly_copy_constructible в C++

Вот выдержка из документации по std::is_copy_constructible (1) и std::is_tribuly_copy_constructible (2) на cppreference.com:

1) Проверяет, является ли тип CopyConstructible, т.е. имеет доступный явный или неявный конструктор копирования. Если требование выполнено, предоставляется значение константы члена, равное true, в противном случае значение равно false.

2) То же, что и (1), но выражение конструктора копирования не вызывает никаких нетривиальных операций.

Так что здесь считается тривиальной операцией?


person vitaut    schedule 04.03.2013    source источник
comment
Это может помочь   -  person Andy Prowl    schedule 05.03.2013
comment
@AndyProwl: Очень полезно, спасибо.   -  person vitaut    schedule 05.03.2013


Ответы (1)


Как я уже говорил один раз:

Итак, что же это за тривиальные и нетривиальные вещи?

Конструктор копирования/перемещения для класса X тривиален, если он не предоставляется пользователем и если

- класс X не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.1), и

- конструктор, выбранный для копирования/перемещения каждого прямого подобъекта базового класса, тривиален, и

- для каждого нестатического члена данных X, который имеет тип класса (или его массив), конструктор, выбранный для копирования/перемещения этого члена, является тривиальным;

в противном случае конструктор копирования/перемещения нетривиален.

В основном это означает, что конструктор копирования или перемещения тривиален, если он не предоставляется пользователем, в классе нет ничего виртуального, и это свойство рекурсивно сохраняется для всех членов класса и для базового класса.

person Community    schedule 04.03.2013