Sự khác biệt giữa std::stringvà là std::basic_stringgì? Và tại sao cả hai đều cần thiết?
Câu trả lời:
std::basic_stringlà một mẫu lớp để tạo chuỗi ngoài các kiểu ký tự, std::stringlà một mẫu typedefdà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::stringlà một mô tả của std::basic_string<T>:
typedef std::basic_string<char> string
std::basic_stringlà cần thiết để có một giao diện tương tự cho tất cả các loại chuỗi ( wstringví dụ).
stringlà 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::stringlà phần khởi tạo của std::basic_stringmẫ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_stringmà không có charkiểu.