請考慮以下簡單的內容:
#ifndef TEST_H
#define TEST_H
class Test {
public:
static constexpr int a = 1;
}
#endif
注意:
- 由于該宏沒有違反ODR。
- 為什么 constexpr static int a 不被認為是一個定義,因為它是在 Test 類中定義的?因為它不是一個定義,所以它需要在類外的下面。為什么?
constexpr int Test::a;
uj5u.com熱心網友回復:
為什么靜態 constexpr 的類內初始化不是定義呢?
因為有一個定義規則(ODR)。該規則規定,每個非行內非成員和靜態成員變數必須有一個確切的定義。類的定義,由于其性質,通常包含在多個翻譯單元中。如果類定義包含一個變數定義,那么包含在多個翻譯單元中就違反了 ODR。
自C 17以來,該語言擁有行內變數,因此您可以在類定義中定義此類行內變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314107.html
標籤:
