何时构造函数调用中的堆栈对象



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

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

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

这正是

C/C++ 中的作用域的用处:不构造你不想被构造的对象。

在这里,只有当您穿透由else大括号定义的范围时,才能构造您的stringstream对象。

所以不,如果val == 0,您的对象将不会被构造。

由于程序不会运行到这一点,因此不会构造此字符串流。

最新更新