Пожалуйста, прочитайте вопрос полностью, прежде чем вы решите пометить его как дубликат. Утверждение как
int i=int();
большинство программистов скажут, что здесь есть инициализация значения & я буду инициализирован значением. (0 в качестве выхода). Но он также печатает 0 как вывод на компилятор C ++ 98.
Следующая программа, которую я тестировал на C ++ 98, выдает мне 0 в качестве вывода.
#include <iostream>
int main()
{
int i=int();
std::cout<<i;
}
Не говорите, что я — значение, инициализированное в вышеупомянутой программе C ++ 98, потому что инициализация значения введена в C ++ 03. Итак, как я здесь инициализирован? Это действительно вызов конструктора? int () выглядит как вызов конструктора. Примитивные типы также имеют конструкторы по умолчанию в C ++, как сказал Бьярн Страуструп в своей книге «Язык программирования C ++». & TC ++ PL.
Язык программирования C ++ Бьярне Страуструп:
10.4.2 Встроенные типы также имеют конструкторы по умолчанию
также прочитайте раздел 6.2.8 этой же книги.
Следующие ссылки также говорят, что встроенные типы имеют конструкторы по умолчанию в C ++.
1) http://www.informit.com/guides/content.aspx?g=cplusplus&SEQNUM = 15
2) http://www.geeksforgeeks.org/c-default-constructor-built-in-types/
Так могу ли я сказать, что это вызов конструктора целочисленного типа?
5.2.3 Явное преобразование типов (функциональная запись)
2 Выражение
T()
, гдеT
является спецификатором простого типа (7.1.5.2) для не полного массива типа объекта или типа (возможно, cv-квалифицированного) типа void, создает значение r указанного типа, значение которого определяется
default-initialization (8.5; инициализация дляvoid()
дело). […]8.5 Инициализаторы
5 […] Для по умолчанию инициализирует объект типа
T
средства:— если
T
это тип класса не POD (раздел 9), конструктор по умолчанию для
T
называется (и инициализация плохо сформирована, еслиT
не имеет доступного конструктора по умолчанию);— если
T
тип массива, каждый элемент инициализируется по умолчанию;— в противном случае хранилище для объекта инициализируется нулями.
Нет проблем. int()
был гарантированно равен нулю с самого первого стандарта C ++. Тот факт, что это произошло посредством инициализации по умолчанию, а не инициализации значения, является технической деталью, которая совершенно не имеет значения для вашего вопроса.