C ++ Самый неприятный синтаксический анализ, когда аргумент - числовой литерал? [Дубликат]
На этот вопрос уже есть ответ:
Почему в классе инициализаторы могут использовать только = или {}? 1 ответЯ делал урок, который выглядел так:
struct InputHandler
{
std::vector<std::pair<int, int>> keyBindings( 256 );
};
Это привело к ошибке, и я знаю, что это потому, что компилятор интерпретирует это как функцию, а не аргумент конструктора. Но мне было интересно, есть ли что-то двусмысленное, когда я передал числовой литерал в скобках, как в этом случае? Я знаю, что могу исправить это, используя только фигурные скобки, но я бы подумал, что самая неприятная проблема с синтаксическим анализом не возникнет, так как использование числового литерала 256 не может быть интерпретировано как функция.
Редактировать: Я рад закрыть или удалить этот вопрос. Я понял, что, хотя эта конкретная строка не является неоднозначной, общие правила C ++ 11 запрещают инициализаторам в классе использовать что-либо, кроме = или {}, это как общее правило, чтобы не иметь дополнительное исключение из правила. С другой стороны, создание вектора в функции main () в виде:
std::vector<std::pair<int, int> foo(5);
Работает отлично. Видимо, это не двусмысленное выражение.