C++11 からの後置式の関数の戻り型 ― 2020年10月15日 11時51分57秒
% 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
最近のコメント