Являются ли необъявленные конструкторы копирования автоматически встроенными?

Необъявленные (автоматически сгенерированные) конструкторы копирования автоматически помечаются как inline?

Если так, и если я не хочу, чтобы они были помечены как inline, означает ли это, что я должен определить один вручную и скопировать каждый отдельный элемент, который мне нужен вручную (при условии, что я не использую C ++ 11, так что нет = default чтобы воспользоваться)?

3

Решение

С ними обращаются, как если бы они были объявлены inline (который не
обязательно означает, что они будут встроены). И да, в
до C ++ 11, единственный способ предотвратить их инлайн
объявлять и определять их вручную, копируя каждый член и каждый
Базовый класс явно в списке инициализатора.

8

Другие решения

Да. Из C ++ 11, 12,8 / 11:

Неявно объявленный конструктор копирования / перемещения является inline public член своего класса.

Я настоятельно рекомендую прочитать все 12.8, если вы хотите поближе познакомиться с конструкторами копирования и перемещения.

6

Они, я верю. Однако для такой функции, определенной компилятором, разница между inline и не ненаблюдаем. И да, вы должны определить свой собственный, чтобы он неinlineХотя, почему вы хотите, чтобы такая вещь была за мной. Это не имеет значения для семантики и не повлияет на встраивание компилятора.

1

Неявно определенные специальные функции-члены inline и они должны быть такими, какими они могут быть неявно сгенерированы в нескольких единицах перевода. Значение inline в том, что он может быть определен в нескольких единицах трансляции без нарушения ODR, а не в том, что код фактически будет встроен (это зависит от типа и компилятора).

Почему вы не хотите, чтобы конструктор копирования был inline?

1
По вопросам рекламы [email protected]