Toán tử điều kiện (?:) là toán tử ba ngôi (ternary operator) – nhậ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 ngầm sang
bool. Nó được đánh giá và tất cả hiệu ứng phụ hoàn tất trước khi tiếp tục. - Nếu toán hạng đầu đánh giá là
true(1), toán hạng thứ hai được đánh giá. - Nếu toán hạng đầu đánh giá là
false(0), 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 toán hạng được đánh giá – thứ hai hoặc thứ ba. Chỉ một trong hai toán hạng cuối được đánh giá trong biểu thức điều kiện. Đánh giá toán tử điều kiện khá phức tạp. Các bước trên chỉ là giới thiệu nhanh. Biểu thức điều kiện có tính kết hợp từ phải sang trái. Toán hạng đầu phải là kiểu nguyê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 cùng kiểu, kết quả là kiểu đó.
- Nếu cả hai là kiểu số học hoặc liệt kê, các chuyển đổi số học thông thường được thực hiện để đưa về kiểu chung.
- Nếu cả hai là kiểu con trỏ hoặc một là con trỏ và một là biểu thức hằng số đánh giá thành 0, chuyển đổi con trỏ được thực hiện.
- Nếu cả hai là kiểu tham chiếu, chuyển đổi tham chiếu được thực hiện.
- Nếu cả hai là kiểu
void, kiểu chung làvoid. - Nếu cả hai là cùng kiểu do người dùng định nghĩa, kiểu chung là kiểu đó.
- Nếu toán hạng khác kiểu và ít nhất một là kiểu do người dùng định nghĩa, quy tắc ngôn ngữ dùng để xác định kiểu chung.
Ví dụ
#include <iostream>
using namespace std;
int main() {
int i = 1, j = 2;
cout << (i > j ? i : j) << " is greater." << endl;
}
Kết quả
2 is greater.