Sự khác biệt giữa std::string
và là std::basic_string
gì? Và tại sao cả hai đều cần thiết?
Câu trả lời:
std::basic_string
là một mẫu lớp để tạo chuỗi ngoài các kiểu ký tự, std::string
là một mẫu typedef
dành cho chuyên môn hóa của mẫu lớp đó char
. Có, cả hai đều cần thiết (hoặc ít nhất là theo yêu cầu của tiêu chuẩn).
std::string
là một mô tả của std::basic_string<T>
:
typedef std::basic_string<char> string
std::basic_string
là cần thiết để có một giao diện tương tự cho tất cả các loại chuỗi ( wstring
ví dụ).
string
là một chuyên ngành của basic_string
.
namespace std { typedef basic_string<char> string; }
Về mặt kỹ thuật, nó cũng không thực sự là một trình khởi tạo, nhưng ít nhất nó gần giống hơn (theo định nghĩa, việc tạo ra một thể hiện, và một typedef chỉ tạo ra một cái tên chứ không phải một thể hiện ).
A std::string
là phần khởi tạo của std::basic_string
mẫu với kiểu char
. Bạn cần cả hai để có thể tạo chuỗi những thứ bên cạnh đó char
, chẳng hạn như std::basic_string<wchar_t>
chuỗi ký tự rộng. Hoặc nếu bạn muốn một chuỗi có các phần tử 32 bit std::basic_string<unsigned int>
,.
std::basic_string
mà không có char
kiểu.