【发布时间】:2010-10-15 23:11:45
【问题描述】:
看看这段代码:
#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)。
编译器是否总是优化得如此之多,以至于它会搜索所有字符串常量以查看它们是否相等?可以依赖这种行为吗?
【问题讨论】:
-
记住字符串常量是只读的。因此优化是完全有效的。如果您想要可编辑的字符串,则需要将它们声明为数组而不是指针。然后你会得到不同的地址。
标签: c++ c optimization string constants