2016-11-16 77 views
0

我是新来的C + +,我一直在学习如何执行一个程序。我正在处理此代码:C++调试返回0回到变量

#include <iostream> 
#include <string> 

using namespace std; 

void sayHello() { 
    cout << "Hello world!" << endl; 
} 

void greet(string name) { 
    cout << "Hello " << name << ", how are you?" << endl; 
} 

int main() 
{ 
    sayHello(); 
    int a = 10; 
    string name = "Johan"; 
    greet(name); 
    return 0; 
} 

我在代码块IDE中调试此代码。当它到达return 0语句时,黄色箭头(步入模式)返回到string name语句,然后再次返回到return语句以完成调试。我认为这与解放内存有关,但为什么没有去int a = 10

这是正常的吗?调试器做了什么?调试器不应该直接进入右括号?

非常感谢。

回答

1

这是因为std::string是一个带有非缺省析构函数的类,这是调试器通过调用它的析构函数告诉你它将销毁这个std::string对象的方法。调试人员用这么多的话说:“好吧,我现在正在执行return语句,并且业务的第一顺序是销毁此std::string,因此执行跳转到声明此std::string对象的行,以便让您知道我即将执行此析构函数;现在,在那里,我已经完成了,现在我将恢复从此函数返回的过程“。

一个普通的int没有花哨的凄凉析构,没有什么特别的需要做,为了让它消失。

+0

非常明确的解释,谢谢 – kuntoro