2013-02-11 91 views
19

जहां तक ​​मैं इसे समझता हूं कि मौलिक प्रकार स्केलर हैं और Arrays कुल हैं लेकिन उपयोगकर्ता परिभाषित प्रकारों के बारे में क्या हैं? मैं उन्हें दो श्रेणियों में किस मापदंड से विभाजित करूं?सी ++ में स्केलर ऑब्जेक्ट क्या है?

struct S { int i; int j }; 
class C { public: S s1_; S s2_ }; 
std::vector<int> V; 
std::vector<int> *pV = &v; 
+0

मुझे लगता है कि आप अगर आप उपयोगी जवाब – tletnes

+0

तुम्हारा मतलब "प्रकार" करना चाहते हैं और "कुल" अप वर्तनी और अपने परिचयात्मक पैरा की वाक्य रचना थोड़ा साफ है, और संभवतः उस पर expanind कर सकते हैं? – us2012

+2

@ us2012: "टेप और एरोगेट्स" इंडी कॉलेज बैंड होना चाहिए। –

उत्तर

29

लघु संस्करण:

  • वस्तु प्रकार: ++ हैं सी में प्रकार

  • समारोह प्रकार scalars, सरणियों, वर्ग, यूनियनों

  • संदर्भ प्रकार

  • (सदस्य प्रकार) [नीचे देखें]

  • void


लांग संस्करण

  • वस्तु प्रकार

    • Scalars

      1. अंकगणित (अभिन्न, नाव)

      2. संकेत: T * किसी भी प्रकार के T

      3. enum

      4. सूचक करने वाली सदस्य

      5. nullptr_t

    • सरणी: T[] या T[N] किसी भी पूरा, गैर संदर्भ प्रकार के लिए T

    • क्लास: class Foo या struct Bar

      1. तुच्छ कक्षाएं

      2. समुच्चय

      3. पीओडी कक्षा

      4. (आदि आदि।)

    • यूनियनों: union Zip

  • संदर्भ प्रकार: T &, T && किसी भी वस्तु या मुक्त समारोह प्रकार के लिए T

  • समारोह प्रकार

    • नि: शुल्क कार्य: R foo(Arg1, Arg2, ...)

    • सदस्य कार्य: R T::foo(Arg1, Arg2, ...)

  • void

सदस्य प्रकार इस तरह काम करते हैं। एक सदस्य का प्रकार T::U रूप है, लेकिन आपके पास सदस्य प्रकार के ऑब्जेक्ट्स या चर नहीं हो सकते हैं। आपके पास केवल सदस्य पॉइंटर्स हो सकते हैं। एक सदस्य सूचक में T::* U टाइप होता है, और यह U एक (मुक्त) ऑब्जेक्ट प्रकार है, और U एक (मुक्त) फ़ंक्शन प्रकार है, तो एक पॉइंटर-टू-सदस्य-फ़ंक्शन है।

void, अनसुलझा सरणी और घोषित-लेकिन-परिभाषित कक्षाओं और संघों को छोड़कर सभी प्रकार पूर्ण हैं। void को छोड़कर सभी अपूर्ण प्रकार पूरे किए जा सकते हैं।

सभी प्रकार const/volatile योग्य हो सकते हैं।

<type_traits> शीर्षलेख इन प्रकार की विशेषताओं में से प्रत्येक के लिए जांच कक्षाओं को प्रदान करता है।

22

मुझे लगता है कि यह एक अधिक व्यापक जवाब होगा:

enter image description here

मूल दस्तावेज:
http://howardhinnant.github.io/TypeHiearchy.pdf

एक अदिश यह सिवाय एक मौलिक शून्य नहीं हो सकता है, लेकिन यह एक हो सकता है सूचक प्रकार, या एक enum प्रकार।

और एक मूलभूत भाषा में एक कीवर्ड है। जब ऐसा कहा जाता है तो पहचानना आसान है।

3

लाइब्रेरी कक्षाओं की एक श्रृंखला है जो चर के प्रकार का परीक्षण करने के लिए उपयोग की जाती है। std::is_scalar का उपयोग यह जांचने के लिए किया जा सकता है कि कोई ऑब्जेक्ट स्केलर है या नहीं।

एक अदिश प्रकार एक प्रकार है कि भार के (गणित, सूचक, सदस्य सूचक, enum और std::nullptr_t) के बिना इसके अलावा ऑपरेटर के लिए निर्मित कार्यक्षमता है।

here से भी एक तालिका।

C++ Type Categories