Почему мы должны использовать инициализацию списка для базовых типов вместо используемой области (-1)?
Прежде всего, я думаю, что есть сообщение о том, что единообразная инициализация C++ 11 должна использоваться всякий раз, когда она может быть использована. В этом случае это в основном вопрос стиля и вкуса.
Будет ли стиль и вкус, продвигаемые автором, стать стандартом de facto, который сложно сказать в настоящее время. Мы все знаем, что формальная инициализация не , что форма. С другой стороны, в большинстве ситуаций преимущества использования его в качестве стиля кодирования по умолчанию являются привлекательными - синтаксическая однородность плюс тот факт, что проблемы, такие как Most Vexing Parse, исчезают.
Это указано, когда список инициализаторов содержит только один элемент, инициализированный объект инициализируется из этого элемента (§ 8.5.4/3). Это делает инициализацию в вашем примере эквивалентной регулярной прямой инициализации (за исключением того, что сужение конверсий недопустимо).
Другими словами, area{-1}
и area(-1)
в вашем примере являются как прямыми инициализациями, так и эквивалентными. Выбор одного над другим - это только вопрос стиля.
Есть ли какие-либо преимущества/ситуации, в которых они ведут себя по-другому?
Как упоминалось выше, одна из ситуаций, когда они ведут себя по-разному, задаются инициализацией, которая включает в себя сужение конверсий. Например, в то время как это разрешено:
int x{42};
Это не так:
int y{3.14}; // ERROR! Narrowing conversion
Если вы хотите вызвать конструктор списка инициализаторов? :) Я предполагаю, что это просто течет вместе со всем «единообразным» аспектом. – chris
@chris должен был упомянуть 'area' является' double'. –
Все еще считается ситуацией, когда она ведет себя по-другому, хотя, даже если она не является специфичной для списков инициализации конструктора. – chris