void main()
{
File f;
DoSomething(f);
DoSomething2(&f);
}
void DoSomething(File& f)
{
f.Process();
} // will f go out of scope when this function returns?
void DoSomething2(File* f);
两个问题:
- 正如评论中所见,函数返回时 f 会超出范围吗?
- 你建议使用引用还是指针来编写函数? (我说的是私有(private)函数)
最佳答案
f
DoSomething
的局部引用将超出范围,但这显然没有任何后果。f
局部于main
的对象仅在main
结束后才超出范围(这,顺便说一下,应该是int
main
。总而言之,引用是对象的别名,但原始对象保留其作用域,就像指针一样。
一个常见的建议是尽可能使用引用,必要时使用指针。
一般来说,每当我需要传递参数时,我都会使用引用 - duh - 作为引用,以及指针,例如当我希望该参数是可选的1(指针可以是
NULL
)时,当我接受数组时,......一般来说,我会说,当在函数中,我将使用指针作为指针,而不是一直取消引用它。
- 尽管在许多情况下重载和默认值可能比
NULL
able 参数更好。
关于c++ - 函数返回时变量会超出范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353561/