Skip to content

Latest commit

 

History

History
69 lines (54 loc) · 1.54 KB

006-cpp14-core-return-type-deduction-for-normal-function.md

File metadata and controls

69 lines (54 loc) · 1.54 KB

通常の関数の戻り値の型推定

関数の戻り値の型としてautoを指定すると、戻り値の型をreturn文から推定してくれる。

// int ()
auto a(){ return 0 ; }
// double ()
auto b(){ return 0.0 ; }

// T(T)
template < typename T >
auto c(T t){ return t ; }

return文の型が一致していないとエラーとなる。

auto f()
{
    return 0 ; // エラー、一致してない
    return 0.0 ; // エラー、一致していない
}

すでに型が決定できるreturn文が存在する場合、関数の戻り値の型を参照するコードも書ける。

auto a()
{
    &a ; // エラー、aの戻り値の型が決定していない
    return 0 ;
}

auto b()
{
    return 0 ;
    &b ; // OK、戻り値の型はint
}

関数aへのポインターを使うには関数aの型が決定していなければならないが、return文の前に型は決定できないので関数aはエラーになる。関数bはreturn文が現れた後なので戻り値の型が決定できる。

再帰関数も書ける。

auto sum( unsigned int i )
{
    if ( i == 0 )
        return i ; // 戻り値の型はunsigned int
    else
        return sum(i-1)+i ; // OK
}

このコードも、return文の順番を逆にすると戻り値の型が決定できずエラーとなるので注意。

auto sum( unsigned int i )
{
    if ( i != 0 )
        return sum(i-1)+i ; // エラー
    else
        return i ;
}

機能テストマクロは__cpp_return_type_deduction。値は201304。