繁体   English   中英

为什么std :: is_same对这两种类型给出不同的结果?

[英]Why does std::is_same give a different result for the two types?

在下面的代码中,为什么在编译时调用fun的两种方法fun(num)fun<const int>(num)给出不同的结果?

#include <iostream>
using namespace std;

template<typename T, typename = typename enable_if<!std::is_same<int, T>::value>::type>
void fun(T val)
{
    cout << val << endl;
}

int main(void)
{
    const int num = 42;
    fun(num);  //ERROR!

    fun<const int>(num);  //Right

    return 0;
}

参数声明为传递值; 然后在模板参数推导中 ,将忽略该参数的顶级const限定符。

在扣除开始之前,对P和A进行以下调整:

1)如果P不是参考类型,

一种) ...

b)...

c)否则,如果A是cv限定类型,则将忽略顶级cv限定符以进行推导:

因此,给定fun(num) ,模板参数T将推导为int ,而不是const int

如果将参数更改为按引用传递,则将保留const部分。 例如

template<typename T, typename = typename enable_if<!std::is_same<int, T>::value>::type>
void fun(T& val)

然后为了fun(num) ,将T推导为const int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM