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

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

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

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

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

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

Answer 1

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

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

Answer 2

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

READ ALSO
Как в Qt создать кастомный элемент для QListView\QListWidget

Как в Qt создать кастомный элемент для QListView\QListWidget

Необходимо создать список виджетов (большой), в каждом виджете списка имеются кнопки\чекбоксы и тд

160
Посчитать кол-во слов в строке из файла

Посчитать кол-во слов в строке из файла

Есть текстовый файл, в котором записано несколько строкСлова разделены пробелами

205
Считывание из файла С++

Считывание из файла С++

После считывания из файла, у меня считывается строка с символом перехода на новую строку, в итоге при попытке узнать длину строки выводит...

199
С какой точки считается margin-left?

С какой точки считается margin-left?

С какого угла? Или с середины?

168