Страницы

Поиск по вопросам

пятница, 9 ноября 2018 г.

Почему в примере из книги true

const char* p = "Heraclitus" const char* q = "Heraclitus" void g () { if(p==q) cout<<"one!
"; //результат зависит от конкретной реализации }
Б. Страуструп
Суть в том что адреса разные, а пишут вот что:
Обратите внимание на то, что для указателей операция == сравнивает адреса (значения указателей), а не адресуемые ими величины.
Если сравниваются адреса, то как может быть true, если при компиляции явно разные адреса?


Ответ

Компилятору разрешается (но не требуется) в качестве оптимизации хранить одинаковые строковые литералы* в одном и том же месте. Если компилятор это делает, то адреса будут одинаковые. Если не делает - разные.

*Литерал - безымянная константа в исходном коде. x, 'y', 123, "hello" - все это литералы. "hello" - строковый литерал.

Комментариев нет:

Отправить комментарий