为什么在这种情况下不调用copy-constructor?

时间:2013-07-09 15:55:21

标签: c++

我遇到了一个代码片段,并认为它会调用copy-constructor,但相比之下,它只是调用了普通的构造函数。以下是代码

#include <iostream>
using namespace std;
class B
{
    public:    
    B(const char* str = "\0")
    {
        cout << "Constructor called" << endl;
    }    
    B(const B &b)
    {
        cout << "Copy constructor called" << endl;
    } 
};
int main()
{  
    B ob = "copy me"; 
    return 0;
}

1 个答案:

答案 0 :(得分:8)

您发现B ob = "copy me"; 从概念上从文字中创建B,然后复制构造ob,但编译器可以忽略复制和构造目录到ob。 g ++甚至完全没有启用优化的副本。

您可以通过将复制构造函数设置为私有来观察到这种情况:即使编译器实际上不使用复制构造函数,代码也将无法编译(标准要求即使调用时也可以访问复制构造函数消隐)。