खोज…
परिचय
इनलाइन चर को एक परिभाषा नियम का उल्लंघन किए बिना कई अनुवाद इकाइयों में परिभाषित करने की अनुमति है। यदि इसे बहुतायत से परिभाषित किया गया है, तो लिंकर अंतिम कार्यक्रम में सभी परिभाषाओं को एक ही वस्तु में मिला देगा।
कक्षा की परिभाषा में एक स्थिर डेटा सदस्य को परिभाषित करना
यदि यह inline
घोषित किया जाता है, तो कक्षा का एक स्थिर डेटा सदस्य पूरी तरह से वर्ग परिभाषा के भीतर परिभाषित किया जा सकता है। उदाहरण के लिए, निम्न वर्ग को हेडर में परिभाषित किया जा सकता है। C ++ 17 से पहले, Foo::num_instances
की परिभाषा को समाहित करने के लिए .cpp
फ़ाइल प्रदान करना आवश्यक होता है Foo::num_instances
ताकि यह केवल एक बार परिभाषित हो, लेकिन C ++ 17 में इनलाइन चर Foo::num_instances
की कई परिभाषाएँ Foo::num_instances
सभी एक ही int
ऑब्जेक्ट को संदर्भित करते हैं।
// warning: not thread-safe...
class Foo {
public:
Foo() { ++num_instances; }
~Foo() { --num_instances; }
inline static int num_instances = 0;
};
एक विशेष मामले के रूप में, एक constexpr
स्थिर डेटा सदस्य परोक्ष इनलाइन है।
class MyString {
public:
MyString() { /* ... */ }
// ...
static constexpr int max_size = INT_MAX / 2;
};
// in C++14, this definition was required in a single translation unit:
// constexpr int MyString::max_size;