टाइप इन्फरेंस या डिडक्शन का अर्थ है प्रोग्रामिंग भाषा में एक एक्सप्रेशन के डेटा टाइप का ऑटोमैटिक डिटेक्शन। यह कुछ स्ट्रॉन्गली स्टैटिकली टाइप्ड भाषाओं में मौजूद एक विशेषता है। 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