Tại sao string::comparetrả về một intthay vì một loại nhỏ hơn như shorthoặc char? Sự hiểu biết của tôi là phương thức này chỉ trả về -1, 0 hoặc 1.
Phần thứ hai, nếu tôi thiết kế một phương thức so sánh để so sánh hai đối tượng cùng loại Foovà tôi chỉ muốn trả về -1, 0 hoặc 1, thì việc sử dụng shorthay charnói chung là một ý tưởng hay?
CHỈNH SỬA: Tôi đã được sửa, string::comparekhông trả về -1, 0 hoặc 1, nó thực tế trả về giá trị> 0, <0 hoặc 0. Cảm ơn vì đã giúp tôi theo dõi.
Có vẻ như câu trả lời là đại khái, không có lý do gì để trả về một kiểu nhỏ hơn intvì các giá trị trả về là "rvalues" và những "rvalues" đó không được lợi khi nhỏ hơn kiểu int (4 byte). Ngoài ra, nhiều người đã chỉ ra rằng dù sao thì các thanh ghi của hầu hết các hệ thống đều có kích thước int, vì các thanh ghi này sẽ được lấp đầy cho dù bạn cung cấp cho chúng giá trị 1, 2 hoặc 4 byte, không có lợi ích thực sự nào khi trả về giá trị nhỏ hơn.
CHỈNH SỬA 2: Trên thực tế, có vẻ như có thể có thêm chi phí xử lý khi sử dụng các kiểu dữ liệu nhỏ hơn như căn chỉnh, tạo mặt nạ, v.v. Sự đồng thuận chung là các kiểu dữ liệu nhỏ hơn tồn tại để tiết kiệm trên bộ nhớ khi làm việc với nhiều dữ liệu, như trong trường hợp của một mảng.
Hôm nay đã học được điều gì đó, một lần nữa cảm ơn các bạn!
string::compare()bạn liên kết đến nêu rõ giá trị trả về là <0, 0, và> 0 -not- -1, 0 và 1.
shorthoặc charthay thế là intgì? Hầu hết các kiến trúc sẽ lưu trữ giá trị trả về của một hàm trong một thanh ghi, và một intsẽ phù hợp với một thanh ghi cũng như một shorthoặc char. Và việc sử dụng charcho các kiểu số luôn là một ý tưởng tồi, đặc biệt khi bạn cần đảm bảo các giá trị đã ký được xử lý chính xác.
charsẽ là một ý tưởng tồi, vì việc kiểm tra mã cho giá trị trả về nếu nó nhỏ hơn 0 sẽ không thành công trên các nền tảng charchưa được ký.