อะไรคือความแตกต่างระหว่างstd::stringและstd::basic_string? และทำไมทั้งสองจึงจำเป็น?
อะไรคือความแตกต่างระหว่าง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ประเภท