定義済みのコンストラクタX(int value)
を持つクラスXがあるとします。"X x(42)"と "X x = 42"を使用したオブジェクト構成の違い?
意味的に同等かどうか
X x = 42;
X x(42);
は、私たちはそうでない場合、コンパイラは私が間違っているなら、私を修正し、X x(42);
してくださいに表現X x = 42;
を削減するX. のコンストラクタに明示キーワードを追加する場合にのみ差が表示されます信じています。
定義済みのコンストラクタX(int value)
を持つクラスXがあるとします。"X x(42)"と "X x = 42"を使用したオブジェクト構成の違い?
意味的に同等かどうか
X x = 42;
X x(42);
は、私たちはそうでない場合、コンパイラは私が間違っているなら、私を修正し、X x(42);
してくださいに表現X x = 42;
を削減するX. のコンストラクタに明示キーワードを追加する場合にのみ差が表示されます信じています。
として宣言されていない形態
X x = 42;
は、コンストラクタは、非明示的およびアクセスコピーコンストラクタが存在することがあることを必要とします。実装は一時的な構造を構築し、それをコピーすることは許されていますが、私が知っている実装はそれを行いません。
明示的な代入演算子をバイパスしますか?私はそれがそのルートを取ると思っていただろう。しかし、私の脳は確かに少しばかげている。 –
いいえ、一時的な構成はできません。あなたは 'X x = X(42)'と混同していますか? – Pubby
@Pubby:そうです、これは理由のために_copy initialization_と呼ばれています。 ; - 実際には、それはいつも逃げられるでしょう。 – ildjarn