C++ inline和constexpr函式可以多次定義問題

mystyle_發表於2020-12-08

首先我們明確,一個普通的函式或者變數可以被多次宣告,但只能被定義一次,因此在標頭檔案中一般都只放函式和變數的宣告

行內函數和constexpr函式可以在程式中多次定義,但是多個定義必須完全一致,因此行內函數和constexpr函式通常定義在標頭檔案中。
                            ------C++ primer 第五版 215頁

另外轉

a.h

裡定義

inline int fun()
{
    return 1;
}


在 b.h

裡定義

inline int fun()
{
    return 100;
}

因為inline函式編譯時需要直接插入函式程式碼,所以不能使extern的,每個編譯模組(cpp原始檔)中必須包含其定義程式碼(不是宣告)
所以"行內函數有可能在程式中定義不止一次,"就是指在每個呼叫inline函式的原始檔中都要有inline的定義,所以把inline定義放在標頭檔案中,需要時include就可以了。

相關文章