Здравствуйте, 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]
Ключевое я выделил. Как видишь, стандарт не запрещает разным строковым литералам быть ассоциированными с одним и тем же объектом, но и не гарантирует, что это будет именно так. То есть, компилятор может решать этот вопрос по своему усмотрению. Так что, то, что они совпали в данном конкректном случае, можешь считать счастливой случайностью.