Toán tử điều kiện (? :) là một toán tử bậc ba (cần ba toán hạng). Toán tử điều kiện hoạt động như sau -
- Toán hạng đầu tiên được chuyển đổi hoàn toàn thành bool. Nó được đánh giá và hoàn thành tất cả các tác dụng phụ trước khi tiếp tục.
- Nếu toán hạng đầu tiên được đánh giá là true (1), thì toán hạng thứ hai được đánh giá.
- Nếu toán hạng đầu tiên được đánh giá là false (0), thì toán hạng thứ ba được đánh giá.
Kết quả của toán tử điều kiện là kết quả của bất kỳ toán hạng nào được ước lượng - thứ hai hoặc thứ ba. Chỉ một trong hai toán hạng cuối cùng được đánh giá trong biểu thức điều kiện. Việc đánh giá toán tử điều kiện là rất phức tạp. Các bước trên chỉ là phần giới thiệu nhanh về nó. Biểu thức điều kiện có tính chất kết hợp từ phải sang trái. Toán hạng đầu tiên phải thuộc loại tích phân hoặc con trỏ. Các quy tắc sau áp dụng cho toán hạng thứ hai và thứ ba -
- Nếu cả hai toán hạng đều thuộc cùng một kiểu thì kết quả là thuộc kiểu đó.
- Nếu cả hai toán hạng đều thuộc loại số học hoặc kiểu liệt kê, thì các chuyển đổi số học thông thường (được đề cập trong Chuyển đổi chuẩn) sẽ được thực hiện để chuyển chúng thành một loại thông thường.
- Nếu cả hai toán hạng đều thuộc loại con trỏ hoặc nếu một là kiểu con trỏ và một là biểu thức hằng số có giá trị bằng 0, thì các chuyển đổi con trỏ sẽ được thực hiện để chuyển chúng thành một kiểu chung.
- Nếu cả hai toán hạng đều thuộc loại tham chiếu, thì các chuyển đổi tham chiếu sẽ được thực hiện để chuyển chúng thành một loại chung.
- Nếu cả hai toán hạng đều có kiểu void, thì kiểu chung là kiểu void.
- Nếu cả hai toán hạng đều thuộc cùng một kiểu do người dùng xác định, thì kiểu chung là kiểu đó.
- Nếu các toán hạng có các kiểu khác nhau và ít nhất một trong các toán hạng có kiểu do người dùng xác định thì các quy tắc ngôn ngữ được sử dụng để xác định kiểu chung. (Xem cảnh báo bên dưới.)
ví dụ
#include <iostream> using namespace std; int main() { int i = 1, j = 2; cout << ( i > j ? i : j ) << " is greater." << endl; }
Đầu ra
Điều này sẽ cung cấp đầu ra -
2 is greater.