Apa perbedaan antara std::string
dan std::basic_string
? Dan mengapa keduanya dibutuhkan?
Jawaban:
std::basic_string
adalah template kelas untuk membuat string dari tipe karakter, std::string
adalah typedef
untuk spesialisasi template kelas itu char
. Ya, keduanya dibutuhkan (atau setidaknya disyaratkan oleh standar).
std::string
adalah contoh dari std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
perlu memiliki antarmuka yang serupa untuk semua jenis string ( wstring
misalnya).
string
adalah spesialisasi dari basic_string
.
namespace std { typedef basic_string<char> string; }
Secara teknis, ini juga bukan sebuah instantiation, tapi setidaknya lebih dekat (instantiation, menurut definisi, membuat sebuah instance, dan typedef hanya membuat sebuah nama, bukan sebuah instance ).
A std::string
adalah contoh std::basic_string
template dengan tipe char
. Anda membutuhkan keduanya sehingga Anda dapat membuat string hal-hal selain itu char
, seperti std::basic_string<wchar_t>
string karakter lebar. Atau jika Anda menginginkan string dengan elemen 32 bit std::basic_string<unsigned int>
,.
std::basic_string
tanpa char
tipe.