说我有一个简单的功能:
void foo(int val) {
if(val == 0) {
return;
}
else {
stringstream ss;
ss << "Hello World" << endl << ends;
cout << ss.str();
}
}
如果我用val == 0
调用函数,是否会构造stringstream对象ss?我怀疑没有,但只是想确认一下。
答案 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)
由于程序没有达到这一点,因此不会构造此字符串流。