在 Bjarne Stroustrup 的书(《C++ 编程语言》)的第四版中,我们读到:
使用 auto ,我们可以避免冗余和编写长类型名称。这在泛型编程中尤其重要,因为程序员很难知道对象的确切类型,并且类型名称可能很长(第 4.5.1 节)。
所以,了解这个类型的重要性。我做了这个小测试程序:
#include <iostream>
/*-----------------------------*/
auto multiplication(auto a, auto b)
{
return a * b;
}
int main()
{
auto c = multiplication(5,.134);
auto d = 5 * .134;
std::cout<<c<<"\n"<<d<<"\n";
}
该程序的标准输出(使用 -std=C++14 编译):
0
0.67
我想知道为什么即使乘法函数的返回类型是 auto,c 和 d 变量也会得到不同的结果(类型)。
EDIT:我的海湾合作委员会版本:gcc version 5.4.0 20160609
首先,您的代码使用海湾合作委员会扩展,即自动功能参数.
我猜你的gcc版本无法与扩展一起正常工作并提供不正确的结果(gcc 7.1 I have 0.67 0.67
甚至使用自动参数)。
用标准重写函数的正常方法C++是应用模板:
template<typename T, typename U>
auto multiplication(T a, U b)
{
return a * b;
}
并让编译器推断返回类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)