(int) + 4*5;
Tại sao điều này (thêm một kiểu với một giá trị) có thể thực hiện được? (đã thử với g ++ và gcc.)
Tôi biết rằng điều đó không có ý nghĩa (và không ảnh hưởng gì), nhưng tôi muốn biết tại sao điều này lại có thể.
(int) + 4*5;
Tại sao điều này (thêm một kiểu với một giá trị) có thể thực hiện được? (đã thử với g ++ và gcc.)
Tôi biết rằng điều đó không có ý nghĩa (và không ảnh hưởng gì), nhưng tôi muốn biết tại sao điều này lại có thể.
cppinsights
giúp hiểu mã trông như thế nào từ quan điểm giao diện người dùng của trình biên dịch. Nó cũng có một phiên bản trực tuyến, bạn có thể xem những gì nó nói về ví dụ của bạn (giống 'parenthesization' như câu trả lời của bạn đã được đưa ra)
+(int)+ 4*5;
và -(int)- 4*5;
và -+-+-(int)-+-+- 4*5;
và ít nên thơ;
Câu trả lời:
Ở +
đây là toán +
tử một ngôi , không phải toán tử cộng nhị phân . Không có sự bổ sung nào xảy ra ở đây.
Ngoài ra, cú pháp (int)
được sử dụng để đánh máy.
Bạn có thể đọc lại tuyên bố đó dưới dạng
(int) (+ 4) * 5;
được phân tích cú pháp là
((int) (+ 4)) * (5);
mà nói,
+
tử một ngôi cho giá trị hằng số nguyên 4
.int
5
Điều này tương tự như (int) (- 4) * (5);
, trong đó việc sử dụng toán tử một ngôi quen thuộc hơn.
Trong trường hợp của bạn, đơn nguyên +
và dàn diễn viên int
- cả hai đều dư thừa.
(+ 4)
không được tạo toán hạng+4
, nó có nghĩa là áp dụng một ngôi +
cho toán hạng 4
, điều này thực sự là không phù hợp trong trường hợp của OP, nhưng có thể gây ra thăng hạng số nguyên hoặc phân rã mảng trong các trường hợp khác. Ví dụ char c = 0; sizeof +c == sizeof c
có lẽ là sai và sizeof +"a"
có lẽ không phải 2.
42;
:-)
Điều này được hiểu là ((int)(+4)) * 5
. Đó là, một biểu thức +4
(một toán tử cộng một bậc được áp dụng cho một chữ 4
), được ép kiểu để nhập int
với kiểu ép kiểu C và kết quả được nhân với 5
.
(int)-4*5