构造体中变量后面的冒号_C ++构造函数名称后面的冒号有什么作用?

3c2f9b2e544bde1855d495bf4813fb95.png

喵喔喔

这是一个初始化列表。当您进入构造函数的主体时,所有字段都已被构造;如果它们具有默认构造函数,则这些构造函数已被调用。现在,如果您在构造函数的主体中为它们分配一个值,则您正在调用复制分配运算符,这可能意味着如果对象有资源,则释放并重新获取资源(例如内存)。因此,对于像int这样的基本类型,与在构造函数的主体中分配它们相比,没有任何优势。对于具有构造函数的对象,这是一种性能优化,因为它避免了两次而不是一次的对象初始化。如果这些字段之一是引用,则必须有一个初始化列表,因为引用永远不能为null,即使在对象构造和构造函数主体之间的短暂时间内也是如此。以下引发错误C2758:'MyClass :: member_':必须在构造函数库/成员初始化程序列表中初始化class MyClass {public :    MyClass(std::string& arg) {        member_ = arg;    }    std::string& member_;};唯一正确的方法是:class MyClass {public :    MyClass(std::string& arg)         : member_(arg)     {    }    std::string& member_;};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值