调用函数时,C ++函数中的所有变量都是预先初始化的,无论它们在何处被声明?我问这个,因为我想知道在执行整个函数之前是否退出函数会导致在return语句之后声明的变量的内存泄漏。例如:
string oddOrEven(int a)
{
if ((a % 2) != 0)
{
string odd{ "the number is odd" };
return odd;
}
else
{
string even{ "the number is even" };
return even;
}
}
这段代码仅用于演示目的。
如果它是一个交给函数的奇数,那么字符串偶数{}永远不会被创建吗?因为如果要创建它,那么这意味着当函数在if-else块的第一部分退出时,该字符串将成为内存泄漏?
答案 0 :(得分:1)
字符串even
是else块的本地字符,如果a
为奇数,则不会创建。
注意:局部变量,即使是直接在函数内声明的变量,也不会自动初始化;只有在所有函数之外声明的全局变量才会自动初始化..
参考文献:
http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
从下面的URL:“在条件(块)内声明的局部变量将在条件结束时超出范围。”
答案 1 :(得分:0)
一旦你的程序离开函数oddOrEven(int a)
,该函数的所有局部变量都将被销毁并返回string
答案 2 :(得分:0)
如果是传递给函数的奇数,则永远不会创建字符串{}。
答案 3 :(得分:0)
其他答案试图解决的问题是,包括odd
或even
在内的所有局部变量在从创建它们的范围退出时都会被销毁。
odd
(或even
)不是函数返回的内容。返回的是odd
或even
的临时副本,并且调用者知道要删除此副本。
注意:这忽略了返回值优化(RVO),因为这只会使情况更加混乱。