Информация об изменениях

Сообщение Re: Про идентичность const от 22.01.2025 19:26

Изменено 22.01.2025 19:27 rg45

Re: Про идентичность const
Здравствуйте, 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]


Как видишь, никто нам не гарантирует, что значения str1 и str2 будут совпадать. То, что они совпали в данном случае, можешь считать счастливой случайностью.
Re: Про идентичность const
Здравствуйте, 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]


Ключевое я выделил. Как видишь, никто нам не гарантирует, что значения str1 и str2 будут совпадать. То, что они совпали в данном случае, можешь считать счастливой случайностью.