2010-09-21 23 views
13

Khi so sánh một loại lớn hơn int, với hằng số nguyên, tôi có nên đặt hằng số ở bên trái hoặc bên phải để đảm bảo việc so sánh chính xác được thực hiện không?Điều kiện Yoda và quảng bá số nguyên

int64_t i = some_val; 
if (i == -1) 

hoặc nó nên là:

if (-1 == i) 

Có bất kỳ tình huống mà cả hai trường hợp là không giống với so với -1LL (nơi int64_tlong long)?

+5

yoda là một thẻ tuyệt vời :) –

+4

một thẻ tuyệt vời Yoda là :-) –

Trả lời

11

Việc bạn đặt nó ở phía bên phải hay bên tay trái không quan trọng; toán tử == hoàn toàn đối xứng.

Nếu cả hai toán hạng cho toán tử == có loại số học, như trong trường hợp này, thì "chuyển đổi số học thông thường" được áp dụng (C99 §6.5.9). Trong trường hợp này, các quy tắc áp dụng là:

Nếu cả hai toán hạng đã ký các kiểu nguyên hoặc cả hai đã chưa được ký loại nguyên, các toán hạng với loại cấp bậc chuyển đổi số nguyên ít được chuyển đổi sang kiểu của toán hạng với thứ hạng cao hơn. (C99 §6.3.1.8)

Vì vậy, -1 được chuyển thành int64_t. -1LL không có sự khác biệt.

+0

Tuyệt vời, chính xác những gì tôi muốn biết. –

+15

Ngoài câu trả lời: Lý do thông thường để đặt hằng số đầu tiên là giúp bắt lỗi chính tả: Nếu bạn nhập sai '==' thành '=', thì trình biên dịch sẽ phàn nàn rằng bạn không thể gán cho hằng số. Cách khác xung quanh (liên tục ở phía bên tay phải), một khiếu nại từ trình biên dịch không được bảo đảm. –

Các vấn đề liên quan