खोज…


परिचय

कीवर्ड using typedef और (C ++ 11 के बाद से) एक मौजूदा प्रकार को एक नया नाम देने के लिए उपयोग किया जा सकता है।

वाक्य - विन्यास

  • typedef type- Specier -seq init-घोतक-सूची ;
  • विशेषता-विनिर्देशक-seq टाइप -बीफ घोषित- विशेष- seq init- घोतक -सूची ; // C ++ 11 के बाद से
  • पहचानकर्ता विशेषता-विनिर्देशक-सेक् ( ऑप्ट ) का उपयोग करके = टाइप-आईडी ; // C ++ 11 के बाद से

बेसिक टाइपफेड सिंटेक्स

एक typedef घोषणा में एक चर या फ़ंक्शन घोषणा के रूप में एक ही वाक्यविन्यास होता है, लेकिन इसमें typedef शब्द होता है। typedef की उपस्थिति एक चर या कार्य के बजाय एक प्रकार घोषित करने के लिए घोषणा का कारण बनती है।

int T;         // T has type int
typedef int T; // T is an alias for int

int A[100];         // A has type "array of 100 ints"
typedef int A[100]; // A is an alias for the type "array of 100 ints"

एक बार एक प्रकार के उपनाम को परिभाषित किया गया है, इसे मूल रूप से प्रकार के मूल नाम के साथ इस्तेमाल किया जा सकता है।

typedef int A[100];
// S is a struct containing an array of 100 ints
struct S {
    A data;
};

typedef कभी भी एक अलग प्रकार नहीं बनाता है। यह केवल मौजूदा प्रकार का संदर्भ देने का एक और तरीका देता है।

struct S {
    int f(int);
};
typedef int I;
// ok: defines int S::f(int)
I S::f(I x) { return x; }

टंकण का अधिक जटिल उपयोग

नियम जो typedef घोषणाओं में एक ही वाक्यविन्यास है जैसा कि साधारण चर और फ़ंक्शन घोषणाओं का उपयोग अधिक जटिल घोषणाओं को पढ़ने और लिखने के लिए किया जा सकता है।

void (*f)(int);         // f has type "pointer to function of int returning void"
typedef void (*f)(int); // f is an alias for "pointer to function of int returning void"

यह भ्रामक सिंटैक्स के साथ निर्माण के लिए विशेष रूप से उपयोगी है, जैसे गैर-स्थिर सदस्यों को संकेत।

void (Foo::*pmf)(int);         // pmf has type "pointer to member function of Foo taking int
                               // and returning void"
typedef void (Foo::*pmf)(int); // pmf is an alias for "pointer to member function of Foo
                               // taking int and returning void"

निम्न फ़ंक्शन घोषणाओं के सिंटैक्स को याद रखना मुश्किल है, यहां तक कि अनुभवी प्रोग्रामर के लिए:

void (Foo::*Foo::f(const char*))(int);
int (&g())[100];

typedef का उपयोग उन्हें पढ़ने और लिखने में आसान बनाने के लिए किया जा सकता है:

typedef void (Foo::pmf)(int);  // pmf is a pointer to member function type
pmf Foo::f(const char*);       // f is a member function of Foo

typedef int (&ra)[100];        // ra means "reference to array of 100 ints"
ra g();                        // g returns reference to array of 100 ints

टंकण के साथ कई प्रकार की घोषणा

typedef कीवर्ड एक typedef है, इसलिए यह प्रत्येक घोषणाकर्ता के लिए अलग से लागू होता है। इसलिए, घोषित किया गया प्रत्येक नाम उस प्रकार को संदर्भित करता है, जो उस नाम को टाइप- typedef की अनुपस्थिति में होगा।

int *x, (*p)();         // x has type int*, and p has type int(*)()
typedef int *x, (*p)(); // x is an alias for int*, while p is an alias for int(*)()

"उपयोग" के साथ उपनाम की घोषणा

सी ++ 11

using का वाक्य-विन्यास बहुत सरल है: परिभाषित किया जाने वाला नाम बाएं हाथ की ओर जाता है, और परिभाषा दाहिने हाथ की तरफ जाती है। यह देखने के लिए स्कैन करने की आवश्यकता नहीं है कि नाम कहाँ है।

using I = int;
using A = int[100];             // array of 100 ints
using FP = void(*)(int);        // pointer to function of int returning void
using MP = void (Foo::*)(int);  // pointer to member function of Foo of int returning void

के साथ एक प्रकार का उपनाम बनाने using के साथ एक प्रकार उर्फ बनाने के रूप में बिल्कुल वैसा ही प्रभाव पड़ता है typedef । यह बस एक ही चीज़ को पूरा करने के लिए एक वैकल्पिक वाक्यविन्यास है।

typedef विपरीत, using typedef किया जा सकता है। using के साथ बनाए गए "टेम्पलेट टाइपडेफ़" को एक उपनाम टेम्पलेट कहा जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow