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 に答える