c++ - 显式传递模板参数时,函数模板参数丢失常量?

标签 c++ template-argument-deduction

template <typename T>
void test(const T& x) {}

int a {};
int& ref = a;
const int& c_ref = a;

test(c_ref)  // T = int, x = const int&
test<int&>(ref); // T = int& , x = int&
为什么函数模板参数x会丢失const预选赛?

最佳答案

在显式(非推导)实例化中

test<int&>(ref);
这是你得到的(理论上的)签名
void test<int&>(const (int&)& x)
这表明 const -资格适用于整个(int&) ,而不仅仅是 int . const适用于剩下的,如果没有,它适用于正确的:int& , 但作为一个整体 - 它适用于 & , 再次因为 const适用于左侧的内容。但是没有const引用(它们根本不可更改,即它们不能重新绑定(bind)),const被删除,并且引用折叠规则收缩两个 &合而为一。

关于c++ - 显式传递模板参数时,函数模板参数丢失常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64893722/

相关文章:

c++ - std::forward 如何推断 `_Ty` 的类型?

c++ - make_shared() 的可调试替代品

c++ - 获取模板可调用对象的参数类型

c++ - 通过远程键保存值的结构

c++ - 缩写函数模板与带有转发引用参数的函数模板

c++ - g++ 和 clang++ 都存在模板函数参数包扩展问题?

c++ - 使用boost range_iterator数组来分割字符串

c++ - 使用强类型枚举的模板参数推导

c++ - STL vector 之间的自动转换

c++ - 使用模板的选择排序函数没有匹配的函数调用(C++)