次の関数を指定すると、各ローカル変数はスタック上で宣言されますか?この状況で条件付きスタック変数
std::string reallyCoolFunction(unsigned int a)
{
if(a < 20)
{
std::string result1 = "This function is really cool";
return result1;
}
if(a >=20 && a <= 40)
{
std::string result2 = "This function is kind of cool";
return result2;
}
if(a > 40)
{
std::string result3 = "This function is moderately cool";
return result3;
}
std::string result4 = "This function really isn't that cool";
return result4; // remove warning
}
、一つだけstd::string
が実際に必要とされる、すべての4はスタックに割り当てますか、または唯一の1が割り当てられますでしょうか?
私の答えには、あなたが言及することを忘れているという重要なビットがあると信じています。文字列はスタックに割り当てられません。私はそれが言及する価値があると思います –
@IvayloStrandjev絶対に - 私は非常に理由であなたの答えをupvoted :) – dasblinkenlight
自動ストレージはスタックの動作を保証しています。それが「スタック」と呼ばれるものです。 「実際には」実際にはかなり無礼な言葉です。自動変数は、as-ifルールの下で最適化されてスタックに割り当てられることを避けることができます。そして、*スタックに割り当てられているかのように*なります。したがって、大きな注意を払うほど意味がありません。 –