this answer से प्रेरित होकर, मैं अगले उदाहरण की कोशिश की:मानचित्र प्रारंभ करते समय ब्रेसिज़ को क्यों नहीं छोड़ सकते हैं?
#include <map>
#include <string>
#include <iostream>
int main()
{
const std::map< int, std::string > mapping = {
1, "ONE",
2, "TWO",
};
const auto it = mapping.find(1);
if (mapping.end() != it)
{
std::cout << it->second << std::endl;
}
else
{
std::cout << "not found!" << std::endl;
}
}
और संकलन अगले त्रुटि संदेश (छ ++ 4.6.1) के साथ विफल:
gh.cpp:11:5: error: could not convert '{1, "ONE", 2, "TWO"}' from '<brace-enclosed initializer list>' to 'const std::map<int, std::basic_string<char> >'
मुझे पता है कि यह कैसे तय करने के लिए:
const std::map< int, std::string > mapping = {
{1, "ONE"},
{2, "TWO"},
};
लेकिन संकलन शीर्ष उदाहरण में क्यों विफल रहता है?
'std :: pair' एक कुल है, इसलिए इसे अपनी प्रारंभिक सूची की आवश्यकता नहीं है (जैसा कि इसे [मेरे द्वारा लिंक किए गए उत्तर] में बताया गया है (http://stackoverflow.com/a/ 11735045/476681) या, क्या मैं गलत हूं? –
@ BЈовић वास्तव में, 'std :: pair' कुल नहीं है। मुझे नियमों को नहीं पता कि '{}' छोड़ा जा सकता है *, लेकिन इस मामले में इसे अनुमति देने के लिए यह समझ में नहीं आता है। मैं बाद में और अधिक कहने में सक्षम हो सकता हूं ... – juanchopanza
@ BЈовић §8.5 पर देखकर, मुझे लगता है कि कारण यह है कि ब्रेस एलिजन केवल कुल प्रकार के लिए अनुमति है। – juanchopanza