Arasındaki fark nedir std::string
ve std::basic_string
? Ve neden her ikisi de gerekli?
Yanıtlar:
std::basic_string
karakter tiplerinin dışında dizeleri yapmak için bir sınıf şablonu vardır std::string
bir olduğunu typedef
için bu sınıf şablonun bir uzmanlık için char
. Evet, ikisi de gereklidir (veya en azından standart tarafından gereklidir).
std::string
şunların bir örneğidir std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
tüm dizge türleri için benzer bir arayüze sahip olmak gerekir ( wstring
örneğin).
string
a, uzmanlık arasında basic_string
.
namespace std { typedef basic_string<char> string; }
Teknik olarak, gerçekten bir örnekleme değildir, ama en azından daha yakındır (somutlaştırma, tanımı gereği, bir örnek oluşturur ve typedef, bir örnek değil, yalnızca bir ad oluşturur. ).
A std::string
, std::basic_string
şablonun bir tür char
. Sen yanında şeylerin dizeleri yapmak, böylece hem ihtiyaç char
, böyle bir std::basic_string<wchar_t>
geniş karakter dizesi için. Veya 32 bit elemanlı bir dizge istiyorsanız std::basic_string<unsigned int>
,.
std::basic_string
Bir char
tür olmadan somutlaştırmayacağınız zamanlar için bir kullanım durumu sağlar .