初始化数据成员的列表的正确术语是什么


  • 一位同事说初始值设定项列表,另一位初始化列表
  • 一个SO回答说初始值设定项列表,另一个初始化列表

哪个是正确的*术语?

PS:他们都在谈论数据成员初始值设定项/初始化列表


*如果正确性对您来说不明确,您可以回到标准中使用的术语

哪个术语是正确的?

"正确的";模棱两可,让我们看看什么:

  1. 标准称之为
  2. C++大师们称之为
  3. vulgus称之为

标准

[lass.base.init]/1&2

1在类的构造函数的定义中,直接基类子对象和虚拟基类子对象以及非静态数据成员的初始化器可以由ctor初始化器指定,其形式为

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初始值设定项id中,会在构造函数类的作用域中查找初始非限定标识符,如果在该作用域中找不到,则会在包含构造函数定义的作用域内查找。[注意:如果构造函数的类包含与该类的直接基类或虚拟基类同名的成员,则命名该成员或基类并由单个标识符组成的mem初始值设定项id将引用该类成员。可以使用限定名称指定隐藏基类的mem初始值设定项id--尾注]除非mem初始值设定项id命名构造函数的类、构造函数的类的非静态数据成员或该类的直接或虚拟基,否则mem初始设定项的格式不正确。

它被称为mem初始值设定项列表:这是一个我个人不会使用的技术术语。

C++大师

我目前正在观看Herb Sutter、Kate Gregory、Timur Doumler、John Lakos等在2018年CPpCon2上的演讲。。。这个可以在Youtube上看到,我建议你也看。

他们在初始化程序列表中使用术语。或者当它不明确时,成员初始化程序列表。

现在,让我们比较一些搜索结果:

+----------------+-------------+
| Google scholar | Google book |
+------------------------------+----------------+-------------+
| "member initialization list" | 59 results     | 948 results |
| "member initializer list"    | 34 results     | 553 results |
+------------------------------+----------------+-------------+

在书面媒体上,这些大师们(好吧,每个人都可以写一篇论文或一本书,但大师们往往会写更多)大多数时候都称之为成员初始化列表

普通C++程序员

嗯,有一个不知道这是什么,还有一个我听说称之为的初始化程序列表。我称之为初始化程序列表,即使在用母语说话时也是如此。在法语中,我听同事们称之为初始化列表。我想会有一些变化。

结论

将其称为初始化程序列表。这对我来说是正确的术语。

C++标准-至少到目前为止-只使用语法描述mem初始值设定项列表,该列表被指定为解析规则的一部分。在1998年及以后的C++标准的所有版本中,描述都在题为"初始化基和成员"的部分中。节号确实发生了变化(例如,在C++98中为12.6.2,在C++17中为15.6.2)。

标准中没有英文描述。因此,按照惯例,人们使用他们认为代表概念的任何措辞。

就我个人而言,我使用"首字母表"这个词,因为我是一个讲英语的国家,这个国家的公认语言比美国更受英国的影响。

CPP标准草案N4713规定:

15.6.2初始化基和成员[class.base.init]

3内存初始化器列表可以使用表示基类类型的任何类或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初始化器为同一成员或同一基类指定了多个mem初始化器,则该ctor初始化程序格式错误。

  • Bjarne Stroustrup在其著作《C++编程语言》第4版中使用了成员初始值设定项列表

  • Scott Meyers在其著作"有效C++">第4项中使用了术语成员初始化列表。他没有使用标准使用的术语。

  • 在线CPP常见问题(https://isocpp.org)使用术语构造函数的初始化列表

最新更新