यह एक डिजाइन सवाल नहीं है, वास्तव में, हालांकि यह ऐसा प्रतीत हो सकता है। (ठीक है, ठीक है, यह एक डिजाइन सवाल है)। मैं क्या सोच रहा हूं कि क्यों सी ++ std::fstream
कक्षाएं अपने निर्माता या खुली विधियों में std::string
नहीं लेती हैं। हर कोई कोड उदाहरण तो प्यार करता है:std :: fstream कक्षाएं std :: string क्यों नहीं लेती हैं?
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string filename = "testfile";
std::ifstream fin;
fin.open(filename.c_str()); // Works just fine.
fin.close();
//fin.open(filename); // Error: no such method.
//fin.close();
}
यह मैं हर समय हो जाता है जब फाइलों के साथ काम। निश्चित रूप से सी ++ लाइब्रेरी std::string
का उपयोग कहीं भी करेगी?
नमूना अधिभार संकल्प नियमों के साथ किसी अस्पष्टता का कारण नहीं बनना चाहिए। 'एफ (char *, std :: string)' एक [सटीक मिलान] है (http://www.lcdf.org/c++/clause13.html#s13.3.3.1.1) जबकि अन्य को रूपांतरण की आवश्यकता होगी, इसलिए सबसे अच्छा व्यवहार्य समारोह होगा।यदि आपने पहले 'f' को हटा दिया है, तो, "(char * &, std :: string &) -> (char *, std :: string) -> (char *, char *)" एक [बेहतर रूपांतरण अनुक्रम है) ] (http://www.lcdf.org/c++/clause13.html#s13.3.3) की तुलना में "(चार * &, std :: स्ट्रिंग और) -> (चार *, std :: स्ट्रिंग) -> (एसटीडी: : स्ट्रिंग, चार *) ", दूसरा 'एफ' सबसे अच्छा व्यवहार्य कार्य होगा। क्या मैं कुछ भूल रहा हूँ? – outis
जैसा कि मैं हूं, ठीक है। – wilhelmtell
इस माइक्रो अनुकूलन वास्तव में मूर्खतापूर्ण, के रूप में (1) तार कसकर भाषा के किसी भी निर्माण के लिए युग्मित कर रहे हैं, विशेष रूप से तार के साथ (यह कह के समान है, मैं शॉर्ट्स पर निर्भर 'नहीं करना चाहती GMP'), और (2) 'चार *', बुराई है आप अगर वे की जरूरत नहीं है इसका इस्तेमाल करने के लिए उपयोगकर्ताओं प्रोत्साहित नहीं करना चाहिए, और संकलन समय में मिलीसेकंड में अच्छी तरह से इसके लायक है, अंत में (3) वे परिभाषित कर सकता था '' और उपयोग इसके आधार पर स्ट्रिंग, इसलिए मैं दावा करता हूं कि इस मामले के लिए decoupling निर्भरता वैध कारण नहीं है। –