gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:09:57 25 4
gpt4 key购买 nike

在下面的代码中,为什么调用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;
}

最佳答案

参数被声明为按值传递;然后在 template argument deduction , 参数的顶级 const 限定符被忽略。

Before deduction begins, the following adjustments to P and A are made:

1) If P is not a reference type,

a) ...

b) ...

c) otherwise, if A is a cv-qualified type, the top-level cv-qualifiers are ignored for deduction:

所以给定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

关于c++ - 为什么 std::is_same 对这两种类型给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50872197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com