2009-04-17 75 views
9

在Herb Sutter的博客上閱讀this article之後,我嘗試了一下,遇到了一些困惑我的東西。我正在使用Visual C++ 2005,但如果這是依賴實現的,我會感到驚訝。Const對臨時文章的引用

這裏是我的代碼:

#include <iostream> 

using namespace std; 

struct Base { 
    //Base() {} 
    ~Base() { cout << "~Base()" << endl; } 
}; 

int main() 
{ 
    const Base & f = Base(); 
} 

運行時,它會顯示「~Base()兩次 ...但如果我取消註釋構造函數,它顯示它只一次

有沒有人對此有過解釋?

回答

24

該IS實施依賴於。

該標準允許在將臨時綁定到const引用時發生副本。在你的情況下,只有當構造函數被隱式定義時,VC++纔會執行拷貝。這是意想不到的,但允許。

C++ 1x will fix this

+0

令人驚異的答案,非常感謝先生:) – Drealmer 2009-04-17 14:20:44

相關問題