在看C++.Programming.Language.4th.Edition.2013,在307页中间,也就是12.1.2小节的末尾,有这样一个声明:
If you feel inclined to give readers a headache, you may write something like:
struct S {
[[noreturn]] virtual inline auto f(const unsigned long int *const) -> void const noexcept;
};
果然头疼,请问函数f中的->如何理解?多谢!
这是 C++11 中一种将返回值类型后置的语法,使用时,在原返回值处用 auto 来占位,然后在参数列表后用 -> 来给出返回值类型。
至于这个语法存在的必要性,可以看这样一个例子:
template< typename LHS, typename RHS>
auto AddingFunc(const LHS &lhs, const RHS &rhs) -> decltype(lhs+rhs) {return lhs + rhs;}
在这里,因为返回值是两个模版参数的"和",而 C++ 又允许重载加法运算符,所以我们不可能预先知道返回值的类型,需要用 decltype 进行推导。
但是如果把返回值类型 decltype(lhs+rhs) 放在前面的话,会因为 lhs 和 rhs 这两个标识符没有声明而报错,因为这两个标识符是在后面的参数列表中才被声明的。所以在这个例子里,返回值必须后置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。