thể trùng lặp:
g++ -Wall not warning about double-> int castg ++ cảnh báo khi đôi/float được chuyển thành số nguyên unsigned mà không sử dụng -Wconversion
mỗi câu hỏi here, chuyển đổi trực tiếp từ đôi/phao để unsigned integer không di động. Tôi tìm thấy tôi đã có một vài trường hợp trong mã của tôi, nơi điều này xảy ra và tôi muốn nói với g + + để cảnh báo tôi nếu điều này xảy ra, nhưng tôi không thể tìm thấy một tùy chọn như vậy. Có ai biết nếu có một lựa chọn để làm điều này?
Lưu ý: Tôi thấy -Wversionversion, nhưng điều đó cũng cảnh báo về tất cả các loại chuyển đổi khác mà tôi không quan tâm (như chuyển int sang unsigned int, di động theo tiêu chuẩn).
Edit: Đây là một ví dụ mã mà tôi muốn thấy cảnh báo:
double dblNumber = -234;
unsigned long uintNumber = dblNumber;
Một phiên bản của g ++, việc này mang lại cho tôi một giá trị số nguyên của 0xFFFFFF16 (đó là -234 trong bổ sung 2 của) . Ngày khác nó cho tôi 0. Rõ ràng mã là mơ hồ, đó là lý do tại sao nó là dễ hiểu không được coi là di động.
@djechlin: * "Lưu ý: Tôi thấy -Wconversion, nhưng cũng cảnh báo về tất cả các loại chuyển đổi khác mà tôi không quan tâm (như chuyển int sang unsigned int, di động theo chuẩn)." *. – Zeta
Tôi thừa nhận tôi không thấy câu hỏi khác, nhưng nó không thực sự địa chỉ không sử dụng -Wconversion. Nó có vẻ kỳ lạ mà tôi không cảnh báo về điều này theo mặc định, đặc biệt là kể từ khi các phiên bản khác nhau của g + + phản ứng khác nhau gây ra một số triển khai để âm thầm thất bại. – KyleL
@KdawgUD Bạn có thể hiển thị một đoạn mã ví dụ không? Không chắc chắn chính xác bạn thực hiện chuyển đổi như thế nào.Bất cứ khi nào bạn cast một cách rõ ràng từ một loại khác, ví dụ 'un_signed_int_value = (unsigned int) double_value;' bạn đang nói với trình biên dịch * Tôi biết những gì tôi đang làm *. Vì vậy, tôi không thấy lý do tại sao trình biên dịch sẽ cảnh báo về các chuyển đổi như vậy. Trong thực tế, các diễn viên rõ ràng sẽ ngăn chặn bất kỳ cảnh báo nếu có một. Trừ khi tôi hiểu lầm câu hỏi của bạn, điều bạn đang yêu cầu là không thể. –