Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144

При запуске C++ программы, какие типы переменных инициируются нулями?

28.06.2019, 08:30. Показов 2264. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Это правда, что при создании объекта класса, его поля содержат мусор ?

Я хочу иметь “шпаргалку” : Какие сущности инициируется автоматом, а какие надо устанавливать вручную.
Помогите составить:
1) Локальные переменные функции ?
2) Статические переменные в функции, или в файле ?
3) Поля класса ?
4) Статические Поля класса ?
5) Глобальные переменные ?
6) Структуры/Массивы как переменные файла ?
7) Структуры/Массивы как поля класса ?
8) Структуры/Массивы как локальные переменные функции ?
9) Память выделенная через new ?
10) ...
11) ... что еще записать в шпаргалку ?

Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2019, 08:30
Ответы с готовыми решениями:

Почему при вводе русского текста после cout<< при запуске программы выписывает какие то каракули
Почему при вводе русского текста после cout&lt;&lt; при запуске программы выписывает какие то каракули????

При запуске Google Chrome запускается поисковик Trotux и устанавливаются какие-то китайские программы
Установил по глупости левый ексешник и понеслось: постоянно открываются какие-то окна, устанавливаются программы, в процессах куча всяких...

При запуске ОС устанавливаются сторонние программы,а при запуске браузера Chrome расширения
Здравствуйте, При запуске ОС устанавливаются сторонние программы,а при запуске браузера Chrome расширения

12
 Аватар для 7533620
163 / 70 / 39
Регистрация: 28.05.2019
Сообщений: 242
28.06.2019, 08:41
https://en.cppreference.com/w/... ialization
https://en.cppreference.com/w/... ialization
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
28.06.2019, 08:44
Цитата Сообщение от Artem_Pv Посмотреть сообщение
Это правда, что при создании объекта класса, его поля содержат мусор ?
Только поля встреонных типов, или пользовательских типов без соответствующего конструктора.

Цитата Сообщение от Artem_Pv Посмотреть сообщение
Какие сущности инициируется автоматом
Только переменные со static storage duration (статические, глобальные).
Для всего остального должен быть в том или ином виде написан инициализирующий код.
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
28.06.2019, 09:18  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Только поля встреонных типов, или пользовательских типов без соответствующего конструктора.
Спасибо за ответ,
но для меня пока терминология сложная(пользовательские и встроенные типы)...
Например, Массив и Структура будет содержать мусор, если они локальные ? А глобальные Массив и Структура инициируются нулями?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
28.06.2019, 09:36
Цитата Сообщение от Artem_Pv Посмотреть сообщение
Массив и Структура будет содержать мусор, если они локальные ?
Да, если не было явной инициализации или инициализации в конструкторе (в случае структуры).

Цитата Сообщение от Artem_Pv Посмотреть сообщение
А глобальные Массив и Структура инициируются нулями?
Грубо говоря, да.
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
28.06.2019, 09:44  [ТС]
Спасибо за ссылки.
См. ниже, правильно ли я заполняю "шпаргалку":

>> 1) Локальные переменные функции ?
Мусор при старте

>>2) Статические переменные в функции, или в файле ?
Нули при старте

>>3) Поля класса ?
Мусор

>>4) Статические Поля класса ?
Нули

>>5) Глобальные переменные ?
Нули

>>6) Структуры/Массивы как переменные файла ?
Нули т.к. глобальные

>>7) Структуры/Массивы как поля класса ?
Мусор ... ?

>>8) Структуры/Массивы как локальные переменные функции ?
Мусор

>>9) Память выделенная через new ?
Мусор

>>11) ... что еще записать в шпаргалку ?[/quote]
Инициализация поля типа Класс с конструктором ... ?

А в С++ у Структур бывает конструктор?

еще, не уверен в п.7
0
 Аватар для 7533620
163 / 70 / 39
Регистрация: 28.05.2019
Сообщений: 242
28.06.2019, 09:48
Цитата Сообщение от Artem_Pv Посмотреть сообщение
Массив и Структура будет содержать мусор, если они локальные
C++
1
2
3
4
5
6
7
8
9
10
11
12
int arr1[5]; // default initialization, мусор
int arr2[5]{}; // aggregate initialization, не мусор
 
struct S { int x; };
 
S s1; // default initialization -> default constructor, мусор
S s2{ }; // aggregate initialization, не мусор
 
class C { private: int x; };
 
C c1; // default initialization -> default constructor, мусор
C c2{ }; // value initialization -> default constructor, мусор
Цитата Сообщение от Artem_Pv Посмотреть сообщение
А глобальные Массив и Структура инициируются
C++
1
2
3
4
5
6
7
8
9
10
int a; // zero initialization, не мусор
int arr[5]; // zero initialization, не мусор
 
struct S { int x; };
 
S s1; // zero initialization -> default initialization, не мусор
 
class C { private: int x; };
 
C c1{ }; // zero initialization -> default initialization, не мусор
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
28.06.2019, 09:51
Лучший ответ Сообщение было отмечено Artem_Pv как решение

Решение

Цитата Сообщение от Artem_Pv Посмотреть сообщение
См. ниже я правильно ли я заполняю "шпаргалку":
Если предполагать, поля могут быть пользовательскими типами, и что конструкторы в этих случаях никто не определял, то да.
Вообще конечно дело ваше, но лично я считаю подобные шпаргалки большим злом. Вы забиваете себе голову частностями (при этом со временем о том, что это частности, забудется и вы начнете делать ошибки), вместо того, чтобы уяснить общий принцип и делать на его основе выводы в той или иной ситуации.
Например у вас написано, что локальные переменные содержат мусор, это верно, но только в случае, если это переменные базовых типов или переменные класса, у которого не был описан конструктор с инициализацией полей. Либо явного конструктора не было, но все поля класса описываются типами, у которых он есть. Пытаясь записать это все в шапргалку, вы просто увеличите ее до неприличных размеров, а если не запишете - она не будет отражать реальность, что в итоге приведет к вашим ошибкам.

Цитата Сообщение от Artem_Pv Посмотреть сообщение
А у Структур бывает конструктор?
Да.
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
28.06.2019, 09:56  [ТС]
C++
1
int arr2[5]{}; // aggregate initialization, не мусор
Извинясь, забыл уточнить, что мой вопрос по классическому C++.
Т.к. в современные диалекты(++17) я пока не готов вникать.

Жаль, я надеялся, что с инициализацией есть простое правило
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
28.06.2019, 10:00
Лучший ответ Сообщение было отмечено Artem_Pv как решение

Решение

Цитата Сообщение от Artem_Pv Посмотреть сообщение
что с инициализацией есть простое правило
Оно простое и есть. Все нестатические, неглобальные объекты не инициализируются без соответствующих действий программиста (т.е. нужно либо писать явно выражение инициализации, либо определять конструктор, который это делает). Все, больше пока ничего знать не надо.
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
28.06.2019, 10:12  [ТС]
Всем спасибо, последний вопрос.
Как себя ведет локальная(не статическая) переменная(в функции) если в объявлении ее инициализировали:

C++
1
2
3
4
5
6
void func1()
{
  int my_local_var = 314;
  
  my_local_var++;
}
При втором заходе в функцию чему она равна?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
28.06.2019, 10:19
Artem_Pv, эта переменная локальная, она уничтожается по выходу из области видимости функции. Т.е. при новом вызове она снова будет создана и проинициализирована, затем инкрементирована.
1
1 / 1 / 0
Регистрация: 31.03.2019
Сообщений: 144
28.06.2019, 10:49  [ТС]
вот что я искал:
https://en.cppreference.com/w/... ialization
за наводку, спасибо.

P.S.
<Value/Zero/Default>-initialization ; в C++ все по полочкам разложено. Wow ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2019, 10:49
Помогаю со студенческими работами здесь

Типы переменных, полученные при декомпиляции кода в исходник на C
Всем привет, начал заниматься рефракторингом. С помощью IDA PRO 32 декомпилировал файл .exe и получил код на языке С. int sub_40110B() ...

Как мне сделать так, чтобы данный текстовый файл был открыт один раз при запуске программы и закрыт при закрытии программы?
Привет! Возник следующий вопрос. Программа состоит из основного окна Form1 и нескольких Unit. По таймеру в Form1 запускается один из...

Обнуление переменных при запуске
Где лучше записывать что-то типа &quot;some_bool = false&quot; при запуске, в: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ...

При запуске выдает какие-то иероглифы
Запускаю в ASMTool. Выдает такие иероглифы. Подскажите в чем может быть проблема? Заранее спасибо. model tiny codeseg org 100h...

Какие параметры получает х64 при запуске?
какие параметры получает х64 при запуске? где они? как их извлечь?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru