2011-12-03 54 views
1

我們可以有一個聲明調用一個構造函數,並且不執行任何操作嗎?聲明調用構造函數,並且什麼也不做 - 爲什麼它不能編譯?

基本上,我重載構造函數,並使用構造函數,而不必將它分配給變量,就像我們通常那樣。 (通常我們不會這樣做,但我可能會看到使用函數時會出現這種情況。)

任何想法?....(我已經聲明瞭複製構造函數是私有的,只是爲了確保這個不是問題的原因。)

class myClass 
{ 
    public: 
     myClass (int n, int x) { } 
     myClass (int n) { } 
    private: 
     myClass (const myClass & t){} // copy constructor is private..... 
}; 

int main() 
{ 
    int r = 5; 
    myClass A(r);  // OK (as per usual) 
    myClass (r, r); // OK 
    myClass (5);  // OK 
    myClass (r);  // not OK : error C2371: 'r' : redefinition; different basic types 

    // myClass B = myClass (r); // this would not work as copy constructor 
            // has been declared as private 
    return 0; 
} 
+5

'無效的主要()'是**非法的C++ **。 –

回答

3

由於C++的解析規則,您必須說(myClass(r));,並帶有額外的圓括號。

(你說的名字r,已經存在的一個新變量的聲明。請注意,你也可以說int(r);申報r。)

+0

+1給食譜。 –

+0

謝謝。括號確實有效。但爲什麼包含整個陳述的括號實際上正在改變陳述本身的行爲呢? (歡迎外部網站的鏈接,我無法找到它......)非常感謝! – alexandreC

+0

@alexandreC:剛剛閱讀C++語法如何工作。第一個是聲明聲明,第二個是表達式。沒有什麼比這更深,它只是語法。 –

0

myClass (r);行實際上被解釋爲myClass型的(myClass r;)的r變量,它已經被定義爲int的定義。

相關問題