2017-02-10 6 views
1

デフォルトでないコンストラクタを持つクラスがあります。スタック上にオブジェクトを作成するさまざまな方法

#include <iostream> 

class Foo { 

public: 

    Foo(int a) { std::cout << "Constructor" << std::endl; }; 

} 

ので、デフォルトのコンストラクタが呼び出されませんでした:

Foo obj; // compilation error 

非デフォルトコンストラクタがinkovedすることができます。

Foo obj(1); 

質問:

どうなりますかコンパイルする次の行に?

Foo obj(); 
+3

[最も厄介なパース](https://en.wikipedia.org/wiki/Most_vexing_parse)を起こりません。 –

答えて

4

パラメータを指定しないで関数プロトタイプを作成します。

具体的には...基本的には何も

+0

も参照してください。 "Cの前方宣言" – awiebe

+2

あなたは関数が存在すると言っていますので、誤って呼び出すことができ、実装を提供していないと変なリンク時間エラーが発生します。 – awiebe

+0

確かに、実行中に何も起こらない、構築なし、スタック割り当てなし、行なし – Kupto

関連する問題