次のような関数があります。
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 メソッドで卑劣なことをしていない限り、特に const ref -> value の遷移では std::string は問題ないはずですが、多分私は'何かが足りない。