C ++ вызывает конструктор по умолчанию с Parens VS без паренов [Duplicate

StackOverflow https://stackoverflow.com/questions/8840523

  •  27-10-2019
  •  | 
  •  

Вопрос

Возможный дубликат:
Различные типы инициализации в C ++

Есть ли какая -то разница между вызовом базового конструктора как

Foo afoo;

против

Foo afoo();
Это было полезно?

Решение

Да: первое - это определение переменной, второе - это объявление функции. Теперь давайте обсудим более интересный вопрос о разнице между этими двумя выражениями:

new Foo()
new Foo

Есть ли разница, зависит от типа Foo И его члены!

  • если Foo имеет явный конструктор по умолчанию, они идентичны
  • Если нет конструктора по умолчанию, есть потенциально разница! Если есть какой-либо член, который является заполнительным или встроенным типом, он будет инициализирован в первом экспрессии, но не во втором, за исключением всех участников, которые имеют конструкцию по умолчанию, будут построены по умолчанию.

Обратите внимание, что это также относится к членам классов. Для переменных вы не можете использовать форму, используя скобку, то есть, чтобы убедиться, что объект инициализирован, вам нужно использовать

Foo aFoo = Foo();

Если нет явного конструктора, принимающего аргумент или вы не знаете (например, в коде шаблона).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top