c++ - 函数返回时变量会超出范围吗?

标签 c++ scope

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);

两个问题:

  1. 正如评论中所见,函数返回时 f 会超出范围吗?
  2. 你建议使用引用还是指针来编写函数? (我说的是私有(private)函数)

最佳答案

  1. f DoSomething 的局部引用将超出范围,但这显然没有任何后果。

    f 局部于 main 的对象仅在 main 结束后才超出范围(这,顺便说一下,应该是 int main

    总而言之,引用是对象的别名,但原始对象保留其作用域,就像指针一样。

  2. 一个常见的建议是尽可能使用引用,必要时使用指针

    一般来说,每当我需要传递参数时,我都会使用引用 - duh - 作为引用,以及指针,例如当我希望该参数是可选的1(指针可以是NULL)时,当我接受数组时,......一般来说,我会说,当在函数中,我将使用指针作为指针,而不是一直取消引用它。


  1. 尽管在许多情况下重载和默认值可能比 NULLable 参数更好。

关于c++ - 函数返回时变量会超出范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353561/

相关文章:

r - 将对象传递给 Shiny 的应用程序并使用 runApp 启动

c++ - 包括 Eigen

c++ - 范围内的范围,做还是不做?

javascript - 从 frida hook 本地方法 basic_string 参数中读取值

c++ - 打包 LEFT 和 RIGHT channel 数据

c++ - 为什么编译器会选择模板参数列表中的基类构造函数?

java - Java 函数中声明的局部变量会自动释放吗?

c# - 在类级变量上使用 using 语句是不好的做法吗?

c++ - 跨动态链接库的模板静态类

c++ - std::max - 需要一个标识符