...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

変換コンストラクタとキャストのシンタックス

変換コンストラクタとキャストのシンタックスが同じなのは罠だよなあ.

struct my_int {
	my_int(double a) : v(static_cast<int>(a)) {};
	int v;
};
void f(my_int a) { printf("%d\n",a.v); };
void f(int a) { printf("%d\n",a); };

void g() {
	f(my_int(12.3)); // これと
	f(int(12.3));    // これね
};

セマンティクスの観点からはうまいことやったつもりなんだろうけど.

追記

そうじゃなくて引数をひとつ取るコンストラクタが変換コンストラクタになってるのが罠か.