1. 程式人生 > >類或者結構體用無參建構函式建立物件時不需要帶括號, 否則會當成函式宣告

類或者結構體用無參建構函式建立物件時不需要帶括號, 否則會當成函式宣告

例項1: 類

#include  <iostream>
using namespace std;
class Test
{
public:

    Test() {  }
    Test(int) {  }
    void fun() {  }
};

int main(void)  
{  
    Test a(10);    // 語句1
    a.fun();       // 語句2
    
    Test b();      // 語句3, Foo b()並不會生成Foo型別的物件b, 
                   // 而是宣告一個返回值是Foo的函式b, 這個函式的引數為空。
                   // 沒有引數引數時不需要帶括號,應該為 Test b。
                  
    b.fun();      // 語句4會出錯, 如此以來,b.fun()就會被解釋成通過函式b
                  // 呼叫另外一個函式fun(),這顯然是不對的。
    return 0;  
}  

例項2: 結構體

#include  <iostream>
using namespace std;
struct Foo
{  
    Foo() {  }  
    Foo(int) {  }  
    void fun()   {  }  
};

int main(void)  
{  
    Foo a(10);    // 語句1
    a.fun();      // 語句2
    
    Foo b();      // 語句3, Foo b()並不會生成Foo型別的物件b, 
                  // 而是宣告一個返回值是Foo的函式b, 這個函式的引數為空。
                  // 沒有引數引數時不需要帶括號,應該為 Foo b。
                  
    b.fun();      // 語句4會出錯, 如此以來,b.fun()就會被解釋成通過函式b
                  // 呼叫另外一個函式fun(),這顯然是不對的。
    return 0;  
}