Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में टाइप इन्फरेंस (प्रकार निगमन)

टाइप इन्फरेंस या डिडक्शन का अर्थ है प्रोग्रामिंग भाषा में एक एक्सप्रेशन के डेटा टाइप का ऑटोमैटिक डिटेक्शन। यह कुछ स्ट्रॉन्गली स्टैटिकली टाइप्ड भाषाओं में मौजूद एक विशेषता है। C++ में, auto कीवर्ड (C++11 में जोड़ा गया) ऑटोमैटिक टाइप डिडक्शन के लिए उपयोग किया जाता है। उदाहरण के लिए, आप एक वेक्टर पर पुनरावृति करने के लिए एक इटरेटर बनाना चाहते हैं, आप इसके लिए बस auto का उपयोग कर सकते हैं।

उदाहरण

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> arr(10);
    for (auto it = arr.begin(); it != arr.end(); it++) {
        cin >> *it;
    }
    return 0;
}

आउटपुट

उपरोक्त प्रोग्राम में, it ऑटोमैटिकली std::vector<int>::iterator टाइप प्राप्त करेगा।

auto के उपयोग के उदाहरण

1. जटिल टाइप नेम्स से बचना

// auto के बिना
std::map>::const_iterator it = myMap.begin();

// auto के साथ
auto it = myMap.begin(); // बहुत साफ!

2. लैम्ब्डा रिटर्न टाइप

auto add = [](int a, int b) { return a + b; }; // int लौटाता है
auto divide = [](int a, int b) -> double { return a / double(b); }; // स्पष्ट रिटर्न टाइप

3. रेंज-बेस्ड फॉर लूप

vector v = {1, 2, 3};
for (auto& x : v) x *= 2; // रेफरेंस द्वारा मॉडिफाई
for (auto x : v) cout << x << " "; // कॉपी द्वारा पढ़ें

4. टेम्पलेट कोड में

template
void process(T value) {
    auto result = compute(value); // टाइप compute() पर निर्भर करता है
}

auto के नियम

स्थिति निगमित टाइप
auto x = 42; int
auto x = 3.14; double
auto x = "hello"; const char*
auto x = std::string("hi"); std::string
auto& x = y; y का टाइप (रेफरेंस)
const auto& x = y; const y का टाइप (रेफरेंस)
auto* x = &y; y का पॉइंटर

C++14: रिटर्न टाइप डिडक्शन

auto add(int a, int b) { return a + b; } // रिटर्न टाइप int डिड्यूस होता है

auto make_vector() {
    return vector{1, 2, 3}; // vector डिड्यूस होता है
}

C++17: स्ट्रक्चर्ड बाइंडिंग्स

auto [x, y] = pair{1, 2}; // x=1, y=2
auto [a, b, c] = tuple{1, 2.0, "three"}; // a=int, b=double, c=const char*

सावधानियां

  • auto रेफरेंस और const को ड्रॉप कर देता है (जब तक & या const न जोड़ा जाए)
  • auto x = {1, 2, 3}; → std::initializer_list (नहीं vector!)
  • प्रॉक्सी ऑब्जेक्ट्स (जैसे vector::reference) के साथ सावधान रहें
  1. - C++ में vector::resize() और vector::reserve() का अंतर

    वेक्टर में डायनामिक ऐरे की तरह खुद को ऑटोमैटिकली रीसाइज़ करने की क्षमता होती है। जब कोई एलिमेंट डाला या हटाया जाता है, तो कंटेनर अपने स्टोरेज को ऑटोमैटिकली संभालता है। vector::resize() और vector::reserve() के बीच मुख्य अंतर यह है कि resize() वेक्टर का साइज़ बदलने के लिए उपयोग किया जाता है जबकि rese

  1. - C++ में टाइप इन्फरेंस क्या है?

    टाइप इन्फरेंस या डिडक्शन प्रोग्रामिंग भाषा में किसी एक्सप्रेशन के डेटा टाइप का स्वचालित पता लगाने को संदर्भित करता है। यह कुछ स्ट्रॉन्गली स्टैटिकली टाइप्ड भाषाओं में मौजूद एक विशेषता है। C++ में, auto कीवर्ड (C++11 में जोड़ा गया) ऑटोमैटिक टाइप डिडक्शन के लिए उपयोग किया जाता है। उदाहरण के लिए, आप एक

  1. - C++ में टाइप डिडक्शन क्या है?

    टाइप इन्फरेंस या डिडक्शन प्रोग्रामिंग भाषा में किसी एक्सप्रेशन के डेटा टाइप का स्वचालित पता लगाने को संदर्भित करता है। यह कुछ स्ट्रॉन्गली स्टैटिकली टाइप्ड भाषाओं में मौजूद एक विशेषता है। C++ में, auto कीवर्ड (C++11 में जोड़ा गया) ऑटोमैटिक टाइप डिडक्शन के लिए उपयोग किया जाता है। उदाहरण के लिए, आप एक