常量字符串地址

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++代码是等待被破坏的代码.


Sve*_*lov 8

这称为字符串实习

在你的情况下,最好不要依赖它.范围不同,但我发现自己在这个问题上没有能力