Bằng cách thử, tôi đã biết rằng cần phải đặt dấu ngoặc xung quanh toán tử điều kiện trong câu lệnh cout. Dưới đây là một ví dụ nhỏ:Toán tử điều kiện được sử dụng trong câu lệnh cout
#include <iostream>
int main() {
int a = 5;
float b = (a!=0) ? 42.0f : -42.0f;
// works fine
std::cout << b << std::endl;
// works also fine
std::cout << ((a != 0) ? 42.0f : -42.0f) << std::endl;
// does not work fine
std::cout << (a != 0) ? 42.0f : -42.0f;
return 0;
}
Đầu ra là:
42
42
1
Tại sao khung này cần thiết? Kiểu kết quả của toán tử điều kiện được biết trong cả hai trường hợp, phải không?
Chỉ cần lưu ý, 'cout <<' trả về 'cout', không phải bất kỳ điều gì về trạng thái hợp lệ. failbit/badbit sẽ được thiết lập, nhưng '(std :: cout << (a! = 0))' luôn trả về một tham chiếu đến 'std :: cout'. '-42.0f' sẽ không bao giờ được trả về, vì tham chiếu đó luôn luôn nên boolean đánh giá là true. –
cảm ơn, thậm chí không nghĩ về tiền lệ – m47h
@SamDeHaan: vâng. Xin lỗi, tôi có lẽ hơi cẩu thả trong lời giải thích của tôi. Biểu thức "cout << x" trả về cout. Nhưng để biểu thức "cout? A: b" được đánh giá, cout đầu tiên phải được truyền tới một giá trị nào đó là toán hạng hợp lệ cho toán tử?:. Trong trường hợp này, nó là (toán tử void *) thực hiện công việc. Toán tử đó trả về NULL iff một cờ lỗi được thiết lập. Xem: –