我有一些函数需要返回一个 const char* (以便大量其他函数最终可以使用它)。
我知道,如果我有如下定义:
const char* Foo(int n)
{
// Some code
.
.
.
return "string literal, say";
}
那么就没有问题了。但是我是否正确地说,如果 Foo 必须返回一些只能在运行时确定的字符串(取决于参数 n,(其中每个 n 取 [0, 2^31-1] 中的任何值)唯一地确定返回字符串)) 那么我必须使用堆(或返回像 std::string 这样在内部使用堆的对象)?
对于我想要完成的事情,std::string 似乎太重了(至少有两个函数必须传递包裹),并且在 Foo 内分配内存以由调用者释放并不让我觉得这是一种安全的前进方式。我不能(轻松)传递对需要此函数的对象的引用,并不是说我相信无论如何都是可能的,但宏诡计是不可能的。
有没有我还没有考虑过的简单事情?
编辑
感谢所有人的回答,我会选择 std::string (我想以迂回的方式要求确认没有办法向编译器暗示它应该存储一些 char[] 的内容它存储字符串文字的相同位置)。至于“重量级”(我很高兴复制它们并没有我想象的那么浪费)这不是最好的表达方式,也许“不同”会更接近我最初的担忧。