自动参数如何在内部工作?

时间:2017-05-29 20:23:27

标签: c++ templates c++14 auto

考虑代码,

#include <cstdio>

auto f(const auto &loc){
  printf("Location: %p\n", &loc);
}

int main()
{
  auto x {1};
  auto y {2.3};
  f(x);
  f(y);
}

使用g++ -std=c++14 dummy.cpp

进行编译

问题:

对于模板函数,在编译时明确提到类型(f<int>(2))。

函数f如何接受不同类型的参数?

1 个答案:

答案 0 :(得分:8)

Concept Technical Specification&#39;功能&#39;

auto f(const auto &loc){
  printf("Location: %p\n", &loc);
}

实际上是template(缩写的函数模板声明),相当于(但更短且更容易阅读)

template<typename T>
void f(const T&loc){
  printf("Location: %p\n", &loc);
}

但请注意,使用auto的表单不是任何C ++标准的一部分,而只是Concept Technical Specification的概念和约束,它看起来非常强大(但AFAIK只是由GNU的gcc版本≥6.1支持,带有选项-fconcepts)。