2017-02-10 18 views
1

Существует класс с нестандартным конструктором.Различные способы создания объектов в стеке

#include <iostream> 

class Foo { 

public: 

    Foo(int a) { std::cout << "Constructor" << std::endl; }; 

} 

Так конструктор по умолчанию не может быть вызван:

Foo obj; // compilation error 

Не-конструктор по умолчанию может быть inkoved:

Foo obj(1); 

Вопрос:

Что происходит в следующей строке, которая компилируется?

Foo obj(); 
+3

[Наиболее досадно синтаксического анализа] (https://en.wikipedia.org/wiki/Most_vexing_parse). –

ответ

4

Вы создаете прототип функции без параметров.

Чтобы быть более конкретным ... в основном ничего не происходит

+0

См. Также «C Forward Declaration» – awiebe

+2

Что-то происходит, вы сказали, что функция существует, поэтому вы получите странные ошибки времени ссылки, если вы случайно ее вызовете и не представили реализацию. – awiebe

+0

уверен, но во время выполнения ничего не происходит, нет конструкции, нет выделения стека, nottin, линия не имеет эффекта – Kupto