Tôi đang bối rối về phân công trực tiếp và ternary có điều kiện khai thác được ưu tiên:ternary có điều kiện và toán tử gán ưu tiên
#include<stdio.h>
int main(void)
{
int j, k;
j = k = 0;
(1 ? j : k) = 1; // first
printf("%d %d\n", j, k);
j = k = 0;
1 ? j : k = 1; // second
printf("%d %d\n", j, k);
return 0;
}
Tôi mong chờ đầu ra là:
1 0
1 0
Nhưng nó sẽ xảy ra là:
1 0
0 0
Plus Tôi nhận được cảnh báo này:
main.cpp: 20: cảnh báo: tuyên bố không có tác dụng
đó là khoảng dòng tôi nhận xét như thứ hai.
Vì toán tử gán trực tiếp có ít ưu tiên hơn toán tử điều kiện bậc ba, tôi đã mong các dòng được nhận xét là đầu tiên và thứ hai là tương đương. Nhưng không phải vậy.
Tôi cố gắng này với g ++ --version (Ubuntu 4.4.3-4ubuntu5) 4.4.3
C++ là một điều kỳ diệu hay là một con thú? Sau khi dành một nửa chương trình cuộc sống của tôi với nó, tôi vẫn có thể bị bắt không biết ý nghĩa của những biểu thức đơn giản như thế này. Tôi phải nhìn vào tiêu chuẩn này. – Suma