दिलचस्प पोस्ट
सरणी के लिए स्विफ्ट स्ट्रिंग कन्वर्ट इस सूचक की व्याख्या करना मुझे -46 देता है, लेकिन मुझे यकीन नहीं है कि क्यों urlencoded फॉरवर्ड स्लैश यूआरएल टूट रहा है मेल खाता समूह के संदर्भ में जावास्क्रिप्ट की जगह है? एक स्क्रीनशॉट प्रोग्राम को कैसे लें अजगर में प्रत्येक क्यूबिस्ट के पहले आइटम को निकालें एक कैनवास की सामग्री को स्थानीय रूप से दूसरे कैनवस में कॉपी कैसे करें क्या एक jquery घटना है कि आग जब एक नया नोड dom में डाला जाता है? Php जांचें कि स्ट्रिंग में चीनी वर्ण हैं mysqli_query () कम से कम 2 मापदंडों, 1 में दी उम्मीद है? नक्शा के NSArray समकक्ष बेस 64 एन्कोडर और डिकोडर asp.net: अमान्य पोस्टबैक या कॉलबैक तर्क एएसपी.नेट विंडोज प्रमाणीकरण लॉगआउट इकाई-फ़्रेमवर्क माइग्रेशन रीसेट करें

सी ++ 11 "ऑटो" शब्दार्थ

जब मैं सी +11 11 auto उपयोग करता हूं, तो क्या यह मान या संदर्भ के लिए हल करेगा, इसके साथ प्रकार कटौती के नियम क्या हैं?

उदाहरण के लिए, कभी-कभी यह स्पष्ट होता है:

 auto i = v.begin(); // Copy, begin() returns an iterator by value 

ये कम स्पष्ट हैं:

 const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference? static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference? std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration? 

वेब के समाधान से एकत्रित समाधान "सी ++ 11 "ऑटो" शब्दार्थ"

नियम सरल है: आप इसे कैसे घोषित करते हैं।

 int i = 5; auto a1 = i; // value auto & a2 = i; // reference 

अगला उदाहरण यह साबित करता है:

 #include <typeinfo> #include <iostream> template< typename T > struct A { static void foo(){ std::cout<< "value" << std::endl; } }; template< typename T > struct A< T&> { static void foo(){ std::cout<< "reference" << std::endl; } }; float& bar() { static float t=5.5; return t; } int main() { int i = 5; int &r = i; auto a1 = i; auto a2 = r; auto a3 = bar(); A<decltype(i)>::foo(); // value A<decltype(r)>::foo(); // reference A<decltype(a1)>::foo(); // value A<decltype(a2)>::foo(); // value A<decltype(bar())>::foo(); // reference A<decltype(a3)>::foo(); // value } 

उत्पादन:

 value reference value value reference value 

§7.1.6.4 [dcl.spec.auto] p6

एक घोषणाकर्ता-आईडी का प्रकार 8.3 के अनुसार निर्धारित किया गया है, घोषितकर्ता-आईडी का उपयोग करके घोषित वैरिएबल के प्रकार को टेंटल तर्क कटौती के नियमों का उपयोग करके अपने प्रारंभिक प्रकार से निर्धारित किया जाता है।

इसका मतलब यह है कि एक फंक्शन कॉल के दौरान auto मॉडलों टेम्पलेट तर्क कटाव के अलावा कुछ भी नहीं।

 template<class T> void f(T){} // #1, will also be by-value template<class T> void g(T&){} // #2, will always be by-reference 

ध्यान दें कि # 1 हमेशा पारित तर्क का प्रतिलिपि बनायेगा, चाहे आप कोई संदर्भ या कुछ और पास करें (जब तक आप विशेष रूप से टेम्पलेट तर्क निर्दिष्ट नहीं करते हैं जैसे कि f<int&>(intref); ।)

जो भी आप सही पक्ष से प्राप्त करते हैं ("=" का) कोई संदर्भ नहीं है। अधिक विशेष रूप से अभिव्यक्ति का परिणाम कभी भी संदर्भ नहीं होता है। इस प्रकाश में, उदाहरण में परिणाम के बीच का अंतर नोट करें।

 #include <typeinfo> #include <iostream> template< typename T > struct A { static void foo(){ std::cout<< "value" << std::endl; } }; template< typename T > struct A< T&> { static void foo(){ std::cout<< "reference" << std::endl; } }; float& bar() { static float t=5.5; return t; } int main() { auto a3 = bar(); A<decltype(bar())>::foo(); // reference A<decltype(a3)>::foo(); // value }