我需要一个函数来返回一个只能以只读方式访问的字符串。字符串内容在编译时是已知的,因此无论如何我都将使用字符串文字。
我可以返回std::string
:
std::string myFunction()
{
return "string";
}
或返回const char*
:
const char* myFunction()
{
return "string";
}
在这种情况下,第二种替代方案是安全且便携的吗?
答案 0 :(得分:14)
在这种情况下,第二种替代方案是安全且便携的吗?
是!字符串文字的存储空间分配为静态,并且它们会在应用程序的生命周期内持续存在。
答案 1 :(得分:10)
是的!但要注意这个潜在的问题:
char * myFunc() {
return "Constant string?";
}
是的,您可以将字符串文字转换为非const char *
!这将使您以后通过尝试修改char *
的内容来打破世界。由于遗留原因,此“功能”存在 - 字符串文字早于const,最初在C中定义为char *
。
答案 2 :(得分:3)
是。 (将这种指针存储在全局数据结构中并没有什么不同。)