C ++ 0x sẽ làm cho đoạn mã sau và mã tương tự trở nên sai lệch, bởi vì nó yêu cầu cái gọi là chuyển đổi thu hẹp từ a double
thành a int
.
int a[] = { 1.0 };
Tôi tự hỏi liệu kiểu khởi tạo này có được sử dụng nhiều trong mã thế giới thực hay không. Có bao nhiêu mã sẽ bị hỏng bởi thay đổi này? Có nhiều nỗ lực để sửa lỗi này trong mã của bạn không, nếu mã của bạn bị ảnh hưởng?
Để tham khảo, hãy xem 8.5.4 / 6 của n3225
Chuyển đổi thu hẹp là một chuyển đổi ngầm định
- từ kiểu dấu phẩy động sang kiểu số nguyên hoặc
- từ kép dài sang kép hoặc float, hoặc từ kép sang float, ngoại trừ trường hợp nguồn là biểu thức hằng số và giá trị thực sau khi chuyển đổi nằm trong phạm vi giá trị có thể được biểu diễn (ngay cả khi nó không thể được biểu diễn chính xác) hoặc
- từ kiểu số nguyên hoặc kiểu liệt kê chưa được ghi vào kiểu điểm fl oating-point, ngoại trừ trường hợp nguồn là một biểu thức hằng số và giá trị thực sau khi chuyển đổi sẽ phù hợp với kiểu đích và sẽ tạo ra giá trị ban đầu khi được chuyển đổi trở lại kiểu ban đầu, hoặc
- từ kiểu số nguyên hoặc kiểu liệt kê không được ghi vào kiểu số nguyên không thể đại diện cho tất cả các giá trị của kiểu ban đầu, ngoại trừ trường hợp nguồn là biểu thức hằng số và giá trị thực sau khi chuyển đổi sẽ phù hợp với kiểu đích và sẽ tạo ra giá trị ban đầu khi chuyển đổi trở lại loại ban đầu.