2014-09-26 19 views
2

我有一個課與身體的測試方法;爲什麼在C++的類中定義方法時不存在多重定義錯誤?

class Object { 
public: 
    Object(){ 

    } 
    virtual ~Object(){ 

    } 

    void test(){ 
    } 
}; 

我把這個object.h包含在2個cpp文件中。爲什麼在這兩個cpp文件中可用(包含後)的功能Object::test沒有多重定義錯誤?

我明白,一個具有完整主體的函數是一個定義而不是聲明,所以我期望應該有多個定義錯誤。

是否有官方文章談過?

+5

這是因爲test()是[inline](http://en.wikipedia.org/wiki/Inline_function)。 – 2014-09-26 07:46:34

+3

類內函數定義是隱式「內聯」的。 「內聯」意味着「只要所有定義相同,就可以有多個定義」。 – Mankarse 2014-09-26 07:46:43

+0

無法向Andy的陳述添加其他內容。 – 2014-09-26 07:54:00

回答

3

根據C++標準(7.1.2功能說明符)

3類定義中定義的功能是一個內聯函數

4內聯函數應每翻譯單元被定義在 其所ODR使用的,並應具有完全相同在 每一種情況下(3.2)相同的定義。

而且

其名稱顯示爲潛在評估表達是 ODR使用的,如果它是獨特的查找結果或 組重載函數的所選擇的成員(3.4功能, 13.3,13.4),除非它是純粹的虛擬函數,並且其名稱沒有明確限定。

其中ODR是一個定義規則的縮寫。 簡單地說,函數在參與評估的表達式時會被使用。

+0

不清楚它是什麼意思:(什麼是odr-used – 2014-09-26 08:10:14

+0

@NayanaAdassuriya有一個[關於odr-use的回答](http://stackoverflow.com/questions/19630570/what-does-it-mean-to- odr-use-something)在這裏。 – Angew 2014-09-26 08:17:06

相關問題