1

我正在回顾 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 的逗号分隔表达式的顺序评估,尽管 -> 表示法的外观令人困惑。知道它是什么吗?谢谢。

4

1 回答 1

6

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

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

相当于这个:

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

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

于 2013-05-25T14:17:49.853 回答