Каков правильный термин для списка, который инициализирует элементы данных? - PullRequest
0 голосов
/ 23 ноября 2018
  • Один коллега говорит список инициализаторов , другой список инициализации .
  • Один SO ответ говорит список инициализаторов , другой список инициализации .

Какая правильная терминология *?

PS: Все они говорят оИнициализатор / списки членов данных.


* Если правильный для вас неоднозначный, вы можете вернуться к используемому термину «Стандарт».

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Какая правильная терминология?

"Правильно", будучи неоднозначным, давайте посмотрим, что:

  1. Стандарт называет это,
  2. Гуру C ++ называют это,
  3. vulgus называет это.

Стандарт

[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-list : это технический термин, который я не буду использовать лично.

Гуру C ++

В настоящее время я наблюдаю за выступлениями на CppCon2018, такими как Херб Саттер, Кейт Грегори, Тимур Домлер, Джон Лакос, ... Это доступно на Youtubeи я предлагаю вам посмотреть его тоже.

Они используют термин список инициализаторов .Или когда это неоднозначно список инициализаторов членов .

Теперь давайте сравним некоторые результаты поиска:

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

На письменных носителях эти гуру (ну, каждый может написатьбумага или книга, но гуру, как правило, пишут больше), назовите это список инициализации членов большую часть времени.

Обычные программисты на C ++

Ну, естьтот, кто не знает, что это такое, и тот, кого я слышал, называет это список инициализаторов .Я называю это списком инициализаторов , даже когда говорю на моем родном языке.На французском языке я слышал, что коллеги называют это так, что переводило бы список инициализации .Тогда, я думаю, есть некоторая вариация.

Заключение

Назовите это список инициализаторов .Это правильный термин для меня.

0 голосов
/ 23 ноября 2018

Стандарты C ++ - по крайней мере на сегодняшний день - используют только синтаксическое описание mem-initializer-list , которое указано как часть правил синтаксического анализа.Описание находится в разделе, озаглавленном «Инициализация основ и членов» во всех версиях стандарта C ++ от 1998 года и позже.Номер раздела действительно меняется (например, 12.6.2 в C ++ 98 и 15.6.2 в C ++ 17).

В стандарте нет описания на английском языке.Поэтому обычно люди используют любую формулировку, которая, по их мнению, представляет собой концепцию.

Лично я использую термин «список инициализаторов», поскольку я являюсь носителем английского языка в стране, в которой принятый язык более подвержен влиянию Соединенного Королевства, чемСоединенные Штаты.

0 голосов
/ 23 ноября 2018

Стандартный проект CPP N4713 гласит:

15.6.2 Инициализация баз и элементов [class.base.init]

3 Список mem-initializer-list может инициализировать базовый класс, используя любой класс-или-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 A ctor-initializer может инициализировать вариант члена класса конструктора.Если инициализатор ctor указывает более одного инициализатора mem для одного и того же члена или для одного и того же базового класса, инициализатор ctor является некорректным.

  • Бьярн Страуструп использует термин список инициализаторов в своей книге "Язык программирования C ++" 4-е издание.

  • Скотт Мейерс использует термин список инициализации члена в своей книге "Effective C ++" Item 4Он не использует термин, используемый стандартом.

  • Часто задаваемые вопросы по CPP онлайн (https://isocpp.org) использует термин список инициализации конструктора .

...