奇怪的C ++语法和decltype

时间:2013-05-25 14:16:15

标签: c++ syntax c++11

我正在回顾一下boost :: asio的来源,突然碰到一个奇怪的C / C ++语法

template <typename Handler>
auto zero_arg_handler_test(Handler* h)
  -> decltype(
    sizeof(Handler(*static_cast<const Handler*>(h))),
    ((*h)()),
    char(0));

我理解提供给decltype的逗号分隔表达式的顺序评估,但外观为 - &gt;符号令人困惑。知道它是什么?感谢。

1 个答案:

答案 0 :(得分:6)

那是(C ++ 11)尾随返回类型语法。这样:

auto f(/* ... */) -> T
{
    // ...
}

等同于:

T f(/* ... */)
{
    // ...
}

尾随返回类型语法的优点是它允许根据函数参数或类数据成员表示返回类型,这是传统语法无法实现的。