Thông số kỹ thuật C ++ có định nghĩa:
- sự tồn tại của toán tử 'nhỏ hơn' đối với các tham số boolean và nếu vậy,
- kết quả của 4 hoán vị tham số?
Nói cách khác, các kết quả từ các hoạt động sau được xác định bởi đặc điểm kỹ thuật?
false < false
false < true
true < false
true < true
Trong cài đặt của tôi (Centos 7, gcc 4.8.2), đoạn mã bên dưới sẽ tiết lộ những gì tôi mong đợi (với lịch sử đại diện của C là sai là 0 và đúng là 1):
false < false = false
false < true = true
true < false = false
true < true = false
Trong khi tôi khá chắc chắn rằng hầu hết các trình biên dịch (tất cả?) Sẽ cho cùng một đầu ra, điều này có được quy định bởi đặc tả C ++ không? Hoặc là một trình biên dịch khó hiểu, nhưng tuân thủ đặc tả được phép quyết định rằng true là ít hơn false?
#include <iostream>
const char * s(bool a)
{
return (a ? "true" : "false");
}
void test(bool a, bool b)
{
std::cout << s(a) << " < " << s(b) << " = " << s(a < b) << std::endl;
}
int main(int argc, char* argv[])
{
test(false, false);
test(false, true);
test(true, false);
test(true, true);
return 0;
}
p <= q
có nghĩa là p implies q
khi p
và q
thuộc loại bool!
<=
có thể vô tình được đọc là một bên trái và rằng "chỉ khi" (nghĩa là "[về mặt vật chất] ngụ ý") đôi khi là một bộ gõ hoặc viết không chính thức tương tự như =>
(ví dụ, với một trục kép =
) . Một bên trái thậm chí đôi khi được đọc là "nếu", mặc dù tôi tin rằng điều này ít phổ biến hơn nhiều so với việc sử dụng một bên phải cho "chỉ khi".
std::min
trênstd::vector<bool>
như&&
.