const参数的模板参数推导

Vah*_*yan 3 c++ templates

假设我们有

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函数?在这种情况下如何扣除?

这是一个工作样本.

Jos*_*eld 6

为什么函数外部的对象对函数const的内部有影响?它正在获取它自己的对象副本,因此它可以自行选择是否将该副本视为副本const.修改a函数内部不会影响外部对象.这就是类型推导忽略顶级cv限定符的原因.

如果你想要参数const,你需要要求它.