Яка різниця між std::string
та std::basic_string
? І навіщо потрібні обидва?
Відповіді:
std::basic_string
є шаблоном класу для створення рядків із типів символів, std::string
є typedef
спеціалізацією цього шаблону класу для char
. Так, вони обоє потрібні (або принаймні вимагаються стандартом).
std::string
є екземпляром std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
необхідно мати подібний інтерфейс для всіх типів рядків ( wstring
наприклад).
string
є спеціалізація в basic_string
.
namespace std { typedef basic_string<char> string; }
Технічно це теж не є екземпляром, але принаймні ближче (інстанціація, за визначенням, створює екземпляр, а typedef лише створює ім'я, а не екземпляр ).
A std::string
- це екземпляр std::basic_string
шаблону з типом char
. Вам потрібно і те, і інше, щоб ви могли складати ряд речей, крім того char
, наприклад, std::basic_string<wchar_t>
для рядка широких символів. Або , якщо ви хочете рядок з 32 - бітними елементами std::basic_string<unsigned int>
.
std::basic_string
створили б інстанцію без char
типу.