ข้อกำหนด C ++ กำหนดไว้หรือไม่:
- การมีอยู่ของตัวดำเนินการ 'น้อยกว่า' สำหรับพารามิเตอร์บูลีนและหากเป็นเช่นนั้น
- ผลลัพธ์ของการเปลี่ยนลำดับพารามิเตอร์ 4 รายการคืออะไร?
กล่าวอีกนัยหนึ่งผลลัพธ์จากการดำเนินการต่อไปนี้ถูกกำหนดโดยสเปคหรือไม่
false < false
false < true
true < false
true < true
ในการตั้งค่าของฉัน (Centos 7, gcc 4.8.2) โค้ดด้านล่างจะแยกแยะสิ่งที่ฉันคาดหวัง (จากประวัติของ C ในการแทน false เป็น 0 และ true เป็น 1):
false < false = false
false < true = true
true < false = false
true < true = false
ในขณะที่ฉันค่อนข้างแน่ใจว่าคอมไพเลอร์ (ทั้งหมด?) ส่วนใหญ่จะให้ผลลัพธ์เดียวกันนี่คือข้อกำหนดของ C ++ หรือไม่ หรือเป็นสิ่งที่ทำให้งงงง แต่คอมไพเลอร์ตามข้อกำหนดได้รับอนุญาตให้ตัดสินใจว่าจริงน้อยกว่าเท็จ?
#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
หมายถึงp implies q
เวลาp
และq
ประเภทบูล!
<=
อาจจะอ่านโดยไม่ได้ตั้งใจเป็น leftarrow และ "ถ้า" (เช่น "[หมายถึง" [นัยสำคัญ] หมายถึง) rightarrow บางครั้งเรียงพิมพ์หรือเขียนคล้ายกับ=>
(กล่าวคือคล้ายกับเพลาสองเท่า=
) . บางครั้งคนที่เหลือก็อ่านว่า "ถ้า" แม้ว่าฉันจะเชื่อว่าสิ่งนี้เป็นเรื่องธรรมดาน้อยกว่าการใช้ลูกศรขวาสำหรับ "เฉพาะในกรณี"
std::min
ในการเป็นstd::vector<bool>
&&