[英]Declaring function parameter type as auto
我正在使用GCC 6.3,而令我惊讶的是,以下代码片段得以编译。
auto foo(auto x)
{
return 2.0*x;
}
....
foo(5);
AFAIK它是GCC扩展名。 比较以下内容:
template <typename T, typename R>
R foo(T x)
{
return 2.0*x;
}
除了返回类型扣除以外,上述声明是否等效?
将相同的GCC(6.3)与-Wpedantic
标志一起使用将生成以下警告:
warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]
auto foo(auto x)
^~~~
在较新版本的GCC中进行编译时 ,即使没有-Wpedantic
,也会生成此警告,提醒您有关-fconcepts
标志的信息:
warning: use of 'auto' in parameter declaration only available with -fconcepts
auto foo(auto x)
^~~~
Compiler returned: 0
实际上, 概念使之成为可能:
void foo(auto x)
{
auto y = 2.0*x;
}
等效于此:
template<class T>
void foo(T x)
{
auto y = 2.0*x;
}
参见此处 :“如果任何函数参数使用占位符( auto
或约束类型),则函数声明将改为缩写函数模板声明 :[...](概念TS)” –重点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.