Страницы

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

пятница, 20 декабря 2019 г.

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

#cpp


const char* p = "Heraclitus" 
const char* q = "Heraclitus" 
void g ()
{
    if(p==q) cout<<"one! \n"; //результат зависит от конкретной реализации
}


Б. Страуструп

Суть в том что адреса разные, а пишут вот что:


  Обратите внимание на то, что для указателей операция == сравнивает
  адреса (значения указателей), а не адресуемые ими величины.


Если сравниваются адреса, то как может быть true, если при компиляции явно разные адреса?
    


Ответы

Ответ 1



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

Ответ 2



У вас в коде нет адресов, а только указатели. Значение равенства будет true, т к оба указателя указывают на одно и то же место.

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

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