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

时间:2010-03-03 13:38:21

标签: c++ string

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

我可以返回std::string

之类的内容
std::string myFunction()
{
   return "string";
}

或返回const char*

const char* myFunction()
{
   return "string";
}

在这种情况下,第二种替代方案是安全且便携的吗?

3 个答案:

答案 0 :(得分:14)

  

在这种情况下,第二种替代方案是安全且便携的吗?

是!字符串文字的存储空间分配为静态,并且它们会在应用程序的生命周期内持续存在。

答案 1 :(得分:10)

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

char * myFunc() {
    return "Constant string?";
}

是的,您可以将字符串文字转换为非const char *!这将使您以后通过尝试修改char *的内容来打破世界。由于遗留原因,此“功能”存在 - 字符串文字早于const,最初在C中定义为char *

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

答案 2 :(得分:3)

是。 (将这种指针存储在全局数据结构中并没有什么不同。)