【问题标题】:C++ auto return typeC++ 自动返回类型
【发布时间】:2021-04-01 19:07:14
【问题描述】:

我写了一个看起来像这样的函数:

auto fn(auto x) {
    return x;
}

我用不同的参数调用了它两次:

std::cout << fn(3124) << std::endl;
std::cout << fn("hello world") << std::endl;

它工作正常,但我不明白为什么 - 我认为编译器推断出函数的常量返回类型 - int(由于第一次调用 - fn(3124))。 看起来编译时生成的函数看起来像

template<typename T>;
T fn(T x) {
   return x;
}

我不知道为什么。 请解释一下。

【问题讨论】:

  • 函数模板的不同特化应考虑不同的函数
  • 要记住的有用的事情:你写的每个auto都是一个独特的auto。您的fn 中的两个auto 是完全独立的。 auto fn(auto x, auto y) { return x+ y;} 也是如此 - 这可以获取两种不同类型的对象并返回第三种不同类型的对象。

标签: c++ templates c++20 auto


【解决方案1】:
auto fn(auto x)

是C++20版本的

template<class X>
auto fn(X x)

因此,它将为每个调用它的参数类型实例化,每个不同的参数类型具有不同的返回类型。该功能称为Abbreviated function template

【讨论】:

  • 哦,你是对的。我把它和别的东西混淆了。我们现在可以使用auto x,但不能使用T&lt;auto&gt; x,其中T 是一些模板。
猜你喜欢
  • 2012-08-16
  • 2012-10-18
  • 2015-12-19
  • 1970-01-01
  • 2021-11-12
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多