为什么以下代码不能在C ++ 14编译器中编译?如果我使用
const int i = 10;
int n = fun(i);
编译器发出错误。
但是,如果我使用
int n = fun(10);
而不是上述陈述,它工作正常。
示例:
template<typename T>
int fun(const T&&)
{
cout<<"fun"<<endl;
}
int main()
{
// int i = 10; // Not work
const int i = 10; // Not work
int n = fun(i);
// int n = fun(10); // Working fine
}
答案 0 :(得分:17)
它失败,因为添加const会阻止它成为转发引用。它成为const rvalue的常规引用:
...转发参考是对 cv-unqualified 的右值引用 不代表a的模板参数的模板参数 类模板(在类模板参数推导期间 ([over.match.class.deduct]))。 ...
然后你传递一个左值。它没能通过比赛。
答案 1 :(得分:2)
这里
int fun(const T&&)
表示您需要将rVal
所以
const int i = 10;
没有让i
候选人成为rVal
(因为你可以获得i的地址)