考虑给定的代码
struct ABC
{
ABC()
{
std::cout<<" Calling from default constructor";
}
ABC(const ABC ©)
{
std::cout<<"Calling from copy constructor";
}
};
int main()
{
ABC abc = ABC();
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题
Q1)从复制构造函数参数声明中删除const会产生错误.为什么?
Q2)添加const关键字后,我没有看到对复制构造函数的调用.为什么?复制构造函数没有被调用,为什么const是必要的?
TIA
你需要const,因为你试图用一个临时的ABC()来初始化abc.因此,如果构造函数不是const,则编译器必须拒绝该代码.
在使它成为const之后,代码是标准的抱怨,编译器可以编译它.但是,如本标准所述,允许在这种情况下优化副本,因此它会删除对复制构造函数的调用.