2013-12-04 3 views
0

С Статическая инициализация относится к нулевой инициализации и инициализации с постоянным выражением, согласно стандарту C++ 03, я не вижу, какое фиаско может возникнуть там.Почему Static Инициализация заказа Fiasco называется так?

Итак, почему такое имя, а не, например, «[Dynamic] Инициализация заказа Fiasco»?

Edit:

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

  • Напоминаем, что «статическая инициализация» имеет формальное определение в стандарте.
  • Чтобы собрать любую историческую или анекдотическую причину для этой формулировки.
  • Для тех, кто искренне смущен кажущимся парадоксом.
+0

Также см. [AddressSanitizerInitializationOrderFiasco] (https://github.com/google/sanitizers/wiki/AddressSanitizerInitializationOrderFiasco). – jww

ответ

1

«Статическое» здесь относится (несколько двусмысленно, и не совсем точно) переменным со статической продолжительностью хранения, не статический инициализации нелокальных переменных.

Вы правы, что фиаско происходит только при динамической инициализации нелокальных переменных.

почему такое имя?

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

2

Потому что терминология C++ сложна, и технический термин часто конфликтует с разговорным способом говорить вещи.

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

  • Другой пример: Люди говорят, что «функция возвращает ссылку», но это не совсем верно: Скорее всего, оценка вызова функции всегда производит значение и ценности никогда не ссылки. Разница заключается в том, является ли значение значением lvalue, xvalue или prvalue, которое зависит от объявленного типа возврата функции. Но это скорее глоток, чтобы сказать.

0

Это потому, что программисты обычно падают за ошибочность исключенного среднего. Наиболее распространенный симптом: если он не идеален, он бесполезен. Еще один распространенный симптом: дать что-то, что вызывает проблемы, если оно недостаточно хорошо понимается как тенденциозное имя, как в «статическом фиаско порядка инициализации».