败犬日报 2025-10-08
败犬日报 2025-10-08
1. 不用预处理器,判断功能特性测试宏有无定义
https://www.zhihu.com/question/644615607/answer/1941993383804540457
省流:long(x);
可以定义变量(等同于 long x;
),作为参数后 long(long(x))
就是一个函数类型;而 long(long(1))
显然是一个数字。
cpp
#include <iostream>
template <long N>
constexpr bool is_constant() {
return true;
}
template <typename T>
constexpr bool is_constant() {
return false;
}
#define X 1
int main() {
std::cout << is_constant<long(long(X))>() << "\n"; // 输出 1
std::cout << is_constant<long(long(Y))>() << "\n"; // 输出 0
}