"मैं समझता हूँ कि सेट सिर्फ 10 पूर्णांकों का स्थिर सरणी के लिए सूचक है"
नहीं, यह गलत है: यह एक सरणी, नहीं एक सूचक है।
आप अभी भी इसे निर्माता की प्रारंभिक सूची में प्रारंभ कर सकते हैं।
एक संकलक कि सी ++ 11 घुंघराले ब्रेसिज़ प्रारंभ (विजुअल C++ संस्करण 11 और पहले मन में आता है) के रूप में नीचे दिखाया गया है आप, हालांकि कुछ हुप्स के माध्यम से कूद करना होगा समर्थन नहीं करता है के लिए:
#include <iostream>
#include <vector>
using namespace std;
#define CPP11
#if defined(_MSC_VER)
# if (_MSC_VER <= 1700)
# undef CPP11
# endif
#endif
#ifdef CPP11
class Cpp11
{
private:
int set_[10];
public:
Cpp11()
: set_{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
{}
int foo() const { return set_[3]; }
};
#endif
class Cpp03
{
private:
struct IntArray10 { int values[10]; };
IntArray10 set_;
static IntArray10 const& oneToTen()
{
static IntArray10 const values =
{ {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} };
return values;
}
public:
Cpp03()
: set_(oneToTen())
{}
int foo() const { return set_.values[3]; }
};
int main()
{}
कच्चे सरणियों उपयोग करने के बजाय, हालांकि, std::vector
और 11 std::array
सी +++, जो दोनों के लिए क्या यह लायक है के लिए भी विजुअल C++ 11.
स्रोत
2012-08-06 23:07:33
द्वारा समर्थित हैं उपयोग करते हैं, 'Set' एक करने के लिए सिर्फ एक सूचक नहीं है '10' पूर्णांक की सरणी, न ही यह 'स्थिर' है। इसके बजाय, सरणी नाम 'सेट' कुछ स्थितियों में सरणी के पहले तत्व को पॉइंटर को क्षय करता है। अंतर 'आकार' का उपयोग करके स्पष्ट रूप से देखा जा सकता है - यानी 'आकार (सेट) == 10 * आकार (int)! = Sizeof (int *) '। स्पष्टीकरण के लिए –
@StuartGolodetz धन्यवाद। जब मैंने स्थैतिक कहा, तो मेरा मतलब इस रूप में स्थिर था कि यह ऑब्जेक्ट/इंस्टेंस के साथ संग्रहीत है, और ढेर में कहीं और नहीं। बेशक, यह मेरे हिस्से पर 'स्थैतिक' शब्द का एक बड़ा दुरुपयोग है; माफ़ कीजिये। – Serge
कोई चिंता नहीं :) मैं मुख्य रूप से ऑफ-पॉइंटर्स के बीच भेद को स्पष्ट करने की कोशिश कर रहा था कि वहां एक गलतफहमी हो सकती है। –