C++11 からの後置式の関数の戻り型2020年10月15日 11時51分57秒

C/C++ では長いこと関数の戻り型は関数の名前の前に書く方式だったが、別方法として後置式の記述形式も C++11 から導入された。
% cat trailing_return_type.cpp
#include <iostream>

auto one() -> int
{   
    return 1;
}

auto f1() -> int (*)()
{   
    return one;
}

int main()
{   
    std::cout << one() << std::endl;
    std::cout << f1()() << std::endl;

    return 0;
}
クラス内で定義されている列挙型やクラスなどを返したり、関数ポインタなどを返すときには読みやすくなると言った効果があるようだ。後置式の書式が必要になるのはラムダ式や各種テンプレートごりごりの書き方をする時になる。

C++03 でコンパイルするとエラーが出る。C++11 でコンパイルすると、壱を表示する。

% c++ -std=c++03 trailing_return_type.cpp
trailing_return_type.cpp:5:1: warning: 'auto' type specifier is a C++11
      extension [-Wc++11-extensions]
auto one() -> int
^
trailing_return_type.cpp:5:12: error: expected function body after function
      declarator
auto one() -> int
           ^
1 warning and 1 error generated.
% c++ -std=c++11 trailing_return_type.cpp
% ./a.out 
1
1
実体験としては今でもあまり身の回りで見かけることは無いなと思う。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/10/15/9305920/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。