Использование единого синтаксиса инициализации - PullRequest
0 голосов
/ 01 июля 2018

Если у меня есть класс

class Foo
{
public:
    Foo();
    Foo(int bar);

private:
    int m_bar;
}

В чем разница между этими двумя способами инициализации его члена

Foo::Foo(int bar):
    m_bar(bar)
{

}

Foo::Foo(int bar):
    m_bar{ bar }
{

}

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

1 Ответ

0 голосов
/ 01 июля 2018

В случае простых типов, таких как int , в вашем случае разницы нет. Однако инициализация std :: vector из STL будет совершенно иной

std::vector<int> v1(3,1); // v1 consists of: 1, 1, 1
std::vector<int> v2{3,1}; // v2 consists of: 3, 1

Посмотрите на этот ответ , если вы хотите понять, почему обычно фигурная скобка {} лучше, хотя цитата из книги Скотта Мейера Effective Modern C ++, который я настоятельно рекомендую:

[...] Так почему же этот предмет под названием что-то вроде «Предпочитать синтаксис фигурной инициализации»? Недостатком инициализации в скобках является иногда удивительное поведение, сопровождает это. [...]

...