справочные страницы С++ говорят, что() для инициализации значения, {} для значения и агрегата и инициализации списка. Итак, если я просто хочу инициализацию значения, какой из них я использую?() или {}? Я спрашиваю, потому что в книге "A Tour of С++" самого Бьярне он предпочитает использовать {} даже для инициализации значения (см., Например, страницы 6 и 7), и поэтому я думал, что это хорошая практика всегда используйте {}, даже для инициализации значения. Тем не менее, я был сильно укушен следующей ошибкой в последнее время. Рассмотрим следующий код.
auto p = std::make_shared<int>(3);
auto q{ p };
auto r(p);
Теперь, согласно компилятору (Visual Studio 2013), q
имеет тип std::initializer_list<std::shared_ptr<int>>
, что не то, что я намеревался. То, что я на самом деле предназначалось для q
, на самом деле таково r
, которое std::shared_ptr<int>
. Поэтому в этом случае я не должен использовать {} для инициализации значения, но используйте(). Учитывая это, почему Бьярне в своей книге по-прежнему предпочитает использовать {} для инициализации значения? Например, он использует double d2{2.3}
в нижней части страницы 6.
Чтобы окончательно ответить на мои вопросы, когда следует использовать() и когда следует использовать {}? И это вопрос правильности синтаксиса или вопрос хорошей практики программирования?
О, и, если возможно, просто по-английски.
EDIT: Кажется, что я немного неправильно понял инициализацию стоимости (см. Ответы ниже). Однако вышеприведенные вопросы по-прежнему сохраняются.