Рубрики

C ++ конструктор по умолчанию | Встроенные типы

Предсказать вывод следующей программы?

#include <iostream>

using namespace std;

  

int main() {

  

   cout << int() << endl;

   return 0;

}

Конструктор без каких-либо аргументов или со значениями по умолчанию для каждого аргумента рассматривается как конструктор по умолчанию . Он будет вызываться компилятором, когда это необходимо (именно код будет сгенерирован для конструктора по умолчанию в зависимости от необходимости).

C ++ позволяет даже встроенным типам (примитивным типам) иметь конструкторы по умолчанию . Приведение стиля функции int () аналогично приведению 0 к требуемому типу. Программа выводит 0 на консоль.

Первоначальное содержание статьи вызвало много дискуссий, ниже приводится консолидация.

Стоит помнить о семантике ссылок и значений в C ++ и концепции простых старых типов данных. Из вики примитивные типы и типы POD не имеют определяемого пользователем оператора копирования, пользовательского деструктора и нестатических элементов данных, которые сами не являются POD. Более того, класс POD должен быть агрегатным, то есть он не имеет объявленных пользователем конструкторов, личных или защищенных нестатических данных, базовых классов и виртуальных функций.

Отрывок (из почтовой заметки) от создателя C ++: «Я думаю, что вы смешиваете« реальные вызовы конструктора »с концептуально имеющим конструктор. Считается, что встроенные типы имеют конструкторы ».

Вышеупомянутый фрагмент кода int () считается концептуально имеющим конструктор. Однако не будет никакого кода, сгенерированного для явного вызова конструктора . Но когда мы наблюдаем вывод сборки, будет сгенерирован код для инициализации идентификатора с использованием семантики значения. Для получения более подробной информации обратитесь к разделу 8.5 этого документа.

Спасибо Прасуну Саураву за то, что он инициировал дискуссию, предоставил различные ссылки и исправил пробел в моем понимании.

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

Ссылки:

  1. Язык программирования C ++, 3e.
  2. Последний стандарт C ++ — рабочий проект, раздел 8.5.

Рекомендуемые посты:

C ++ конструктор по умолчанию | Встроенные типы

0.00 (0%) 0 votes