什么时候构造函数调用中的堆栈对象?
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。
假设我有一个简单的函数:
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。