int a = int (); что происходит в C ++ 98?

Пожалуйста, прочитайте вопрос полностью, прежде чем вы решите пометить его как дубликат. Утверждение как

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/

Так могу ли я сказать, что это вызов конструктора целочисленного типа?

8

Решение

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 ++. Тот факт, что это произошло посредством инициализации по умолчанию, а не инициализации значения, является технической деталью, которая совершенно не имеет значения для вашего вопроса.

9

Другие решения


По вопросам рекламы [email protected]