我遇到了一个代码片段,并认为它会调用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;
}
答案 0 :(得分:8)
您发现B ob = "copy me";
从概念上从文字中创建B
,然后复制构造ob
,但编译器可以忽略复制和构造目录到ob
。 g ++甚至完全没有启用优化的副本。
您可以通过将复制构造函数设置为私有来观察到这种情况:即使编译器实际上不使用复制构造函数,代码也将无法编译(标准要求即使调用时也可以访问复制构造函数消隐)。