3

グローバルスコープでの宣言と定義の私の理解から:

MyClass instance();//Declares a function that returns a MyClass
MyClass instance;//Declares an instance of MyClass

変数を宣言し、グローバル スコープで既定のコンストラクターを使用するように定義することは可能ですか? クラスの代わりに構造体を使用していたらどうなるでしょうか?

編集:

さて、MyClass instance;デフォルトのコンストラクターを呼び出します。これがこの例とどのように一致しているかを誰でも説明できますか:

int a; // not default constructed, will have random data 
int b = int(); // will be initialised to zero
4

3 に答える 3

8
MyClass instance;

デフォルトのコンストラクター (つまり、パラメーターのないコンストラクター) を呼び出します。

オーバーロードされたコンストラクターをパラメーターで呼び出すには、次のようにするため、これは直観に反します。

MyClass instance(param1, param2);

ロジックは、デフォルトのコンストラクターを呼び出すために空の引数リストを渡すことを伝えますが、次のコード...

MyClass instance();

...オブジェクトの構築ではなく、コンパイラにとってはプロトタイプのように見えMyClassます。

C++ ではastructと aに違いはありませんが、 a には既定でメンバーがあり、aには既定でメンバーがあります。classstructpublicclassprivate

于 2010-12-13T00:38:43.353 に答える
2
  1. グローバルスコープにいるかどうかは関係ありません。
  2. MyClass instance;は定義です (単なる宣言ではなく、既定のコンストラクターを使用します。宣言のみを取得するには (ヘッダー ファイルなど) extern MyClass instance;、.
  3. この部分でMyClassは、クラスか構造体かは問題ではありません。C++ の構造体とクラスの間で変更される唯一のことは、メンバーとベースがパブリックかプライベートかの既定の解釈です。
  4. 明示的にしたい場合は、 と書くことができますMyClass instance = MyClass();
于 2010-12-13T00:42:05.310 に答える
1
MyClass instance;

デフォルトのコンストラクターを使用した定義でもあります。単に宣言したい場合は、必要です

extern MyClass instance;

これは定義ではありません。ただし、どちらにも外部リンケージがあります。

于 2010-12-13T00:39:37.810 に答える