有一堂课:
class myclass{
int a;
public:
myclass(int p){a=p;};
};
int main()
{
myclass mc=33;
myclass mc2=myclass(33);
}
您能否解释一下选项 1 中发生了什么?第二,我了解到类myclass被创建,它的构造函数被调用,这个类实例被复制到mc2。
有一堂课:
class myclass{
int a;
public:
myclass(int p){a=p;};
};
int main()
{
myclass mc=33;
myclass mc2=myclass(33);
}
您能否解释一下选项 1 中发生了什么?第二,我了解到类myclass被创建,它的构造函数被调用,这个类实例被复制到mc2。
首先,您对第二个选项中发生的情况的假设是错误的。复制构造函数不会被调用,你可以自己检查一下,例如删除复制构造函数(可能不起作用,这取决于编译器)或向其中添加日志。关键是编译器将此类调用简化为简单的构造函数调用。考虑这是一种无法禁用的优化(据我所知)。
其次,第一种表示法是可能的,因为您的构造函数未标记为
explicit. 通常,所有单参数构造函数都应标记为explicit以避免隐式转换(如您的示例中所示)。验证码: