Sử dụng Casting null doesn't compile là nguồn cảm hứng, và từ bình luận Eric Lippert của:Tại sao chuyển đổi tiềm ẩn này từ int thành công việc?
Đó chứng tỏ một trường hợp thú vị. "uint x = (int) 0;" sẽ thành công ngay cả khi int không chuyển đổi hoàn toàn thành uint.
Chúng tôi biết điều này không làm việc, vì object
không thể được gán cho string
:
string x = (object)null;
Nhưng điều này không, mặc dù trực giác nó không nên:
uint x = (int)0;
Tại sao không trình biên dịch cho phép trường hợp này, khi int
không được chuyển đổi hoàn toàn thành uint
?
Tôi cho rằng cùng một lý do 'đơn vị x = 0' hoạt động. '0' là một int đã ký trừ khi bạn chỉ định' unit x = 0U'. – vcsjones
Có thể là 6.1.9 của spec và chiết khấu của int int, bởi vì 0 đã là một int. Trong khi thường một int không chuyển đổi hoàn toàn thành uint (6.1.2), một biểu thức * liên tục * của kiểu int có thể được chuyển đổi. –
Giá trị nào '0' ngầm có vẻ như là một biểu thức liên tục?Liệu trình biên dịch có bỏ qua '' int ''và sử dụng' 0' làm hằng số 'uint' không? – Yuck