Есть ли разница между `List x;` и `List x ()`

Название происходит от известного сайта C ++ FAQ Маршалл Клайн.

Автор утверждает, что есть разница между следующими двумя примерами кода.

Предположим, что List является именем некоторого класса. Затем функция f () объявляет локальный объект List с именем x:

void f()
{
List x;     // Local object named x (of class List)
...
}

Но функция g () объявляет функцию с именем x (), которая возвращает список:

void g()
{
List x();   // Function named x (that returns a List)
...
}

Но действительно ли неправильно использовать второй вариант?

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

4

Решение

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

Конечно, нет. Потому что ты Можно объявить функцию с функцией.

Это называется самый неприятный разбор и это хорошо задокументировано. На самом деле, было бы ошибкой от имени компилятора лечить

List x();

как объявление переменной.

Но действительно ли неправильно использовать второй вариант?

Если вы хотите переменную, тогда да. Если вы хотите объявить функцию … вроде да. Вы можете, но обычно вы делаете это вне области действия функции.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]