内联自动模板标题

时间:2019-05-23 14:29:05

标签: c++11 templates inline auto

我有一个需要理解的问题,但是由于我是c ++的新手,所以在理解使用内联自动与模板,箭头运算符的基本概念时遇到了困难。以下是代码段

template <typename T> inline auto
max (const T& a, const T& b, const T& c) -> const T&
{
    return std::min (std::max (a, b), c) ;
}

虽然我了解使用inline和auto以及inline关键字之类的函数替换了对其函数的调用,而auto是用于自动检测类型的,但是我在这里不了解其在模板中的用法,尽管花了很多时间谷歌。另外,我在这里使用箭头感到困惑,因为我认为箭头用于通过指针进行访问,但我仍然感到困惑。

如果有人在基本级别上解释此代码,将会有很大帮助。抱歉,如果这是非常基础的,因为我是C ++的新手。

1 个答案:

答案 0 :(得分:0)

C ++具有一维语法(暂时忽略预处理器)。这意味着代码与此完全相同:

template <typename T>
inline
auto max (const T& a, const T& b, const T& c) -> const T&
{
    return std::min (std::max (a, b), c) ;
}

我希望现在情况会更清楚

关于auto f() -> T语法,这是C ++ 11中引入的 trailing return type 语法,在语义上等效于T f();它指定功能的返回类型,但处于尾随位置。它的优点是auto之后位于->-> 之间的东西是可见的,所以这样的事情是可能的:

auto foo(std::map<int, std::vector<std::pair<char, double>>> m) -> decltype(m)
{
  return m;
}

如果没有尾随语法,则必须两次键入m的类型。

还请注意,在您发布的代码中,inline是不必要的:就在头文件中进行定义而言,函数模板的行为与内联函数完全相同,并且inline停止了含义几年前“请内联”。