0

我遇到了一个代码片段,并认为它会调用 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;
}
4

1 回答 1

8

您已经发现,B ob = "copy me"; 理论上从文字创建 aB然后复制构造ob,但是允许编译器将复制和构造目录省略到ob. g++ 甚至在根本没有启用优化的情况下省略了副本。

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

于 2013-07-09T16:07:23.413 回答