C++0x先取り/VC++2010

アバター
ナムアニクラウド
記事: 16
登録日時: 14年前
住所: 茨城県

C++0x先取り/VC++2010

投稿記事 by ナムアニクラウド » 14年前

 VC++2010でC++0xの機能が一部使えることに気づいたので試してみました。
今回は「型推論」です。

CODE:

#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;
}
[/size][出力結果]
整数ぢゃね?
int*型ぢゃね?
stringぢゃね?
整数ぢゃね?
倍精度実数ぢゃね?

 nを何で初期化するかによって変数の型が違います。
例:
  • 1で初期化→ int型
  • 1.0fで初期化→ float型
  • 1.0で初期化→ double型
  • 'a'で初期化→ char型
  • string( "a" )で初期化→ string型(クラス)
などなど・・・

 autoすげえ・・・
今までは全く意味のないキーワードだったらしいが。

 ところで関数の仮引数って名前いらないときは名前つけなくていいのね。
「もしや」と思って試したらびっくりしたよ。

めい
記事: 3
登録日時: 14年前

Re: C++0x先取り/VC++2010

投稿記事 by めい » 14年前

これはすごい。初耳です。

アバター
a5ua
記事: 199
登録日時: 14年前

Re: C++0x先取り/VC++2010

投稿記事 by a5ua » 14年前

VC2010では、autoの他にも
・decltype
・ラムダ式
・static_assert
などが使えますね。

特に、ラムダ式はSTLと組み合わせると、とても便利です。

アバター
ナムアニクラウド
記事: 16
登録日時: 14年前
住所: 茨城県

Re: C++0x先取り/VC++2010

投稿記事 by ナムアニクラウド » 14年前

>めいさん
 私もこれ書くまで初耳でした。すごいよね。
C++0xってのはご存じの方もいると思いますがC++の新しい仕様のことです。
でもC++0xって機能が増えすぎてややこしくならないか心配。

>a5uaさん
 ありがとうございます、参考になりそうです。
ラムダ式を使う機会は実は今直面している(っぽい)ので試してみようと思います。