正确的 * 术语是什么?
PS:他们都谈论数据成员初始化器/状态列表。
*如果正确对您不明确,则可以退回到标准术语。
答案 0 :(得分:12)
正确的术语是什么?
“正确”含糊不清,让我们看看:
[lass.base.init]/1&2
1在类的构造函数的定义中,直接和虚拟基类子对象以及非静态数据成员的初始化器可以由ctor-initializer指定,其形式为
ctor-initializer: : mem-initializer-list mem-initializer-list: mem-initializer ...opt mem-initializer-list , mem-initializer ...opt mem-initializer: mem-initializer-id ( expression-list opt ) mem-initializer-id braced-init-list mem-initializer-id: class-or-decltype identifier
2在mem-initializer-id中,在构造函数类的范围内查找初始的不合格标识符,如果未在该范围内找到,则在包含构造函数定义的范围内进行查找。 [注意:如果构造函数的类包含与该类的直接或虚拟基类同名的成员,则命名该成员或基类并由单个标识符组成的mem-initializer-id指向该类成员。可以使用限定名称指定隐藏基类的mem-initializer-id。注释:除非mem-initializer-id命名构造函数的类,构造函数类的非静态数据成员或该类的直接或虚拟基数,否则mem-initializer的格式不正确。
它称为 mem-initializer-list :这是一个我个人不会使用的技术术语。
我目前正在观看CppCon2018上的演讲,这些演讲由Herb Sutter,Kate Gregory,Timur Doumler,John Lakos等人提供。。。Youtube上有此视频,我建议您也观看。
他们使用术语初始化程序列表。或者,当成员初始化程序列表不明确时。
现在,让我们比较一些搜索结果:
+----------------+-------------+
| Google scholar | Google book |
+------------------------------+----------------+-------------+
| "member initialization list" | 59 results | 948 results |
| "member initializer list" | 34 results | 553 results |
+------------------------------+----------------+-------------+
在书面媒体上,这些大师(每个人都可以写论文或书,但大师往往会写更多的论文或书)在大多数情况下都称其为“成员初始化列表”。 >
好吧,有人不知道这是什么,我听说过有人称它为初始化程序列表。即使用我的母语讲话,我也将其称为“初始化程序列表” 。在法语中,我听说同事们称它为“初始化列表”。我想这里有些变化。
将其称为初始化程序列表。这对我来说是正确的名词。
答案 1 :(得分:5)
至少到目前为止,C ++标准仅使用语法描述 mem-initializer-list ,该语法描述是解析规则的一部分。在1998年及以后的所有版本的C ++标准的标题为“初始化基础和成员”的小节中,进行了描述。节号确实发生了变化(例如,在C ++ 98中为12.6.2,在C ++ 17中为15.6.2)。
标准中没有英语说明。因此,人们通常使用他们认为代表该概念的任何措辞。
我个人使用“初始化程序列表”一词,因为我是一个会说英语的国家,而该国家的语言受到英国的影响大于美国。
答案 2 :(得分:3)
CPP标准草案N4713指出:
15.6.2初始化基础和成员[class.base.init]
3 mem-initializer-list 可以使用任何表示基类类型的class-或-decltype来初始化基类。
struct A { A(); }; typedef A global_A; struct B { }; struct C: public A, public B { C(); }; C::C(): global_A() { } // mem-initializer for base A
5 ctor-initializer 可能会初始化构造函数类的变体成员。如果ctor初始化程序为相同成员或相同基类指定了多个mem初始化程序,则ctor初始化程序会格式错误。
Bjarne Stroustrup 在他的书“ C ++编程语言” 第4版中使用了成员初始值设定项列表。
>Scott Meyers 在他的书“有效的C ++” 中使用了成员初始化列表一词。他做了不使用标准中使用的术语。
在线CPP常见问题解答(https://isocpp.org)使用术语constructor’s initialization list。