Что означает X f ()?

Я вижу этот код, и я не понимаю, что это значит. Я знаю, как мы используем конструктор по умолчанию, но это не стандартный конструктор. Что это?

class X { ... }; int main() { X f(); } 

Он объявляет функцию f которая не принимает никаких параметров и возвращает тип X
Это также известно как Most Vexing Parse в C ++. Это побочный результат того, как стандарт C ++ определяет правила интерпретации деклараций.

Предположим, вы объявили функцию:

 int Random(); 

И используйте его:

 int main() { int n; n = Random(); } 

Но реализуйте функцию Random после main . Или предположим, что функция Random определена в некотором заголовке. Вам нужно указать компилятору, что Random – это функция, реализованная в каком-либо другом исходном файле или в какой-либо библиотеке.

Следовательно, выражение типа:

 T foo(); 

Всегда будет означать инструкцию для компилятора, что есть функция с именем foo которая возвращает T Он не может быть объектом типа T

Его функция объявляет имя f

  X f(); ^ ^ function return type 

функция f() принимает аргументов и возвращает объект classа X

например, его определение может быть следующим:

 class X{ int i; // other definition } X f(){ X x; // some more code return x; } 

В основном вы можете использовать как:

 int main(){ X a = f(); int i = f().i; } 

Это функция, которая не принимает никаких аргументов и возвращает объект classа X

  • Preincrement быстрее, чем постинкремент в C ++ - правда? Если да, то почему?
  • C # Generics не допускает ограничений типа делегата
  • Неопределенная ссылка C ++
  • $ в имени переменной?
  • Насколько хорошо поддерживается Unicode в C ++ 11?
  • Класс контейнера / библиотека для C
  • Возможно ли is_constexpr в C ++ 11?
  • Как отключить некоторые даты в элементе управления DateTimePicker?
  • Выполнение qsort vs std :: sort?
  • Что означает эта ошибка GCC «... усечение, усеченное, чтобы соответствовать ...»?
  • Как я могу совместно использовать объект между UIViewControllers на iPhone?
  • Interesting Posts
    Давайте будем гением компьютера.