2014-07-27 2 views
0

В чем разница между определением объекта класса «Человек», используя его конструктор по умолчанию следующий двумя различными способами:Разница между двумя способами с помощью конструктора по умолчанию

Метод 1:

Person person = Person(); 

Метод 2 :

Person person(); 

Когда я инициализируются некоторые переменные внутри конструктора по умолчанию и попытался получить доступ к этим переменным или установить эти переменные с помощью способов получения/установки в основной программе, я получил ошибку компиляции в методе 2, но работает метод 1.

Спасибо.

+2

«У меня есть сборник»? что это вообще значит? BTW, второй не вызывает стандартный consturctor, это объявление функции. –

+0

Ваш вопрос основан на ложном предположении, что оба из них используют конструктор по умолчанию. – chris

+0

Возможный дубликат [О указателях на функции в объявлениях функций] (http://stackoverflow.com/questions/9327505/about-pointers-to-functions-in-function-declarations) –

ответ

11
Person person = Person(); 

Объявляет Person объект под названием person. Он инициализирует этот объект временным объектом, созданным Person(). Это означает, что он будет ссылаться на конструктор копирования/перемещения Person (который, вероятно, будет удален).

Person person(); 

Это объявляет функция называется person, который возвращает объект Person. Это не объявление объекта.

Вы, скорее всего, хочу вместо этого:

Person person; 

Объявляет Person объект под названием person, который строится по умолчанию.

Вы можете использовать новый «однородный» синтаксис инициализации, введенный в C++ 11, что позволяет избежать неясностей между переменными и функцией объявлениями:

Person person{}; 

И, наконец, если вы AAA -minded , вы можете использовать стиль, предложенный Herb Sutter:

auto person = Person{}; 
+2

Стоит отметить, что компилятор, который не исключает, что копирование/перемещение, вероятно, сегодня бесполезно. – chris

+0

@chris Ты знаешь, когда думаешь быстрее, чем свое письмо, и в итоге чего-то не хватает? Это случилось. –

+0

Спасибо, понял. – manojg

Смежные вопросы