Ан
Антон

C++: на что влияют круглые скобки при инициализации сишных структур?

Всем доброго времени суток!

Предположим, "Type" - некая "чисто сишная" структура. Без всяких виртуальных ф-ций, без явно объявленных конструкторов и тп. В чем разница между такими конструкциями?

Type t; // 1

Type t(); // 2

Type* t = new Type; // 3

Type* t = new Type(); // 4

Type t; /*...*/; t = Type(); // 5

Вопрос навеян ответами на вопрос: http://otvet.mail.ru/question/170936633

OK. Со скобочками забьёт нулями (и этот способ можно универсально применять к шаблонам, в отличие от альтернативных способов) , без скобочек - не забьёт (но будет работать быстро) .

Вот неплохой пруфлинк:

http://www.boost.org/doc/libs/1_41_0/libs/utility/value_init.htm

Там же - описание багов древних компиляторов, где это неправильно работало и воркэраунд через boost, если такой компилятор вдруг используется.

2 - да, объявление ф-ции, спсб, часто на это напарываюсь.

Так что T t = T(); остается только

АЖ
Алексей Жидков

Зависит от используемого стандарта и содержимого структур. Но в общем и целом в п1-4 будет вызван дефолтный конструктор (причем в зависимости от стандарта и членов структуры они могут быть инициализированы дефолтным значением или не быть инициализированными вообще) , в п. 5 сначала будет п. 1, потом конструктор копирования. Еще п. 2, не помню точно, может вообще не пройти, т. к. выглядит как объявление функции. Короче те самые шизанутые дебри плюсов, за которые их и не любят. Юзай list initializers из c++11 - они предсказуемые и работают одинаково везде и для всего.

ДП
Дима Попов

Сам спросил - сам ответил 🙂
Только:

вариант 2 - не сработает, надо Type t = Type();

вариант 5 - копирование, т. е. сначала сработает Type(), а потом аналог Type( const Type&)

и не будем забывать, что если добавить конструктор по-умолчанию, то никакого забивания 0 не будет (ну, только если вручную не описать)

Похожие вопросы
Двойные угловые скобки C++
Вопрос по структурам в C++
c# ошибка при чтении структуры из файла
C++ Инициализация массива в функции...
C++ Как передать структуру в функцию по ссылке?
Чтение структуры из файла C++
Помогите дописать Структуру ( Borland C++ )
Помогите написать программу в C++ по структурам
c# обращение к элементу структуры в Листе структур
C++ классы и структуры