Необъявленные (автоматически сгенерированные) конструкторы копирования автоматически помечаются как inline
?
Если так, и если я не хочу, чтобы они были помечены как inline
, означает ли это, что я должен определить один вручную и скопировать каждый отдельный элемент, который мне нужен вручную (при условии, что я не использую C ++ 11, так что нет = default
чтобы воспользоваться)?
С ними обращаются, как если бы они были объявлены inline
(который не
обязательно означает, что они будут встроены). И да, в
до C ++ 11, единственный способ предотвратить их инлайн
объявлять и определять их вручную, копируя каждый член и каждый
Базовый класс явно в списке инициализатора.
Да. Из C ++ 11, 12,8 / 11:
Неявно объявленный конструктор копирования / перемещения является
inline public
член своего класса.
Я настоятельно рекомендую прочитать все 12.8, если вы хотите поближе познакомиться с конструкторами копирования и перемещения.
Они, я верю. Однако для такой функции, определенной компилятором, разница между inline
и не ненаблюдаем. И да, вы должны определить свой собственный, чтобы он неinline
Хотя, почему вы хотите, чтобы такая вещь была за мной. Это не имеет значения для семантики и не повлияет на встраивание компилятора.
Неявно определенные специальные функции-члены inline
и они должны быть такими, какими они могут быть неявно сгенерированы в нескольких единицах перевода. Значение inline
в том, что он может быть определен в нескольких единицах трансляции без нарушения ODR, а не в том, что код фактически будет встроен (это зависит от типа и компилятора).
Почему вы не хотите, чтобы конструктор копирования был inline
?