我一直在阅读此页面,以了解值初始化的概念http://en.cppreference.com/w/cpp/language/value_initialization
值初始化的影响是:
- 如果T是具有至少一个用户提供的任何类型的构造函数的类类型,则将调用默认构造函数。
但这似乎与其他资料直接矛盾,这说明如果至少存在一个用户定义的构造函数,则编译器不会生成隐式默认构造函数(不会编译类似“ T t;”的表达式)。欢迎任何解释。
在此上下文中,“默认构造函数”是指不能接受任何参数的构造函数(要么因为它没有参数,要么因为它只有可选参数)。
“隐式构造函数”是指自动为您生成的构造函数。这可以是一个无参数的构造函数,一个副本构造函数或(从C ++ 11开始)一个move构造函数。
因此,没有矛盾。如果T是具有用户提供的构造函数的类类型,则值初始化将调用默认构造函数。如果不存在(因为您定义了另一个构造函数,但没有no-args构造函数),或者它不可访问(因为您将其标记为私有或受保护,然后在无法使用此类函数的地方使用了它),则该值初始化格式错误,编译器将拒绝您的代码。如果已声明但从未定义,则该程序将不会链接。
由于C ++ 11,“默认”一词可能有点含糊,因为可以定义一个拷贝构造函数 = default;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句