繁体   English   中英

将函数参数类型声明为自动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM