2009-04-17 43 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

相关问题