直接初始化和拷贝初始化

string dots(10, '.');                 // 直接初始化
string s(dots);                       // 直接初始化
string s2 = dots;                     // 拷贝初始化
string null_bock = "9-999-99999-9";   // 拷贝初始化
string nines = string(100, 9);        // 拷贝初始化

当使用直接初始化时,我们实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数。当我们使用拷贝初始化时,我们要求编译器将右侧运算对象拷贝到正在创建的对象中,如果需要的话还要进行类型转换。


  拷贝初始化通常使用拷贝构造函数来完成。如果一个类有一个移动构造函数,则拷贝初始化有时会使用移动构造函数而非拷贝构造函数来完成。


  拷贝初始化不仅在我们用=定义变量时会发生,在下列情况下也会发生


  ● 将一个对象作为实参传递给一个非引用类型的形参
  ● 从一个返回类型为非引用类型的参数返回一个对象
  ● 用花括号列表初始化一个数组中的元素或一个聚合类中的成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值