![](/img/trans.png)
[英]Why don't methods defined in classes in C++ need forward declarations when referring to methods that only show up later in the class?
[英]c++ functions defined inside class declaration don't show up as linker symbols
這是我的C ++類,部分在類內部定義,而部分在外部定義。 問題是:執行nm揭示類聲明中定義的函數未顯示在目標文件中,而外部函數顯示在目標文件中。 如何使類中的符號也出現在目標文件中? 我正在使用g ++ 4系列。
class A {
public:
void this_will_not_show_up() { };
void this_will_show_up();
};
void A::this_will_show_up() { }
在類定義中內聯定義的函數被編譯為內聯函數,即該函數中的代碼被“復制”到調用函數。 因此,您沒有內聯函數的任何專用實現,並且沒有鏈接器符號。
當在編譯單元中定義非內聯方法時,可能是從另一個編譯單元調用了此函數。 因此,此實現需要可以鏈接的功能。 編譯器僅生成一個函數,該函數包括在鏈接器映射中找到的標題和(修飾的)名稱。
在共享庫中使用它時沒有問題,因為編譯器需要使用的所有內容都在頭文件中定義。 像STL這樣的庫幾乎完全只作為標頭實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.