Một số lớp tôi gặp, có một chuỗi constructor kép:hiệu quả chuỗi constructor
construct(const std::string& s);
construct(const char* s);
Có một constructor std::string
có lợi ích rõ ràng của việc có thể để vượt qua một std::string
mà không c_str()
. Tuy nhiên, nếu đối số được lưu trữ trong chuỗi std :: anyway, có lợi ích gì khi có hàm tạo const char*
không?
Đặc biệt:
construct(const std::string& s) : m_string(s) {}
construct(const char* s) : m_string(s) {}
std::string m_string;
các nhà xây dựng thứ hai Sẽ nhanh hơn cho xâu và char*
biến, hoặc nó sẽ được tối ưu hóa đi?
Câu hỏi bổ sung - không C++ 11 di chuyển xây dựng có thay đổi gì ở đây không?
Trong C++ 11 với cấu trúc di chuyển, bạn có thể sử dụng (như một ctor đơn cho cả hai): 'construct (std :: string s): m_string (std :: move (s)) {}'. Không hiệu quả như chuyển tiếp hoàn hảo, nhưng gần như (hai di chuyển tạm thời). – dyp
'std :: string (" Hello There ")' đó là lý do tại sao bạn có một hàm tạo cho 'const char *', nhưng tôi không chắc bạn đang hỏi gì ở đây ... – user2485710
nó không phải nhanh hơn, nó chỉ là một constructor thứ hai bị quá tải để xử lý đơn giản hơn – Alex