可能的重复:
从右值参数推导对 const 的引用 https://stackoverflow.com/questions/6075093/deducing-references-to-const-from-rvalue-arguments
如果我有
template<class T>
void foo(T &) { }
我称之为foo((const int)5)
,假设参数是const int
,为什么编译器不自动推断T
to be const int
?
整数文字的类型是int
, not const int
,根据 C++03 标准,第 2.12.1.2 条。
整数文字的类型取决于其形式、值和后缀。
如果它是十进制且没有后缀,则它具有以下类型中的第一个
它的值可以表示:int、long int;...
Update
另一个相关的类型推导规则可能是 14.8.2.1.2。
如果 P 不是引用类型:
[...]
— 如果 A 是 cv 限定类型,则 A 类型的顶级 cv 限定符
类型推导将被忽略。
如果 P 是 cv 限定类型,则 P 类型的顶级 cv 限定符
类型推导将被忽略。
如果 P 是引用类型,则 P 引用的类型用于类型
扣除。
OP 提供的代码甚至无法编译,因为将非常量引用绑定到右值是非法的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)