C ++ инициализация скобки с параметром шаблона - PullRequest
3 голосов
/ 12 марта 2020

Я почти уверен, что где-то ответили, но я не могу найти его, поэтому я просто спрошу.

Компилируется нормально

template <int SIZE, unsigned int NUMSYNC>
class MyClass{
private:
    std::uniform_int_distribution<int> randomNumberDistribution{ 0, SIZE };
}

Не компилируется ( константа SIZE не является именем типа)

template <int SIZE, unsigned int NUMSYNC>
class MyClass{
private:
    std::uniform_int_distribution<int> randomNumberDistribution( 0, SIZE );
}

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

Я компилирую с C ++ 14

1 Ответ

4 голосов
/ 12 марта 2020

Это связано с определением в стандарте. В противном случае при синтаксическом анализе кода компилятор не сможет отличить guish от объявления функции-члена.

2) Через инициализатор члена по умолчанию, который является инициализатор скобок или равно включен в объявление члена и используется, если член исключен из списка инициализатора члена конструктора. (Выделено мной)

https://en.cppreference.com/w/cpp/language/data_members

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...