Re: Про идентичность const
От: rg45 СССР  
Дата: 22.01.25 19:26
Оценка:
Здравствуйте, Shmj, Вы писали:

S>— для вас очевидно что str1 и str2 имеют единый адрес? Разумно?


После того, как мы разобрались
Автор: rg45
Дата: 22.01.25
, что адреса у str1 и str2 все же разные, давай теперь разберёмся, что же у них одинаковое и почему.

Как не трудно увидеть из объявления str1 и str2 — это указатели. И как и все указатели, они обладают присущей всем указателям двойственностью — есть собственно объект указателя и у этого указателя есть значение — адрес какого-то объекта, располагающегося где-то в памяти. Так вот, в случае str1 и str2 — это два разных объекта с разными адресами, но с одинаковыми значениями. А почему же значения этих указателей оказались одинаковыми? Чтобы ответить на этот вопрос, нужно заглянуть в стандарт языка С++, в раздел String literals:

https://timsong-cpp.github.io/cppwp/lex.string#note-4

9 Evaluating a string-literal results in a string literal object with static storage duration ([basic.stc]).

[Note 4: String literal objects are potentially non-unique ([intro.object]). Whether successive evaluations of a string-literal yield the same or a different object is unspecified.
— end note]


Ключевое я выделил. Как видишь, стандарт не запрещает разным строковым литералам быть ассоциированными с одним и тем же объектом, но и не гарантирует, что это будет именно так. То есть, компилятор может решать этот вопрос по своему усмотрению. Так что, то, что они совпали в данном конкректном случае, можешь считать счастливой случайностью.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 22.01.2025 19:41 rg45 . Предыдущая версия . Еще …
Отредактировано 22.01.2025 19:27 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.