Tôi hiện đang chuyển một ứng dụng C++ sang môi trường bị hạn chế một chút. Ứng dụng sử dụng các lớp STL, chuỗi và luồng. Tôi đang viết lại các phiên bản đơn giản của những thứ này sẽ phát độc đáo trong môi trường của tôi.C++ Fail mà không có định nghĩa toán tử
Điều tôi quan tâm là ứng dụng của tôi đang biên dịch ngay cả khi không có tất cả các định nghĩa toán tử cần thiết. Ví dụ: đối với các lớp chuỗi của tôi, tôi đã xác định:
string operator+ (const string& lhs, const string& rhs);
và điều này là đủ. Tuy nhiên, tôi nhận thấy có những trường hợp thường có bí ẩn + "một số chuỗi liên tục" và điều này không được định nghĩa trong mã của tôi ở bất kỳ đâu. Khi tôi thêm nó một cách rõ ràng, nó đã được sử dụng:
string operator+ (const string& lhs, const char* rhs);
Điều gì đang xảy ra trước đó? Nó được biên dịch thành công trước khi tôi thêm hàm thứ hai. Chắc chắn trình biên dịch sẽ không thể suy ra cách nối các chuỗi kiểu c vào lớp chuỗi của tôi.
Tôi đang nhận được hành vi lạ trong chương trình của mình ngay bây giờ và tôi tự hỏi liệu đó có phải do các toán tử khác không được xác định không. Có cách nào để thực thi trình biên dịch để yêu cầu các định nghĩa toán tử như vậy nếu nó cần thiết cho chương trình?
P.S. Lớp chuỗi của tôi nằm trong một không gian tên duy nhất và không liên quan đến tiêu chuẩn ::
Bạn có chuyển đổi hoặc hàm tạo ngầm ẩn đổi từ 'const char *' sang lớp 'string' của bạn không? –
Có, lớp chuỗi của tôi có một hàm tạo với tham số "const char * cstr". Bạn có nghĩ rằng đó có thể là nó? – hayesti
@Bob: [Câu hỏi này] (http://stackoverflow.com/questions/2346083/) có thể được bạn quan tâm. –