看看这段代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这会产生如下输出:
0x443000
0x443000
0x443000
0x443000
Run Code Online (Sandbox Code Playgroud)
这是在Cygwin下运行的g ++编译器.即使没有打开优化(),指针也指向相同的位置.-O0
编译器是否总是进行优化以至于它会搜索所有字符串常量以查看它们是否相等?可以依赖这种行为吗?