C ++ вызывает конструктор по умолчанию с Parens VS без паренов [Duplicate
-
27-10-2019 - |
Вопрос
Возможный дубликат:
Различные типы инициализации в C ++
Есть ли какая -то разница между вызовом базового конструктора как
Foo afoo;
против
Foo afoo();
Решение
Да: первое - это определение переменной, второе - это объявление функции. Теперь давайте обсудим более интересный вопрос о разнице между этими двумя выражениями:
new Foo()
new Foo
Есть ли разница, зависит от типа Foo
И его члены!
- если
Foo
имеет явный конструктор по умолчанию, они идентичны - Если нет конструктора по умолчанию, есть потенциально разница! Если есть какой-либо член, который является заполнительным или встроенным типом, он будет инициализирован в первом экспрессии, но не во втором, за исключением всех участников, которые имеют конструкцию по умолчанию, будут построены по умолчанию.
Обратите внимание, что это также относится к членам классов. Для переменных вы не можете использовать форму, используя скобку, то есть, чтобы убедиться, что объект инициализирован, вам нужно использовать
Foo aFoo = Foo();
Если нет явного конструктора, принимающего аргумент или вы не знаете (например, в коде шаблона).
Не связан с StackOverflow