0613# 3 八股 1.拷贝初始化和直接初始化

拷贝初始化和直接初始化

string str1("I am a string");//语句1 直接初始化
string str2(str1);//语句2 直接初始化,str1是已经存在的对象,直接调用拷贝构造函数对str2进行初始化
string str3 = "I am a string";//语句3 拷贝初始化,先为字符串”I am a string“创建临时对象,再把临时对象作为参数,使用拷贝构造函数构造str3
string str4 = str1;//语句4 拷贝初始化,这里相当于隐式调用拷贝构造函数,而不是调用赋值运算符函数
  • 如果 std::string 类的拷贝构造函数在类中被声明为 private,那么语句3和语句4将无法编译通过。这是因为拷贝初始化需要调用拷贝构造函数,而在 private 访问控制符下,非友元类和成员函数无法访问它。
  • 使用 explicit 关键字修饰构造函数时,它可以防止隐式类型转换。这意味着带有 explicit 关键字的构造函数不能用于拷贝初始化,只能用于直接初始化。
  • 对于语句3:由于 explicit 构造函数不能用于隐式转换,因此编译器无法隐式地将 "I am a string" 转换为 std::string,然后调用 explicit MyClass(const std::string& s) 构造函数

初始化发生在对象创建时,而赋值发生在对象创建之后

extern "C"</

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值