自动参数如何在内部工作

How do auto arguments work internally?

本文关键字:在内部 工作 参数      更新时间:2023-10-16

考虑代码,

#include <cstdio>
auto f(const auto &loc){
  printf("Location: %pn", &loc);
}
int main()
{
  auto x {1};
  auto y {2.3};
  f(x);
  f(y);
}

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

问题:

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

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

在概念技术规范下 "功能">

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

实际上是一个template(缩写函数模板声明(,等效于(但比(

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

但是请注意,使用auto的形式还不是任何C++标准的一部分,而只是概念和约束的概念技术规范的一部分,它看起来非常强大(但 AFAIK 仅受 GNU 的 gcc 版本 ≥6.1 带有选项 -fconcepts 的支持(。