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/