热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当存在具有默认参数的构造函数时,是否有2次初始化

如何解决《当存在具有默认参数的构造函数时,是否有2次初始化》经验,为你挑选了3个好方法。

我的问题是如何初始化具有初始化程序的成员数据,其中构造函数中还有一个默认参数.

class InputPlay {

    public:
        InputPlay(std::string s = "test" ) : _s(s) {  };

    private:
        std::string _s = "default";
};

问题:

调用构造时,变量_s是否会有2次初始化?又名_s将由字符串文字默认初始化,然后由构造函数中的默认参数"test"替换?



1> NathanOliver..:

不,_s只会初始化一次.类内初始化是用于合成成员初始化器的语法糖.如果您提供自己的成员初始化程序,那么编译器将使用它而不是从类初始化中为您合成一个.



2> songyuanyao..:

对于非静态数据成员,当提供默认成员初始值设定项和成员初始值设定项列表时,将忽略默认成员初始值设定项.这意味着_s将直接由s构造函数的参数初始化.

如果成员具有默认成员初始值设定项并且也出现在构造函数的成员初始化列表中,则忽略默认成员初始值设定项.



3> François And..:

= "default";默认成员初始值设定项._s如果您不提供初始化程序,它就是初始化程序.但是由于你确实提供了一个(_s(s)),默认的初始化器永远不会进入播放器并且_s只是初始化为s.

来自cppreference.com:

如果非静态数据成员具有默认成员初始值设定项并且也出现在成员初始值设定项列表中,则会执行成员初始值设定项列表并忽略默认成员初始值设定项:

请注意,根据定义,某些内容只能初始化一次.如果它看起来像初始化两次,它通常被初始化然后分配另一个值.


推荐阅读
author-avatar
春哥在奋斗_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有