Конструктор по умолчанию C ++ | Встроенные типы
Предсказать результат следующей программы?
#include <iostream> using namespace std; int main() { cout << int () << endl; return 0; } |
Конструктор без аргументов или со значениями по умолчанию для каждого аргумента рассматривается как конструктор по умолчанию . Он будет вызываться компилятором при необходимости (именно код будет сгенерирован для конструктора по умолчанию в зависимости от необходимости).
C ++ позволяет даже встроенным типам (примитивным типам) иметь конструкторы по умолчанию . Приведение в стиле функции int () аналогично приведению 0 к требуемому типу. Программа выводит на консоль 0.
Первоначальное содержание статьи вызвало много дискуссий, ниже приводится сводка.
Стоит знать о семантике ссылок и значений в C ++ и концепции Plai n Old Data. Из Wiki у примитивных типов и типов POD нет определяемого пользователем оператора присваивания копии, никакого определяемого пользователем деструктора и никаких нестатических элементов данных, которые сами не являются POD. Более того, класс POD должен быть агрегированным, что означает, что он не имеет объявленных пользователем конструкторов, частных или защищенных нестатических данных, базовых классов и виртуальных функций.
Отрывок (из почтового сообщения) создателя C ++: «Я думаю, вы смешиваете« фактические вызовы конструктора »с концептуальным наличием конструктора. Считается, что у встроенных типов есть конструкторы ».
Вышеупомянутый фрагмент кода int () считается концептуально имеющим конструктор. Однако никакого кода для явного вызова конструктора генерироваться не будет. Но когда мы наблюдаем вывод сборки, будет сгенерирован код для инициализации идентификатора с использованием семантики значения. Дополнительные сведения см. В разделе 8.5 этого документа.
Спасибо Prasoon Saurav за начало обсуждения, предоставление различных ссылок и исправление пробелов в моем понимании.
Предоставил Venki . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.
Использованная литература:
- Язык программирования C ++, 3e.
- Последний стандарт C ++ - рабочий проект раздела 8.5.