【发布时间】:2017-07-09 21:13:02
【问题描述】:
在 Bjarne Stroustrup 书(C++ 编程语言)的第 4 版中,我们读到:
使用 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
我想知道为什么即使乘法函数的返回类型是自动,我的 c 和 d 变量也会得到不同的结果(类型)。
编辑:
我的 GCC 版本:gcc version 5.4.0 20160609
【问题讨论】:
-
这是一个非标准的扩展。
C++14不允许函数使用auto参数。 -
如果您将代码更改为实际合法的 C++14,您将获得预期的结果。 wandbox.org/permlink/eTZilBZhK19NOkDw
-
我建议使用标志
-pedantic-errors进行编译以强制执行标准合规性。 -
这给出了 gcc-5 的奇怪结果,但是 gcc-6 及更高版本的预期结果,所以错误并且已经修复。
-
@MohamedAmjadLASRI 是的,因为在参数中使用
auto是非标准的。它不适用于其他编译器