C++ の深遠

C++ は以下のように変数宣言ができる。

std::string s("hoge");

初めて見たときは「なんじゃこりゃ」と思ったものですが、慣れとは怖いもので、今ではまったく違和感がないどころか、むしろ好んで使っている。

で、これの int 版は

int i(100);

と書くことができる。これも超違和感があったけど、まあ受け入れられる。

また、無名変数を作成するのにこんな書き方ができる。

size_t size = std::string("hoge").length();

これも Java

int size = new String("hoge").length();

があらかじめ予備知識としてあったので違和感はない。

しかし、これが許されるとは思ってなかった。

int size = int(100);

これは要するに int にはメソッドが提供されないため、オブジェクトを作っただけ、ということになり、int size = 100; となんら変わらない(と思うけどアセンブラコードは検証してない)。

ちなみにこれは C++ であって、C はこんな書き方はできないので念のため。