什么时候构造函数调用中的堆栈对象?

When is a stack object within a function call constructed?

假设我有一个简单的函数:

void foo(int val) {
    if(val == 0) {
       return;
    }
    else {
      stringstream ss;
      ss << "Hello World" << endl << ends;
      cout << ss.str();
   }
}

如果我用 val == 0 调用该函数,是否会构造字符串流对象 ss?我怀疑不是,只是想确认一下。

这正是 C/C++ 中作用域的用途:不构造您不想构造的对象。

在这里,您的 stringstream 对象只有在您进入其范围时才会被构建,该范围由 else 大括号定义。

所以不,如果 val == 0.

则不会构建您的对象

由于程序不会运行这一点,所以不会构造这个stringstream。