【问题标题】:Template argument deduction for references as arguments引用作为参数的模板参数推导
【发布时间】:2019-06-11 16:42:12
【问题描述】:

我正在尝试深入理解模板参数推导。 我不明白的一点是,我应该如何应用标准中的规则 here 用于 AP 类型 对于以下情况(遗憾的是,cppreference.com 上没有示例,请参阅下面的相关部分)

template<typename T>
void foo(T t);

void call_with_reference(int& r) {
    foo(r)
}

-> 匹配 PA 得到:T 被推导出为 int&amp;

这显然是错误的。标准中规定来自A 的引用被删除 的规则在哪里?非常感谢您提供一个不含糊的、明确的答案。

相关部分:

【问题讨论】:

  • P 和 A 与示例有何关系?也许在问题中包含来自标准的引用

标签: c++ templates c++17 template-argument-deduction


【解决方案1】:

A 是表达式的类型。表达式类型由[expr.type]/1描述:

如果一个表达式最初的类型是“对 T 的引用”([dcl.ref],[dcl.init.ref]),则类型被调整为 T。

所以这里Aint

这个表达式是一个lvalue,但是因为P不是一个引用,所以它不会发挥任何作用。

【讨论】:

  • 啊完美,我不知道!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多