看一下这段代码:
#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
这是在运行于Cygwin下的g++编译器上。即使没有打开任何优化选项(-O0
),指针仍然指向相同的位置。
编译器是否总是会优化到搜索所有字符串常量以查看它们是否相等?能否依赖这种行为?