c++ - 引用作为参数的模板参数推导
问题描述
我试图深入理解模板参数推导。我不明白的一点是,我应该如何将标准中的规则应用于
类型和A
以下P
情况(遗憾的是,cppreference.com 上没有示例,请参阅下面的相关部分)
template<typename T>
void foo(T t);
void call_with_reference(int& r) {
foo(r)
}
P
没有参考类型:
这给出了P := T
A := int&
-> 匹配P
并且A
给出:T
被推论为int&
这显然是错误的。标准中提到的引用A
被删除的规则在哪里?非常感谢一个不混淆,明确的答案。
解决方案
A
是表达式的类型。表达式类型由[expr.type]/1描述:
如果表达式最初具有类型“对 T 的引用”([dcl.ref],[dcl.init.ref]),则类型将调整为 T。
所以这里A
是int
。
这个表达式是 anlvalue
但不会发挥任何作用,因为P
它不是参考。
推荐阅读
- javascript - 为什么 php 代码会覆盖 javascript?
- python - python中单独文件夹中的单元测试结构
- debugging - vscode-jest:codelens 只出现一次
- gtk - Clutter.Text 的 set_editable() 似乎不起作用
- r - R 与 data.table 和 grep 子集列的奇怪行为
- ssas - DAX Measure 对列的值求和
- python - 从 Pandas DataFrame 创建一个篮子 - 不是标准交易数据集
- spring-boot - jhipster mvn package liquibase:update 给出错误但更新数据库
- android - AndroidPlot:是否可以保存和恢复缩放/平移状态?
- laravel - 如何更改 vuejs laravel 中的选项标签