扯的越来越远了,回到楼主的问题
对于成员变量来说:
小括号调用构造函数创造实例,这在声明时是不允许的。可以改成A():str("abc")。
花括号等同于成员变量默认值初始化。string atr{"abc"}等同于string str="abc"。
下面具体的解释
小括号匹配对应的构造函数并调用。对于基本类型则强制类型转换,怎么实现的不管。对于类类型,则调用构造函数。
花括号初始化则相当复杂,重新看了下C++标准,C++11,17,20等都不同(参考List initialization和Aggregate initialization,
https://en.cppreference.com/w/cpp/language/aggregate_initialization),很多大牛的参考书也有错误。简单概括下如下:
(1)如果该类没有提供构造函数,则按照成员变量顺序一一赋值,否则
(2)查找并调用std::initializer_list为参数的构造函数,否则
(3)去掉最外层的花括号,调用对应的普通构造函数。否则
(4)错误。
【 在 here080 的大作中提到: 】
: 这个不叫构造函数。这些都是类型转换。
: 说这个没有意义。你直接定义一个类验证一下不就知道了?
:
--
FROM 140.206.195.*