Common use cases for macros over constexpr include:
* Compatibility with pre C++11 code, since constexpr was defined in C++11.
* Compatibility with libraries that make heavy use of the preprocessor, such as Boost.preprocessor
* Any library that requires preprocessor definitions to enable or disable different features.
* Allowing for build options: CMake and other compilers allow for setting preprocessor defines outside of the code, allowing for different options when building. Setting these to constexpr variables instead requires an additional .in configure_file in cmake to translate them, and may be unavailable for other build systems.
* Including different libraries depending on the operating system. Some C++ libraries are unix only, and require alternatives to work in windows. Since constexpr is used for setting the values of functions and variables, it can't be used for this.
* Setting different types depending on system: some architectures might work with different types more often, such as windows and wchar instead of char, or ulong vs ulonglong.
กรณีการใช้งานทั่วไปสำหรับมาโครบน constexpr ได้แก่: * ความเข้ากันได้กับโค้ด pre C++11 เนื่องจาก constexpr ถูกกำหนดไว้ใน C++11 * ความเข้ากันได้กับไลบรารีที่ใช้งานโปรเซสเซอร์ล่วงหน้าอย่างหนัก เช่น Boost.preprocessor * ไลบรารีใดๆ ที่ต้องใช้คำจำกัดความของโปรเซสเซอร์ล่วงหน้าเพื่อเปิดหรือปิดใช้งานคุณสมบัติต่างๆ * การอนุญาตตัวเลือกการสร้าง: CMake และคอมไพเลอร์อื่น ๆ อนุญาตให้ตั้งค่าตัวประมวลผลล่วงหน้ากำหนดนอกโค้ด ทำให้มีตัวเลือกที่แตกต่างกันเมื่อสร้าง การตั้งค่าเหล่านี้เป็นตัวแปร constexpr ต้องใช้ .in configuration_file เพิ่มเติมใน cmake แทนเพื่อแปล และอาจไม่พร้อมใช้งานสำหรับระบบบิลด์อื่น * รวมถึงไลบรารีต่าง ๆ ขึ้นอยู่กับระบบปฏิบัติการ ไลบรารี C++ บางตัวเป็นแบบยูนิกซ์เท่านั้น และจำเป็นต้องมีทางเลือกอื่นในการทำงานใน windows เนื่องจาก constexpr ใช้สำหรับตั้งค่าของฟังก์ชันและตัวแปร จึงไม่สามารถใช้สำหรับสิ่งนี้ได้ * การตั้งค่าประเภทที่แตกต่างกันขึ้นอยู่กับระบบ: สถาปัตยกรรมบางตัวอาจทำงานกับประเภทที่แตกต่างกันบ่อยกว่า เช่น windows และ wchar แทนที่จะเป็น char หรือ ulong กับ ulonglong
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence