建構函式的返回值

2021-07-11 01:31:38 字數 1036 閱讀 2277

今天看到同學們在討論乙個問題,這個問題是知乎上的乙個問題,問題描述如下:

class a

};int main()

這個問題很有意思的,a的建構函式裡面什麼都沒有,那麼返回乙個怎麼樣的物件呢,還是會出錯呢?

顯然這個程式是能夠編譯通過的,但是我們該怎麼認識它呢,我們來看看反彙編吧。

可以看到:在call呼叫建構函式之前,黃色箭頭的指向,此時已經有了乙個物件了,沒有呼叫建構函式之前就有了乙個物件,原來是這樣,a a = a()該返回什麼呢,是這個在建構函式之前已經生成的物件嗎?我們需要驗一下它的身份。

#include using namespace std;

class a

void showval()

public:

int val;

};int main()

我們寫了上述**,執行結果如下:

可以得到結果為1,所以我們可以推測a()確實返回了乙個物件,是乙個匿名物件。

int main()

執行的時候結果如下:

賦值無法通過,可以知道上面那個匿名物件是個臨時物件(具有常性),所以才無法賦值。

到了這裡我們可以得出結論了:我們所討論的a()的返回值沒有意義,因為它是在呼叫建構函式之前就創造出來了,而不是建構函式的返回值。但是從整體角度看的話,我們可以說它返回的是乙個匿名物件的引用。

好了,這個問題已經水落石出了,最後說明一下這個問題是大家一起努力的結果,而不是我乙個解決的,功勞屬於每乙個參與問題討論的人!

建構函式有返回值

function f1 console.log new f1 返回例項,委託原型 console.log new f1 name f1 console.log f1 name uncaught typeerror cannot read property name of undefined cons...

主函式的返回值返回給誰 主函式返回值

responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...

函式返回值

這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...