อะไรคือความแตกต่างระหว่าง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
ประเภท