2016-11-16 76 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