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

Является ли cin >> x; примером инициализации переменной?

15.02.2025, 15:22. Показов 3004. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Является ли cin >> x; примером инициализации переменной? И правильно ли я понимаю, что на данные вопросы правильным ответом тут является только 1 вариант?

В какой строке приведен пример инициализации переменной?
C++
1
2
3
4
5
 int a=3;
 double x;
 cin>>x;
 cout<<x;
 if(x>1)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2025, 15:22
Ответы с готовыми решениями:

Инициализация переменных - некорректно работает пример из книги
Взял задачку из книги Г.Шилда. Должно показывать 1 3 6 10 15. Но у меня выдает 1 2 3 4 5. Набрал всё точь в точь с книги, в чём проблема,...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые мне не понятны, и прошу объяснить, как...

Задать каждому полю переменной value типа Т произвольное начальное значение в строке инициализации переменной
Дан следующий тип данных: struct T { double* p; int* c; struct _T { int a; int b; }; int a; int b; }; Задайте каждому полю переменной...

16
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6089 / 2780 / 1037
Регистрация: 01.06.2021
Сообщений: 10,138
15.02.2025, 16:03
Лучший ответ Сообщение было отмечено nkrdd как решение

Решение

Цитата Сообщение от nkrdd Посмотреть сообщение
int a=3;
вот это инициализация (объявление + присваивание)

Цитата Сообщение от nkrdd Посмотреть сообщение
Является ли cin >> x; примером инициализации переменной?
нет, ибо тут нет объявления - неотъемлемой части инициализации

Цитата Сообщение от nkrdd Посмотреть сообщение
И правильно ли я понимаю, что на данные вопросы правильным ответом тут является только 1 вариант?
да.
0
фрилансер
 Аватар для Алексей1153
6431 / 5626 / 1126
Регистрация: 11.10.2019
Сообщений: 14,967
15.02.2025, 20:00
nkrdd, в первой строке есть инициализация переменной a.

во второй строке нет инициализации x.

Инициализация x могла произойти в третьей строке, если поток не находился в состоянии ошибки.

Если он находился в состоянии ошибки, то x останется неинициализированным, и в 4 и 5 строках будет UB

Добавлено через 6 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
объявлени(е) - неотъемлем(ая) част(ь) инициализации
ну, это спорное утверждение

вот объявление переменной. Даже три. В этих объявлениях нельзя сделать инициализацию
C++
1
2
3
extern int x;
extern int x;
extern int x;
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6089 / 2780 / 1037
Регистрация: 01.06.2021
Сообщений: 10,138
15.02.2025, 20:24
Цитата Сообщение от Алексей1153 Посмотреть сообщение
ну, это спорное утверждение
и чем оно спорное?
Цитата Сообщение от Алексей1153 Посмотреть сообщение
вот объявление переменной. Даже три. В этих объявлениях нельзя сделать инициализацию
и каким образом эти примеры показывают, что я не прав?

"объявление - неотъемлемая часть инициализации" никак не означает, что нельзя объявлять без присваивания. А это всего лишь означает, что не существует инициализации без объявления. Это же банальная логика.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
15.02.2025, 20:30
Цитата Сообщение от Алексей1153 Посмотреть сообщение
вот объявление переменной. Даже три. В этих объявлениях нельзя сделать инициализацию
C++
1
2
3
extern int x;
extern int x;
extern int x;
Что значит "нельзя"? Вы ее не сделали. Можно было сделать

C++
1
2
3
extern int x;
extern int x;
extern int x = 123;
Последнее объявление при этом станет еще и определением, но это уже сбоку припеку.

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
вот это инициализация (объявление + присваивание)
Инициализация никак не связана с присваиванием.
1
фрилансер
 Аватар для Алексей1153
6431 / 5626 / 1126
Регистрация: 11.10.2019
Сообщений: 14,967
15.02.2025, 20:32
TheCalligrapher, а, ну разве что так. У меня ещё определение было, поэтому компилятор ругался

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
extern int x;
extern int x;
extern int x;
 
int main()
{
    x=1;
 
    std::cout<<x;
}
 
int x;
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6089 / 2780 / 1037
Регистрация: 01.06.2021
Сообщений: 10,138
15.02.2025, 20:49
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Инициализация никак не связана с присваиванием.
я слово присваивание использовал в общем смысле, а не как assignment. Если переменная получила новое значение, то как по мне, можно говорить, что переменной "присвоили". Гнаться за словами это не по моей части. Если хочешь словоблудством заниматься, то вызывай еву и спорь с ней. Кстати, во многих обучающих книгах, так и объясняют, что инициализация это одновременное объявление и присваивание. ТС тоже новичок, поэтому я доступно ему объяснил. Я даже не уверен, что ТС сможет перечислить все виды инициализации...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
15.02.2025, 20:54
Цитата Сообщение от Royal_X Посмотреть сообщение
Кстати, во многих обучающих книгах, так и объясняют, что инициализация это одновременное объявление и присваивание.
Такое упрощение допустимо в С, но не в С++. То есть нет, ника каких "обучающих книгах" так не объясняют. Просто потому, что подобное писалово, если таковое появится, никто "обучающей книгой" не назовет.

Цитата Сообщение от Royal_X Посмотреть сообщение
ТС тоже новичок, поэтому я доступно ему объяснил.
Но вся суть вопроса ТС как раз сфокусирована на том, что инициализация - это НЕ присваивание или что-то в этом роде.

Цитата Сообщение от Алексей1153 Посмотреть сообщение
У меня ещё определение было, поэтому компилятор ругался
Ошибка множественного определения - это совсем другая ошибка, прямой связи с вопросами инициализации не имеющая.
0
 Аватар для DeCrinal
64 / 40 / 31
Регистрация: 15.04.2017
Сообщений: 176
16.02.2025, 14:45
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
что инициализация - это НЕ присваивание или что-то в этом роде
Разве инициализация - не первое "присваивание" условно? Некоторые классы зачастую даже определенный метод имеют (aka init(), initialize() и т.п.), если, например, конструктор-аналог тяжелый или долго выполняться может. Правда, не предполагается потом init() использовать, т.е. в контексте классов - это не совсем присваивание, но для обычных переменных вроде логично.
0
0 / 0 / 0
Регистрация: 15.02.2025
Сообщений: 9
17.02.2025, 19:26  [ТС]
Я задал этот вопрос, потому что не знаю на него однозначного ответа и такая штука была на зачете в унике у меня, мне нужен ответ, который напрямую идет из документации c++
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
18.02.2025, 05:41
Цитата Сообщение от nkrdd Посмотреть сообщение
мне нужен ответ, который напрямую идет из документации c++
Ответ, который "напрямую идет из документации c++" говорит, что инициализация - это процесс, неотделимый от процесса создания объекта. Все, что связано с инициализацией (а именно: инициализаторы), указывается в объявлении переменной. После того, как объявление переменной уже выполнено, инициализация закончена. Все, поезд ушел. Все, что делается с переменной после этого - это уже не инициализация.

В вашем примере инициализация выполняется здесь

C++
1
int a = 3;
Для переменной x инициализации не делается вообще. cin >> x - это не инициализация.

Фактически все это повторяет ответ Royal_X, с той только оговоркой, что инициализация - это не присваивание. Присваивание - это процесс замещения старого значения новым значением. Инициализация - это процесс создания самого первого значения объекта, когда никакого "старого" значения еще не сущестовало.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
18.02.2025, 12:14
Цитата Сообщение от nkrdd Посмотреть сообщение
В какой строке приведен пример инициализации переменной?
Вот за вот это вот крючкотворчество и доколупывание до терминов и собственного их толкования бить очень хочется преподов.
0
1182 / 458 / 68
Регистрация: 22.09.2023
Сообщений: 1,380
18.02.2025, 12:32
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Для переменной x инициализации не делается вообще.
А разве здесь нельзя сделать оговорку "если x - не глобальная переменная"? Ведь при объявлении глобальной переменной она по-умолчанию инициализируется нулем (вариант 2).
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6089 / 2780 / 1037
Регистрация: 01.06.2021
Сообщений: 10,138
18.02.2025, 12:34
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Присваивание - это процесс замещения старого значения новым значением. Инициализация - это процесс создания самого первого значения объекта, когда никакого "старого" значения еще не сущестовало.
В целом, я вас понимаю. Но чисто, чтобы пофилософствовать, выдвину идею, что старое значение существовало и им был мусор.
Например, возьмем int x = 42;
Что тут происходит:
C++
1
mov     DWORD PTR [rbp-4], 42
грубо говоря, тут происходит именно запись в память по адресу регистра rbp минус 4 байта (DWORD) от вершины стека. Если мы запросим по этому адресу в стеке, то все равно увидим, что там был какой-то мусор. Соответственно, при инициализации замещается старое мусорное значение новым значением, что является присваиванием.
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
18.02.2025, 12:57
В двух словах (по-старинке) и даже вне контекста конкретного ЯП объясняется так:
Code
1
2
3
4
[TYPE] x; // объявление переменной
x = <value>; // определение переменной
 
[TYPE] y = <value>; // объявление + определение -> инициализация
С поправкой на ЯП можно говорить о различных способах инициализации переменных.

Добавлено через 8 минут
Royal_X, ну это как-то, непонятно в чем вопрос, разумеется что значение переменной не может просто материализоваться где-то в памяти, оно должно быть туда записано, если уж "философствовать", то за слова надо цепляться:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Присваивание - это процесс замещения старого значения новым значением. Инициализация - это процесс создания самого первого значения объекта, когда никакого "старого" значения еще не сущестовало
формально, с точки зрения языка у непроинициализированной переменной никакого значения и не существовало, собственно именно это и приводит к UB - попытка воспользоваться тем (значением переменной), чего попросту нет. Ну а далее и получается, что после объявления без инциализации - значения нет, а значит создание "самого первого значения объекта" произойдет при следующим за объявлением присваивании, которое станет его инициализацией.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
18.02.2025, 13:01
Цитата Сообщение от Royal_X Посмотреть сообщение
Но чисто, чтобы пофилософствовать
ассемблерный код может быть иным для другой платформы, например аппаратная прошивка начального значения на заводе. ну есть же EPROM: оно и значение сразу имеет при включении, и изменять можно. Может же быть на не некой платформе синтаксис привязки "просто переменных" к адресам в памяти EPROM
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6089 / 2780 / 1037
Регистрация: 01.06.2021
Сообщений: 10,138
18.02.2025, 13:13
KSergey9, не ну ты понял, я полагаю, о какой архитектуре речь, если я упоминаю регистр rbp. Это был просто пример. Суть моих идей в том, что все равно, даже при инициализации мы присваиваем "старому" значению "новое" значение. Какова природа старого значения и устройства (аппаратная прошивка, какой регистр и прочее) или само значение - это все не важно. Но факт в том, что при инициализации мы же не можем просто новое значение записать в "некуда". Для записи нового значения нужна память. А память она же не в вакууме. Естественно, она что-то дефолтно хранит, раз она существует во Вселенной. Она может хранить мусор, или ноли - это тоже не важно.
Цитата Сообщение от Annemesski Посмотреть сообщение
с точки зрения языка у непроинициализированной переменной никакого значения и не существовало
это уже другое дело.
Если в цитате
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Инициализация - это процесс создания самого первого значения объекта, когда никакого "старого" значения еще не сущестовало.
под "никаким" подразумевается "никакое с точки зрения языка", а не с точки зрения истины, то тогда у меня вопросов нет. Потому что, если прописали в стандарте, что значения нет, то значит его и нет, даже если оно фактически есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2025, 13:13
Помогаю со студенческими работами здесь

Что из перечисленного является примером базы данных?
Перепробовал уже все, не могу найти, помогите, пожалуйста

алгоритм сложения двух чисел является примером алгоритма
:gcray2: помогитее

Является ли такое решение задачи примером динамического программирования?
Задали такую задачку: У вас есть несколько камней известного веса W1, …, Wn. Напишите программу, которая распределит камни в две кучи...

Строки. Является ли введенная строка примером, складывающим два однозначных числа, каждое из которых меньше 5
Запросите у пользователя строку, состоящую из 5 символов и проверьте, является ли она примером, складывающим два однозначных числа, каждое...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод. Не пойму предназначение cin.get()...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru