怎么理解呢?
就好比:
int a=3.14;
cpp
base b(10); //显式
b = base(10); //显式
b = 12; //隐式,加了explicit就报错
对于12,他会先去创建一个base类型的临时对象:base(12),运行构造函数,然后把临时对象拷贝给b;
临时对象 与 const 、&
const被设计为读对象的值,所以绑定到临时对象也不会出现通过&改变临时对象的值(因为很快就会被销毁)
cpp
base& b = 10; //err 类似于:不能把右值绑定到左值
const base& a = 10; //ok
引入explicit:
也就不会产生临时变量了。
对于多参构造:
explicit同样适用,const&,&都和上面一样
需要注意设置默认值时,从左往右的缺省规则
{}:聚合初始化
cpp
class base {
public:
base(int a);
base(int a, int b);
};
int main()
{
base b = 10 ;
base b = { 1,2 };
return 0;
};
: