30/09/2018, 16:06
Biểu thức đúng trong C++
#include<iostream>
int main()
{
int i, j;
i = 1;
j = 2;
std::cout << (i=j)++ << std::endl;
std::cout << i+j++ << std::endl;
std::cout << ++(i + j) << std::endl;
std::cout << ++i++ + j << std::endl;
return 0;
}
Biểu thức nào đúng ? Giải thích ?
Ai giúp mình với
Bài liên quan
2 biểu thức sau sai vì khi xét độ ưu tiên toán tử, toán tử ++ tiền tố sẽ thực hiện trước, và cái mà tiền tố ++ tác động đến phải là 1 toán hạng, chứ không phải 1 biểu thức (nghĩa là nó phải tác động lên giá trị, đã được tính toán trước rồi). Như vậy thì 2 biểu thức trên đúng, vì hậu tố ++ sẽ thực hiện sau khi biểu thức trong ngoặc (i=j) hoặc i+j được tính toán xong, khi đó nó trở thành giá trị, và toán tử hậu tố ++ có thể tác động lên.
biểu thức thứ 3 như vậy thì mình hiểu rồi. Đang ngẫm lại cái biểu thức thứ 4 kìa
Có thể giải thích cho mình cách nó thực hiện biểu thức thứ 1 k? Tại sao ra bằng 2 vậy???
Ai Giải thích đi ạ.
Bạn chạy thử cái này, nó sẽ báo 2 lỗi giống nhau. Mình post lỗi đó ra luôn:
Vậy theo mình nghĩ compiler nó coi i++ là 1 biểu thức. Nên trường hợp thứ 2 trên là sai.
Còn trường hợp 1 thì mình cũng hiểu hơi hoang mang
vậy là Compiler coi 2 biểu thức trên là giống nhau? Tại sao nhỉ ? Nó ưu tiên tính hậu tố ++ trước rồi mới tính đến tiền tố ++ ư?
Cho mình hỏi vì sao lúc này nó in ra i=2 chứ không phải i = 3??? Vì mình đọc trong sách thấy phần ưu tiên toán tử << thấp hơn ++ mà???