7

私がクラスを持っているとしましょう

class C {
       C(int a=10);
};

なぜ私が電話したら

C c;

建設業者C(int =10)が呼ばれ、私が電話した場合

C c();

デフォルトのコンストラクターが呼び出されますか?これを回避する方法は?コンストラクターのみを実行したいので、デフォルトのコンストラクターをプライベートにしようとしましたが、機能しません。

4

3 に答える 3

17
  1. 実際には、関数宣言C c();として解析する必要があります。default-constructorを明示的に呼び出すには、を記述する必要があります。C c = C();
  2. コンストラクターを定義すると、コンパイラーはその型のデフォルトコンストラクターを提供しないため、呼び出すことはできません。
  3. コンストラクターは1つの引数で呼び出すことができるため、暗黙の変換関数として機能します。explicit予期しない瞬間に暗黙の変換が開始されるのを防ぐために、それを作成することを検討する必要があります。
于 2010-10-24T19:39:13.483 に答える
14

コードC c();はあなたが思っていることをしません:

c引数を取らず、を返すと呼ばれる関数を宣言しますC。と同等です

C c(void);
于 2010-10-24T19:39:35.513 に答える
1

これは、c()がという名前の関数として解釈されるためcです。クラスC()の適切なコンストラクターをトリガーしますC

于 2010-10-24T20:19:35.417 に答える