Посмотрите на этот код:
#include <iostream>
using namespace std;
int main()
{
const char* str0 = "Watchmen";
const char* str1 = "Watchmen";
char* str2 = "Watchmen";
char* str3 = "Watchmen";
cerr << static_cast<void*>( const_cast<char*>( str0 ) ) << endl;
cerr << static_cast<void*>( const_cast<char*>( str1 ) ) << endl;
cerr << static_cast<void*>( str2 ) << endl;
cerr << static_cast<void*>( str3 ) << endl;
return 0;
}
Что производит такой вывод:
0x443000
0x443000
0x443000
0x443000
Это было в компиляторе g++ под Cygwin. Указатели указывают на одно и то же местоположение, даже если оптимизация не включена (-O0
).
Неужели компилятор всегда так оптимизирует, что ищет все строковые константы, чтобы убедиться, что они равны? Можно ли полагаться на это поведение?