Có một số constructors cho std::string
. Tôi đã tìm kiếm một cách để tránh tái phân bổ và tôi ngạc nhiên rằng có một nhà xây dựng điền nhưng không có "dự trữ" constructor.Tại sao không có hàm tạo đặt trước cho std :: string?
std::string (size_t n, char c);
nhưng không
std::string (size_t n);
Vì vậy, tôi phải gọi reserve()
sau khi nó đã được phân bổ mặc định (16 byte trong trường hợp của tôi), chỉ để ngay lập tức phân bổ lại nó?
Có lý do tại sao không có nhà xây dựng như vậy để dự trữ không gian trực tiếp khi đối tượng được tạo ra, thay vì phải làm điều đó theo cách thủ công? Hoặc tôi đang thiếu một cái gì đó và có một số cách để làm điều này?
Sử dụng hàm tạo lấp đầy là lãng phí thời gian, vì nó sẽ lặp qua bộ nhớ chỉ để bị ghi đè và cũng gây ra kích thước sai, vì s.length()
báo cáo N
thay vì 0
.
Bạn có chắc chắn 16 byte được đặt trước theo mặc định không? ('sizeof (std :: string)' không có gì để làm với điều đó) – deviantfan
@deviantfan, đó là thực hiện xác định – SingerOfTheFall
@SingerOfTheFall Có, giống như 16 byte quá. Tôi đặc biệt có nghĩa là thực hiện Devolus – deviantfan