सी की घोषणा ++ स्ट्रिंग is the following:क्या मूल_स्ट्रिंग <T> के लिए कोई उपयोग है जहां टी चरित्र प्रकार नहीं है?
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
CharT
चरित्र प्रकार है जो char
, wchar_t
, char16_t
और char32_t
हो सकता है; लेकिन सभी basic_string
के बाद एक टेम्पलेट है, इसलिए अन्य CharT
और अन्य आवंटकों के साथ तत्काल किया जा सकता है। मैं अन्य allocators मैं अन्य डेटा प्रकार के तार के लिए उपयोग के मामलों में लगता है कि करने में असमर्थ हूँ, उदाहरण के लिए के लिए कुछ उपयोग के मामलों में लगता है सकते हैं:
using string = std::basic_string<int>;
पूर्णांकों की एक स्ट्रिंग का उपयोग करना, हम इसे एक स्ट्रिंग के रूप में प्रारंभ नहीं कर सकते हैं (स्पष्ट) न ही यू 32 स्ट्रिंग (यह स्पष्ट नहीं है, कम से कम मेरे लिए); लेकिन हम int
के रूप में लंबे समय के रूप में सूची का निहित प्रकार परिवर्तनीय है initializer_list
के साथ प्रारंभ कर सकते हैं:
string err1("test"); // Error!
string err2(U"test"); // Error!
string err3{"test"}; // Error!
string err4{U"test"}; // Error!
string err5 = "test"; // Error!
string err6 = U"test"; // Error!
string success1({U't', U'e', U's', U't'});
string success2 = {U't', U'e', U's', U't'};
string success3({'t', 'e', 's', 't'});
string success4 = {'t', 'e', 's', 't'};
लेकिन फिर भी अगर हम एक पूर्णांक स्ट्रिंग प्रारंभ करने का प्रबंधन है, हम इसे सामान्य तरीके से उपयोग नहीं कर सकते:
std::cout << success1; // Error! expected 116101115116
केवल basic_string
cout
साथ प्रयोग किया जा करने की उम्मीद सामान्य होते हैं, कि समझ में आता है: सब के बाद हम कल्पना नहीं कर सकते कि कैसे पूर्णांकों का एक स्ट्रिंग या MyFancyClass
तों की एक स्ट्रिंग मुद्रित करने के लिए माना जाता है।
लेकिन वैसे भी, का निर्माण अजीबbasic_string
के उदाहरणों को प्रतिबंधित नहीं किया गया है; अंतर्निहित प्रकार को सीमित किए बिना basic_string
पर उपयोग किए जाने वाले सुविधाओं की कमी के कारण एक हाथ पर वर्जित नहीं किया गया है (अवधारणाओं के बिना) और यह मुझे आश्चर्यचकित करता है :
- क्या
std::basic_string<T>
के लिए कोई उपयोग है जहांT
कोई वर्ण प्रकार नहीं है?
के रूप में किसी भी उपयोग मैं चीजें हैं जो केवल दूसरे शब्दों में T
के तार के साथ प्राप्त किया जा सकता है और उस T
के वेक्टर के साथ नहीं किया जा सकता है (या यह करने के लिए काफी कठिन होगा), के बारे में सोच रहा हूँ :
- क्या आपने कभी ऐसी स्थिति का सामना किया है जहां
T
की एक स्ट्रिंग बेहतर विकल्प है?
क्या आप ऐसा कुछ सोच सकते हैं जो एक स्ट्रिंग वेक्टर से बेहतर कर सकती है? – NathanOliver
@NathanOliver प्रिंटिंग? – BoBTFish
क्या यह लगभग एक ही सवाल नहीं है "आप' std :: basic_string 'के साथ क्या कर सकते हैं कि आप 'std :: vector '? "के साथ नहीं कर सकते –
user463035818