今回は「型推論」です。
#include
#include
using namespace std;
void foo( int ) { cout << "整数ぢゃね?" << endl; }
void foo( float ) { cout << "実数ぢゃね?" << endl; }
void foo( double ) { cout << "倍精度実数ぢゃね?" << endl; }
void foo( char ) { cout << "文字ぢゃね?" << endl; }
void foo( bool ) { cout << "真偽値ぢゃね?" << endl; }
void foo( string ) { cout << "文字列ぢゃね?" << endl; }
void foo( int* ) { cout << "int*型ぢゃね?" << endl; }
void foo( double* ) { cout << "double*型ぢゃね?" << endl; }
void foo( const char* ){ cout << "文字列ぢゃね?" << endl; }
int main()
{
auto v = 3;
foo( v );
auto p = &v;
foo( p );
auto s = string( "bar" );
foo( s );
auto a = 'a';
auto b = 2;
foo( a + b );
auto m = 1.0f;
auto n = 5.0;
foo( m + n );
return 0;
}
整数ぢゃね?
int*型ぢゃね?
stringぢゃね?
整数ぢゃね?
倍精度実数ぢゃね?
nを何で初期化するかによって変数の型が違います。
例:
- 1で初期化→ int型
- 1.0fで初期化→ float型
- 1.0で初期化→ double型
- 'a'で初期化→ char型
- string( "a" )で初期化→ string型(クラス)
autoすげえ・・・
今までは全く意味のないキーワードだったらしいが。
ところで関数の仮引数って名前いらないときは名前つけなくていいのね。
「もしや」と思って試したらびっくりしたよ。