自动扣除不一致
inconsistent deduction for auto
本文关键字:不一致 更新时间:2023-10-16
有人可以向我解释为什么以下代码会出错吗?
#include <iostream>
using namespace std;
template <typename aa, typename bb>
auto minimum(aa a, bb b)
{
if (a < b) return a;
else return b;
}
int main()
{
cout << minimum(7, 5.1);
}
">自动"的扣除不一致:"int",然后"双倍">
为什么这段代码可以正常工作?
#include <iostream>
using namespace std;
template <typename aa, typename bb>
auto minimum(aa a, bb b)
{
return a < b ? a : b;
}
int main()
{
cout << minimum(7, 5.1);
}
比我聪明的人可以引用标准的相关部分,但简短的版本是三元运算符的工作方式与 if
/else
不同。 对于第一个示例(if
/else
(,您有两个不同的return
,并且您可能return
不同的类型(您在示例中执行此操作(。 该函数必须return
单一类型,因此它不知道哪个是正确的(即,是将int
提升为double
还是将double
降级为int
(。
在第二个示例中,三元运算符可以根据参数(特别是后两个(找出适当的类型。 在您的示例中,它将始终将结果视为double
,因此您的函数知道这是它需要return
的。
在第
一种情况下,你有 2 个单独的 return
语句返回不同的数据类型,因为a
是int
,b
是double
,所以auto
不知道要推断哪种数据类型。
在第二种情况下,?:
运算符的结果是 1 种特定数据类型,并且只有 1 return
语句,因此auto
知道要推断哪种数据类型不会混淆。
相关文章:
- 大于65535的C++数组[size]引发不一致的溢出
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- CreateDIBSection为同一图像返回不一致的位图位值
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 这种比较是否不一致(或者存在其他问题)?
- 以下可变参数模板行为是否不一致?
- 如何修复我的链表读数不一致的问题?
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- void 函数中的指针参数返回不一致的值
- 如何查找导致结果不一致的代码
- 跨平台 mySQL 与字符集不一致
- C++:不一致的 std::p ow( 类型 ) 定义
- DLL 注入不断失败,出现不一致的错误