假设我们有
template <typename T>
void foo(T a)
{
a = 10;
}
int main()
{
const int a = 5;
foo(a);
}
Run Code Online (Sandbox Code Playgroud)
为什么T被推断为int而不是const int,为什么我可以修改in函数?在这种情况下如何扣除?
为什么函数外部的对象对函数const的内部有影响?它正在获取它自己的对象副本,因此它可以自行选择是否将该副本视为副本const.修改a函数内部不会影响外部对象.这就是类型推导忽略顶级cv限定符的原因.
如果你想要参数const,你需要要求它.