big*_*g-z 6 c++ constants string-comparison
我的程序中有几个相同的字符串常量:
const char* Ok()
{
return "Ok";
}
int main()
{
const char* ok = "Ok";
}
Run Code Online (Sandbox Code Playgroud)
是否保证它们具有相同的地址,即我可以编写以下代码吗?我听说GNU C++优化了字符串,所以它们具有相同的地址,我可以在程序中使用该功能吗?
int main()
{
const char* ok = "Ok";
if ( ok == Ok() ) // is it ok?
;
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*urr 11
当然不能保证,但这是一种常见的(我认为)优化.
C++标准说(2.13.4/2"字符串文字):
是否所有字符串文字都是不同的(即存储在非重叠对象中)是实现定义的.
为了清楚起见,你不应该编写假定将进行优化的代码 - 正如Chris Lutz所说,依赖于此的C++代码是等待被破坏的代码.