C++ 函数调用中的堆栈对象何时构造?
假设我有一个简单的函数:C++ 函数调用中的堆栈对象何时构造?,c++,stack,object-construction,C++,Stack,Object Construction,假设我有一个简单的函数: void foo(int val) { if(val == 0) { return; } else { stringstream ss; ss << "Hello World" << endl << ends; cout << ss.str(); } } void foo(int val){ 如果(val==0){ 返回; } 否则{ 细流s
void foo(int val) {
if(val == 0) {
return;
}
else {
stringstream ss;
ss << "Hello World" << endl << ends;
cout << ss.str();
}
}
void foo(int val){
如果(val==0){
返回;
}
否则{
细流ss;
ss这正是C/C++中作用域的用途:不要构造您不想构造的对象
在这里,您的stringstream
对象只有在您穿透else
花括号定义的范围时才能构造
因此,如果val==0,则不会构造对象,因为程序不会运行到此点,所以不会构造此stringstream。不,ss
不会构造,因为它位于从未输入的不同范围内。很容易判断:只需放置您编写的类,而不是stringstream
(例如扩展stringstream
),并让其构造函数和析构函数输出一些消息。通过这种方法,您可以找到每个对象被创建和析构函数的确切时刻。@axiac,这是一个聪明的把戏。下次我想看看对象是否被构造时,我会试试这个把戏。@PentiumPro200“这是一个聪明的把戏”嗯,最简单的方法往往是最聪明的方法。