[Перевод] Что значит инициализировать int в C++?
Недавно я получил по почте от Сэма Джонсона этот вопрос. Вот слегка отредактированное письмо Сэма:
«Возьмём для примера этот код в локальной области видимости функции:
int a;
a = 5;
Многие люди считают, что инициализация происходит в строке 1, потому что веб-сайты наподобие cppreference дают такое определение: "Инициализация переменной предоставляет его начальное значение на момент создания".
Однако я убеждён, что инициализация происходит в строке 2, потому что [в разных хороших книгах по C++] инициализация определяется как первое существенное значение, попадающее в переменную.
Можете ли вы сказать, какая строка считается инициализацией?»
Отличный вопрос. На Cppreference написано правильно, и для всех классовых типов ответ прост: объект инициализируется в строке 1 вызовом его стандартного конструктора.
Но (а вы ведь знали, что будет «но») для локального объекта фундаментального встроенного типа наподобие int ответ будет... чуть более сложным. И именно поэтому Сэм задал этот вопрос, ведь он знает, что язык достаточно свободно обращается с инициализацией таких локальных объектов по историческим причинам, имевшим в то время смысл.
Короткий ответ: вполне допустимо говорить, что переменная получает своё исходное значение в строке 2. Но заметьте, что я намеренно не сказал «Объект инициализируется в строке 2», к тому же и код, и этот ответ обходят молчанием более важный вопрос: «Ну ладно, а что, если код между строками 1 и 2 попробует считать значение объекта?»
Читать далееИсточник: Хабрахабр
Похожие новости
- AlinaTen: DeepRoute.ai заявила о более чем 300 тысячах автомобилей с её системой автопилота
- AlinaTen: Суд в США отклонил обвинения Илона Маска в мошенничестве против OpenAI перед началом разбирательства
- О создании в России центральной базы данных идентификаторов пользовательского оборудования (оконечного оборудования)
- Почему у тиранозавра маленькие ручки?
- ONLYAPPS: Как самостоятельно сделать инфографику для маркетплейсов
- MarketingNews: Getblogger добавил возможность размещения рекламы в мессенджере «Макс»
- Блог ленивого инвестора: Итоги недели: рост на ожиданиях, падение на факте
- Это — все что вам надо знать о белых списках: ресерч, сканы, обход
- Краткая история биометрии: как ПЦР-метод изменил идентификацию по ДНК
- Права в Linux: chown/chmod, SELinux context, символьная/восьмеричная нотация, DAC/MAC/RBAC/ABAC