Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666

Что значит "изменить" в C++?

23.04.2018, 18:37. Показов 4576. Ответов 76
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одной из тем было написано
Цитата Сообщение от Croessmah Посмотреть сообщение
Objects of array types cannot be modified
Чтобы не оффтопить там (т.к. там вопрос про устройство массивов) и не мучать тему 2014-го года, создам новую.
Как понимать сие утверждение?
Возьмём код
C++
1
2
int a[2] = { 0, 2, };
a[1] = 1;
По-моему, массив a после a[1] = 1 изменился.
Получается, "Objects of array types cannot be modified" — неправда? Или всё же массив a не изменился?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2018, 18:37
Ответы с готовыми решениями:

Sleep(8000) - что значит? На что можно заменить в борланд с++?
Не распознаёт Sleep(8000) . Если за комментировать пишет что f заданно но не используется. Как исправить? ...

Что значит Handle hf? Что в эту функцию нужно передавать
мне нужно создать функцию Node * ReadNode(HANDLE hf); (Node это структура) Так вот вопрос в том что значит Handle hf? Что в эту функцию...

Неправильный тип параметров подпрограммы-- что это значит и как изменить?
Выдает ошибку:" Неправильный тип параметров подпрограммы" - как это исправить? Разработать модуль, в котором размещены подпрограммы,...

76
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 22:52  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от QuakerRUS Посмотреть сообщение
так литералы и массивы разные вещи
Цитата Сообщение от http://eel.is/c++draft/lex.string#8.sentence-2
A narrow string literal has type “array of n const char”
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Поменяйте литерал 1
Как?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.04.2018, 23:28
Цитата Сообщение от QuakerRUS Посмотреть сообщение
что имели ввиду те, кто ее написал
Это типичный бунт личности против осмысленной нервной деятельности. То есть, понять то можно. Логически объяснить, - гораздо сложнее.
1
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 23:39
rat0r, например так.

C++
1
2
3
4
5
char* ptr = (char*)"123";
char* ptr2 = (char*)"123";
//ptr[0] = '3';
cout << (void*)ptr << endl;
cout << (void*)ptr2 << endl;
Правда на VS2017 адрес литерала я получить смог, а вот редактировать не дает. Может на других компиляторах пропустит и будет UB.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 23:44  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
например так.
Но ведь это не изменение литерала (который тут массив), а измение его элемента. Мы вроде выяснили, что массивы менять нельзя в принципе (т.к. им нельзя присваивать), а тут вдруг должно быть UB при изменении строкового литерала (который массив).
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
23.04.2018, 23:52
rat0r, а вот в этом контексте думаю имеется ввиду изменение именно значения литерала.

Добавлено через 5 минут
rat0r, и вроде как нигде не говорится, что строковой литерал - это массив. Можно к примеру создать строковой массив и иницализировать его строковым литералом, тогда это будет массив.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
23.04.2018, 23:55  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
и вроде как нигде не говорится, что строковой литерал - это массив
Я же скинул цитату пару сообщений назад http://eel.is/c++draft/lex.string#8.sentence-2
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
24.04.2018, 01:14
rat0r, ага, значит все же массив. Пытаюсь переварить всю фразу, но что то тяжко пока.

Evaluating a string-literal results in a string literal object with static storage duration, initialized from
the given characters as specified above. Whether all string literals are distinct (that is, are stored in
nonoverlapping objects) and whether successive evaluations of a string-literal yield the same or a different
object is unspecified. [ Note: The effect of attempting to modify a string literal is undefined.
Добавлено через 53 минуты
Час переводил этот текст, как то заумно написано...

Whether all string literals are distinct (that is, are stored in nonoverlapping objects) and whether successive evaluations of a string-literal yield the same or a different object is unspecified.
Если я правильно понял, то здесь как раз и говорится о том, что один и тот же объект может указывать на литерал, а точнее это не определено (этим стандартом как я понимаю). Что думаю как раз подтверждает возможность UB, если отредактировать такой литерал. Думаю имеется ввиду именно редактирование значения литерала.
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
24.04.2018, 04:25
Цитата:
Цитата Сообщение от 8.3.4.5
[ Note: Conversions affecting expressions of array type are described in 4.2. Objects of array types cannot be modified, see 3.10. —end note ]
Вопрос:
Цитата Сообщение от rat0r Посмотреть сообщение
Как понимать сие утверждение?
Возьмём код
C++
1
int a[2] = { 0, 2, };
Ответ:
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
a = b; //error
~~~~ ~~~~ ~~~~ ~~~~

Теперь полемика.
Цитата Сообщение от rat0r Посмотреть сообщение
Ну и весь массив является объектом, в том числе его элементы.
Согласен. В дальнейшем будем отталкиваться от этой вырезки из Стандарта:
Цитата Сообщение от 8.3.4.1
An object of array type contains a contiguously allocated non-empty set of N subobjects of type T.
\

> Рассматриваем Вашу версию:
Стандарт врет, ибо изменяя элемент массива, — изменяется и сам массив.

> Рассмотрим иную версию:
Массив — это объект, который содержит в себе подобъекты ( элементы массива ). Изменяя подобъект — мы изменяем подобъект, а массив остается неизменным. Имеется в виду, что он все так же остался той же размерности, все так же содержит тот самый подобъект, пусть и измененный ( его это не волнует ). Мутно написано, но если пораскинуть мозгами, то смысл уловить можно. Изменить массив здесь, наверное, будет — изменить его размерность / тип подобъектов.
~~~~ ~~~~ ~~~~ ~~~~

На этом все. Не нужно строить мудреных теорий. В том контексте подразумевалось то, о чем было сказано во #2 посте мистером Croessmah'ом. Если хочется побеседовать, тогда стоит заглянуть сюда: ( Непризнанные теории, гипотезы ).
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.04.2018, 08:03
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Стандарт врет, ибо изменяя элемент массива, — изменяется и сам массив.
Скорее не врёт, а несёт чушь. Это менее болезненно для стандарта, но тем не менее.
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Массив — это объект, который содержит в себе подобъекты ( элементы массива ). Изменяя подобъект — мы изменяем подобъект, а массив остается неизменным.
А есть объекты (типы объектов, обекты которых ... и т.д. ...) изменяя содержимое которых можно изменить сам объект в данном контексте?
Тогда вот такая фраза достойна высокохудожественного и глубокого отображения огромными буквами на самом большом и твёрдом камне:
Байт неизменен и вечен, но нули и единицы в нём можно переписывать столько раз, сколько вздумается!
Хотя понять это можно. Это не полный маразм, потому что маразм, зто когда не только конец фразы конфликтует с её началом. Это когда и середина конфликтут с обоими соседями.
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Не нужно строить мудреных теорий.
Почему? Когда живой ум наскакивает на такое, он вправе удивиться.
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Если хочется побеседовать,
Сюда приходят побеседовать. Разделы определяют тематику. Что не так?
1
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
24.04.2018, 15:27
Цитата Сообщение от IGPIGP Посмотреть сообщение
Скорее не врёт, а несёт чушь. Это менее болезненно для стандарта, но тем не менее.
Громкое заявление

Цитата Сообщение от IGPIGP Посмотреть сообщение
А есть объекты изменяя содержимое которых можно изменить сам объект в данном контексте?
Сложно что-то ответить на это, так как в Стандарте я не нашел точного определения термина to modify для объектов. И хотя слово говорит само за себя, в случае с объектом массив, согласен, могли сделать некое уточнение.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Байт неизменен и вечен, но нули и единицы в нём можно переписывать столько раз, сколько вздумается!
Согласен, Байт именно такой

Цитата Сообщение от IGPIGP Посмотреть сообщение
Почему? Когда живой ум наскакивает на такое, он вправе удивиться.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Сюда приходят побеседовать. Разделы определяют тематику. Что не так?
Не то, что бы я с Вами не согласен, даже наоборот. Просто человек этот, rat0r, очень подозрительный тип , и мне показалось, что он просто хочет позаниматься диффамацией.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.04.2018, 19:29
То есть без многоуважаемого мною Байта нам не разобраться? Согласен. Он классный.
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Просто человек
Этот человек не подал никаких признаков для подозрений. Тему поднял не новую, но достаточно приличную, чтобы поговорить. О данном вопросе, кстати, можно услышать и от опытных людей, довольно странные суждения.
Единственное, что мне не доставило радости - некоторое упрямство и не желание вдумываться в слова. Хотя полемика была скоротечна и многое простительно. Но хорошая тема решает всё. Думаю, её не зря перенесли в С++. То есть, непризнанных теорий тут не видно. Captain Maxee, ждём Байта.
1
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.04.2018, 19:34
Простой вопрос. Есть шкаф. В нем лежат трусы. Если одни трусы поменять на другие, считается ли это изменением шкафа?
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.04.2018, 19:44
Цитата Сообщение от Croessmah Посмотреть сообщение
Простая истина.
Простые истины к сожалению не всем по силам.
Цитата Сообщение от Croessmah Посмотреть сообщение
Есть шкаф.
Вот такая переменная:
C++
1
int a(123);
Цитата Сообщение от Croessmah Посмотреть сообщение
В нем лежат трусы.
Трусы это - рав-два-три.
Цитата Сообщение от Croessmah Посмотреть сообщение
Если одни трусы поменять на другие,
вот так вот:
C++
1
a=345;
Цитата Сообщение от Croessmah Посмотреть сообщение
считается ли это изменением шкафа
Считается ли это изменением переменной a (целого типа)?
А Вы говорите
Цитата Сообщение от Croessmah Посмотреть сообщение
Простая истина.
Тут есть люди которые станут доказывать, что тип инт не изменился. Чуть чуть изменилась, память/компьютер/вселенная... Но объект int a; остался неизменен!
Цитата Сообщение от Croessmah Посмотреть сообщение
Простая истина.
? - Конечно.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
24.04.2018, 19:46
Croessmah, нет, если трусы не относятся к объекту шкафа. А тут трусы входят в объект шкаф, соответственно получаем объект "шкаф с трусами". Трусы убрали и заменили носками, изменился ли объект шкаф с трусами?

An object of array type contains a contiguously allocated non-empty set of N subobjects of type T.
Если это принять за истину, то следующие выражения вызывает когнитивный диссонанс у ТС.

Objects of array types cannot be modified
A narrow string literal has type “array of n const char”
The effect of attempting to modify a string literal is undefined
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
24.04.2018, 19:48
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вот такая переменная
Это не шкаф, это трусы. Шкаф - массив с трусами.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Трусы это - рав-два-три.
Раз-два-три - это черные, синие, зеленые.
Цитата Сообщение от IGPIGP Посмотреть сообщение
целого типа
Но вообще, причем здесь переменные? Я спрашивал про шкаф и трусы.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.04.2018, 20:21
Цитата Сообщение от Croessmah Посмотреть сообщение
Я спрашивал про шкаф и трусы.
В шкафу - тролль одетый в трусы? Или трусы надеты на тролля сидящего в шкафу? Читать стандарт в одних трусах (нельзя же так сильно думать о работе ! ) это экстрим. имхо. Особенно, учитывая тот факт, что в шкафу темно и мало кислорода. Впрочем мозг тролля не нуждается в кислороде... Трудный вопрос.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
24.04.2018, 21:27
Captain Maxee,
Цитата Сообщение от IGPIGP Посмотреть сообщение
ждём Байта.
Ребята! Хоть мне и чрезвычайно лестно ваше мнение, и слежу за вашей полемикой с неослабевающим интересом, однако сказать что-то ценное я не в силах. Возможно, я слишком поздно увидел этот топик, когда все, что можно сказать, уже было сказано, в том числе и уважаемым Croessmah, с его блистательными примерами.
Добавить могу только то, что хотя формализация понятий дело увлекательное и полезное, для такого высокого уровня, каковой был здесь достигнут, требуется специфический склад ума, которого я лишен.
Всем удачи и хорошего настроения!

Добавлено через 10 минут
Кстати, вот чисто практический аспект.
C
1
2
3
4
typedef struct { int trus[3]; } SKAF;
SKAF s1, s2;
s1 = s2; // вполне законно = memcpy(&s1, s2, sizeof(SKAF));
s1.rtus = s2.trus;  // Запрещено
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.04.2018, 21:49
Цитата Сообщение от Байт Посмотреть сообщение
s1.rtus = s2.trus; // Запрещено
Трусы нельзя приравнять ни к чему. Даже друг к другу нельзя. Но ни кто не мешает их стирать. Хотя в скафандре можно и не стирать. Особенно имея комплект из трёх пар. Три пары трусов, это сколько кстати? Истый математик всегда пойдёт по пути абстракции и скажет что 3х2=6. Он будет прав. Но трусов доверить ему всё-таки нельзя.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
24.04.2018, 21:49  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Простой вопрос. Есть шкаф. В нем лежат трусы. Если одни трусы поменять на другие, считается ли это изменением шкафа?
Странная аналогия.

Есть башня из кубиков. Пусть они были все синие. Один синий кубик поменяли на красный. Считается ли это изменением башни? Или перед нами такая же башня, как до изменения?
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.04.2018, 22:00
Цитата Сообщение от rat0r Посмотреть сообщение
Считается ли это изменением башни?
Там в башне шкаф. В нём скафандр, в котором три пары трусов. Видите тролля? И я не вижу, - а он есть!
Башня из кубиков - шаткая доказательная база конструкция. Тут такие аргументы просте едят и всё.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2018, 22:00

Что значит public string T и все что дальше в приведенном коде?
class String { private string A; public String() { } public string T { ...

6 cores are activated что это значит и что с этим делать?
Доброго времени суток уважаемые форумчане. Возникла вот такая незадача с компом. Пишет 6 cores are activated при загрузке (в том же меню...

Написать что значит каждая строчка и за что она отвечает
Program ABC const n = 5; var a: array of integer; i, S, p: integer; begin s := 0; p := 1; for i := 1 to n do

Что значит исследовать сходимость метода (Якоби) и что за график нужно построить
Здравствуйте, вопрос в следуещем. В лабе по ЧМ нужно решить СЛАУ методом Якоби(что я сделал) и исследовать сходимость метода, построить...

Что значит это условие? Немогу расчехлить на что тут идёт проверка!!!
НЕмогу понять на что идет проверка. if monthof(DateTimePicker1.date+33)&lt;9 then radiobutton3.Checked:=true else ...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru