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

How do auto arguments work internally?

考虑代码,

#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如何接受不同类型的参数?

Concept Technical Specification下'function'

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).