【发布时间】:2017-02-23 16:22:26
【问题描述】:
我正在阅读模板中的类型推导,这是一个困扰我的问题
template<typename T>
void funt(T const &t);
int x = 10;
func(x);
T会被推导出为const int,t的类型将是int const &
我理解为什么t 必须是int const & 的原因,因此传递给函数的x 将保持不变,因为函数接受const T&。
但我看不出T 必须也是const 的原因。在我看来,将T 推断为int 不会破坏这段代码中的任何内容?
就像在另一个例子中一样:
template<typename T>
void funt(T const &t);
int const x = 10;
func(x);
这里T被推导出来只是int,而x中的const被省略了
或者我在这里遗漏了什么?
【问题讨论】:
-
“演绎”是福尔摩斯所做的。 “扣除”是当老板发现你在工作中浏览互联网时对你的薪水所做的。 “扣除”也是刹车对公共汽车速度的影响。
-
是什么让你想到
T被推导出为const int?! Counter-example -
如果
T被推导出为const int,这意味着你有void funt(const const int & t)。T的正确类型显然是int这里。将T替换为int并亲自查看推论是否正确。你得到void funt(int const &t); -
无法复制。 ideone.com/aRnclc.
-
@Kerrek 我的注意力不集中让我这么想。我现在检查了这本书,我知道我哪里弄错了。顺便说一句,我可以在这里应用哪个词?扣分对吧?
标签: c++ templates type-deduction