我有一个需要理解的问题,但是由于我是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 ++的新手。
答案 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
停止了含义几年前“请内联”。