One minute
C++ 17 编译期 if
C++17编译期if:constexpr
。
用例:不加constexpr
会编译出错,因为必有一种情况是语法错误的。如果T
为X
类型,则内部没有y_func()
。
template<typename T>
void f(T t) {
// 判断类型
if constexpr (std::is_same_v<T, X>) {
t.x_func();
} else { // 此处若为 "舍弃语句",不会参加编译。但会检查语法错误(但不会检查模板的实例化)。而预处理器if(#if)如果舍弃,完全不检查。
t.y_func();
}
}
返回类型推导:C++14后可以用auto
作为函数返回值,但所有表达式必须推导出相同的返回类型(不能在不同情况下返回不同的类型,例如int
和float
)。但如果在判断的地方使用constexpr
,能通过编译(因为是在编译期判断的)。
auto func() {
if constexpr (...) {
return 1.0f;
} else {
return 0;
}
}
Read other posts