2016-11-24 214 views
0

在這裏我不知道爲什麼內聯函數返回2,而我沒有返回任何值。如果我在函數中改變了e的值,那麼函數返回3.我不知道這個請建議。什麼是返回2不是0?

#include <iostream> 

using namespace std; 

int a, b; 

inline int add(int e, int d) 
{ 
    e = 211; 
    d = 312; 

    //return e+d; 
} 

int main() 
{ 
    a = 2; b = 3; 
    int c = add(a, b); 
    cout << c; 
} 
+1

你有UB,因爲不是所有的路徑都返回值。 – Jarod42

+0

感謝vsoftco現在終於解決了這個問題。再次感謝。 –

回答

5

用這種方式使用函數是未定義的行爲。如果函數原型說明它返回了一些東西,但是忘記了return,則所有投注都關閉。如果您打開警告,大多數編譯器都會提醒您。例如,爲-Wall -Wextra GCC /鐺給你警告

警告:沒有return語句在函數返回非空[-Wreturn型]

更技術性的,當你聲明一個函數返回某些內容,稱之爲Foo,然後運行時爲該Foo分配一些內存,該內存必須返回。當您實際編寫return some_foo;時,返回的對象some_foo正在分配的內存中構建。如果您忘記(或不想寫入)return,則分配的內存將保持未初始化狀態,因此您最終將從未初始化的對象讀取數據,這是未定義的行爲。

相關問題