4

宣言されていない(自動生成された)コピーコンストラクターは自動的にマークされinlineますか?

もしそうなら、そしてそれらにマークを付けたくない場合は、inline手動で定義し、必要なすべてのメンバーを手動でコピーする必要があることを意味します(C ++ 11を使用していないと仮定すると、= defaultを活用します)?

4

4 に答える 4

8

それらは宣言されたかのように扱われますinline(これは必ずしもインライン化されることを意味するわけではありません)。はい、C ++ 11より前では、インライン化を防ぐ唯一の方法は、初期化子リストですべてのメンバーとすべての基本クラスを明示的にコピーして、手動で宣言および定義することでした。

于 2013-01-11T20:32:28.130 に答える
6

はい。C ++ 11、12.8 / 11から:

暗黙的に宣言されたコピー/移動コンストラクターは、inline publicそのクラスのメンバーです。

コピーおよび移動コンストラクターについて詳しく知りたい場合は、12.8をすべて読むことを強くお勧めします。

于 2013-01-11T20:31:17.043 に答える
1

彼らはそうだと私は信じています。ただし、このようなコンパイラ定義関数の場合、notとnotの違いはinline観察できません。そして、はい、あなたはそれが非であるためにあなた自身を定義しなければならないinlineでしょう、しかしあなたがそのようなことを望む理由は私を超えています。セマンティクスに違いはなく、コンパイラのインライン化には影響しません。

于 2013-01-11T20:30:44.070 に答える
1

暗黙的に定義された特殊メンバー関数はinline、複数の変換単位で暗黙的に生成できるため、そうである必要があります。の意味はinline、コードが実際にインライン化されるのではなく、ODRに違反することなく複数の変換単位で定義できることです(これはタイプとコンパイラーによって異なります)。

コピーコンストラクターにしたくないのはなぜinlineですか?

于 2013-01-11T20:32:09.300 に答える