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

时间:2016-03-03 23:14:49

标签: c++ stack object-construction

说我有一个简单的功能:

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

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

3 个答案:

答案 0 :(得分:6)

没有。您可以通过使用自己的对象轻松确认它,并在构造函数中放置一些东西。例如:

class TestClass {
    public:
        TestClass() { cout << "Construct TestClass" << endl; };
};

void foo(int val) {
    if(val == 0) {
       return;
    }
    else {
      TestClass myTest;
      cout << "In else" << endl;
   }
}

答案 1 :(得分:4)

这正是C / C ++中的范围很有用的方法:不构造你不想构造的对象。

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

所以不,如果val == 0,您的对象将无法构建。

答案 2 :(得分:1)

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