2016-11-14 4 views
-1

以下のクラスの宣言の違いは何ですか?Aとの違いは何ですか? A a();

class A 
{ 
public: 
    A() 
    { 
     std::cout << "A()\n"; 
    } 
    ~A() 
    { 
     std::cout << "~A()\n"; 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    A a; // <-- this call the constructor and destructor 
    A b(); // <-- this is not!! what is a b()? 
    return 0; 
} 

b()とは何ですか?

答えて

3

これはmost vexing parseの問題です。 宣言として解析できるものはすべて1と解釈されなければならないというC++のルールの副作用です。したがって、A b();は関数宣言であり、bは関数で何も取らず、Aを返します。

C++ 11では、かっこの代わりに中括弧(list initialization)を使用できます。パラメータリストの中括弧を使って関数を宣言することはできないため、 "あいまいさ"がなくなります。

A b{}; // calls A's default constructor 
+2

明白な二倍体 – NathanOliver

関連する問題