宣言されていない(自動生成された)コピーコンストラクターは自動的にマークされinline
ますか?
もしそうなら、そしてそれらにマークを付けたくない場合は、inline
手動で定義し、必要なすべてのメンバーを手動でコピーする必要があることを意味します(C ++ 11を使用していないと仮定すると、= default
を活用します)?
宣言されていない(自動生成された)コピーコンストラクターは自動的にマークされinline
ますか?
もしそうなら、そしてそれらにマークを付けたくない場合は、inline
手動で定義し、必要なすべてのメンバーを手動でコピーする必要があることを意味します(C ++ 11を使用していないと仮定すると、= default
を活用します)?
それらは宣言されたかのように扱われますinline
(これは必ずしもインライン化されることを意味するわけではありません)。はい、C ++ 11より前では、インライン化を防ぐ唯一の方法は、初期化子リストですべてのメンバーとすべての基本クラスを明示的にコピーして、手動で宣言および定義することでした。
はい。C ++ 11、12.8 / 11から:
暗黙的に宣言されたコピー/移動コンストラクターは、
inline public
そのクラスのメンバーです。
コピーおよび移動コンストラクターについて詳しく知りたい場合は、12.8をすべて読むことを強くお勧めします。
彼らはそうだと私は信じています。ただし、このようなコンパイラ定義関数の場合、notとnotの違いはinline
観察できません。そして、はい、あなたはそれが非であるためにあなた自身を定義しなければならないinline
でしょう、しかしあなたがそのようなことを望む理由は私を超えています。セマンティクスに違いはなく、コンパイラのインライン化には影響しません。
暗黙的に定義された特殊メンバー関数はinline
、複数の変換単位で暗黙的に生成できるため、そうである必要があります。の意味はinline
、コードが実際にインライン化されるのではなく、ODRに違反することなく複数の変換単位で定義できることです(これはタイプとコンパイラーによって異なります)。
コピーコンストラクターにしたくないのはなぜinline
ですか?