5

クラスX->2つの方法でYに変換されます1)コンストラクター、および2)変換関数によって。
変換には単一引数のコンストラクターが使用されることを理解しました。

仕様では:

暗黙的に宣言されたコピーコンストラクターは、明示的なコンストラクターではありません。暗黙の型変換のために呼び出される場合があります。

質問:

つまり、変換には単一引数のコンストラクターだけでなく、コピーコンストラクターも使用されるということです。もしそうなら、それはどのシナリオで使用されますか?サンプルコードのスニペットはありますか?

質問が非常に基本的なものである場合は、ご容赦ください。

4

4 に答える 4

3

コピーコンストラクターは明示的なコンストラクターではないため、可能な限り使用されます。コピーコンストラクターは同じ型からのみ「変換」するため、完全な意味での変換ではありません。ただし、一般性のために、これを1つと呼ぶと便利です。

変換コンストラクターの詳細が必要な場合は、次のペーパーをお読みください:http ://www.keithschwarz.com/cs106l/winter20072008/handouts/180_Conversion_Constructors.pdf。

于 2012-07-20T14:33:40.650 に答える
2

それは基本的にあなたができることを意味します:

struct A {};
A a;
A b = a;

コピーコンストラクターが明示的にマークされている場合、コンパイルに失敗します。構造体に:を追加explicit A( A const & ) {}し、プログラムを再コンパイルすることで、テストできます。

于 2012-07-20T14:40:42.770 に答える
1

暗黙的に宣言されたコピーコンストラクターは、またはcopy-ctorとして宣言されているので、変換には使用できません。T(const T&)T(T&)

ドラフトn3337パー12.8C++標準。

8クラスXの暗黙的に宣言されたコピーコンストラクターは、X :: X(const X&)の形式になります。Xの各直接または仮想基本クラスBには、最初のパラメーターがconst B&またはconst volatile B&のタイプのコピーコンストラクターがあります。 、および—クラスタイプM(またはその配列)であるXのすべての非静的データメンバーの場合、そのような各クラスタイプには、最初のパラメーターがタイプconst M&またはconst volatile M&.119であるコピーコンストラクターがあります。暗黙的に宣言されたコピーコンストラクタは、X :: X(X&)の形式になります。

copy c-torは明示的ではないため、このようなコードを使用できます

struct So
{
};

int main()
{
    So s = So();
}

明示的である場合copy-ctorは、次のような初期化のみを使用できます。So s((So()));

于 2012-07-20T14:28:52.287 に答える
1

暗黙的なコピーコンストラクターは、コンパイラーが自動的に作成するコンストラクターです。それは常に形をしています

T(const T&);

これは、変換演算子を持っているオブジェクトは、これconst T&が意図したものでなくても、暗黙的にコピーできることを意味します。これをトリガーする最も一般的な方法は、派生クラスから基本クラスへのコピーを作成することです。これは、コピーが元のタイプと同じタイプではなく、おそらくいくつかの重要なプロパティまたは動作を失うため、オブジェクトスライスと呼ばれます。

于 2012-07-20T14:34:41.467 に答える