gpt4 book ai didi

c++ - 可以将用于返回 const ref 的函数更改为 std::string 以按值返回中断调用代码吗?

转载 作者:太空狗 更新时间:2023-10-29 23:45:34 26 4
gpt4 key购买 nike

我们有这样一个函数:

const std::string& ConvertToString(Enum e)
{
static const std::string enumStrings[4] =
{
std::string("first"),
std::string("second"),
std::string("third"),
std::string("unknown")
}

int enumOrd = static_cast<int>(e);
if (e < 0 || e > 2)
{
return enumStrings[3];
}

return enumStrings[enumOrd];
}

现在,问题是这个函数在 main() 返回后被调用,并且由于静态数组已经被销毁而崩溃。我想把它改成这样:

std::string ConvertToString(Enum e)
{
switch (static_cast<int>(e))
{
case 0: return std::string("first");
case 1: return std::string("second");
case 2: return std::string("third");
default: return std::string("unknown");
}
}

我想知道此更改是否有可能破坏调用此函数的任何代码。我想不出任何问题(只要返回的类没有在 const 方法中做偷偷摸摸的事情,但 std::string 应该没问题,尤其是在 const ref -> value 的转换中,但也许我'我错过了一些东西。

最佳答案

如果调用代码做了类似这样的事情,这可能会出错:

const char* s = ConvertToString(first).c_str();

然后将s存储在某处,稍后访问,认为ConvertToString的返回值所引用的std::string对象会永远不会被摧毁。

当然,在那种情况下,调用代码无论如何都很糟糕。

关于c++ - 可以将用于返回 const ref 的函数更改为 std::string 以按值返回中断调用代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17685527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com