C++ 什么是SFINAE
示例
SFINAE代表小号ubstitution˚Failure我小号ñ加时赛一ñéRROR。由替换类型(或值)以实例化功能模板或类模板而导致的格式错误的代码不是硬编译错误,它仅被视为推论失败。
实例化函数模板或类模板专业化时的推导失败将候选对象从考虑范围中删除-好像该失败的候选对象一开始就不存在。
template <class T>
auto begin(T& c) -> decltype(c.begin()) { return c.begin(); }
template <class T, size_t N>
T* begin(T (&arr)[N]) { return arr; }
int vals[10];
begin(vals); //好。第一个功能模板替换失败,因为
//vals.begin()格式错误。这不是错误!该功能
//只是被视为可行的过载候选者而已,
//给我们留下数组重载。仅在即时上下文中的替换失败被视为演绎失败,所有其他失败被视为硬错误。
template <class T>
void add_one(T& val) { val += 1; }
int i = 4;
add_one(i); //好
std::string msg = "Hello";
add_one(msg); //错误。msg+=1对于std::string格式错误,但这
//失败不是在立即替换T的情况下
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下