从函数安全和可移植返回字符串文字地址?

sha*_*oth 15 c++ string

我需要一个函数来返回一个只能以只读方式访问的字符串.字符串内容在编译时是已知的,因此无论如何我将使用字符串文字.

我可以返回类似的东西std::string:

std::string myFunction()
{
   return "string";
}
Run Code Online (Sandbox Code Playgroud)

或返回const char*:

const char* myFunction()
{
   return "string";
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第二种替代方案是安全可移植的吗

Pra*_*rav 14

在这种情况下,第二种替代方案是安全可移植的吗

是! 字符串文字的存储分配是静态的,并且它们在应用程序的生命周期中保持不变.

  • 你能为你的证明提供一个参考吗? (2认同)

Phi*_*ter 10

是! 但要注意这个潜在的问题:

char * myFunc() {
    return "Constant string?";
}
Run Code Online (Sandbox Code Playgroud)

是的,您可以将字符串文字转换为非常量 char *!这将使您以后通过尝试修改其内容来打破世界char *.由于遗留原因,此"特征"存在 - 字符串文字比const更早​​,最初char *在C中定义.

谢天谢地,即使在默认模式下,g ++也会对此发出令人讨厌的警告.我不知道VC++是否会急切地发出警告.