2014-12-08 49 views
1

主要我想看看編譯器生成的函數(默認構造函數,拷貝構造函數,賦值運算符,移動賦值,析構函數)。
只是想看看編譯器爲我生成的函數。如何查看課程的所有功能?

我以爲我可以在符號表中看到這一點,但我無法在符號表中發現它們,並且名稱會變形。我可以看到我定義的其他函數,但我不知道如何找到構造函數等。

有沒有更好的方法來查看哪些函數與類關聯?

+1

我希望這個類似的線程可能會幫助你接近,[** link **](http://stackoverflow.com/questions/3526546/get-the-list-of-methods-of-a-class) – saikumarm 2014-12-08 04:44:37

回答

2

有你的想法有問題:

允許時,編譯器將隱式聲明特殊功能。
但是隻有含蓄地定義了它們,如果它們是ODR使用的。

此外,該使用可能已內聯,因此可能沒有符號可供查找。

因此,找出編譯器將按需生成哪些函數的唯一故障安全方法是嘗試使用它們。
雖然只知道規則並手動檢查應該足夠了,但它們很容易。

+0

謝謝。似乎真的沒有一個好方法來檢查這一點。也許看着反彙編?查看某處是否有JUMP呼叫? – madu 2014-12-08 05:22:21

+1

@madu:關鍵在於,即使編譯器可以生成這些隱式特殊函數,因爲它們從不需要,或者因爲每次使用都是內聯的,所以沒有什麼可以找到的。 – Deduplicator 2014-12-08 05:25:32

+0

謝謝。我知道有不同的情況。我至少想看到的是有一個空的類,在這種情況下,將不會生成任何函數。但是如果我添加一個虛擬函數,那麼編譯器會放置一個構造函數來創建vtable(例如)。我想看看編譯器生成const的這種情況。爲了我。但正如你所說,它可以是內聯的。 – madu 2014-12-08 05:55:19