ユユユユユ

webエンジニアです

C++の整数リテラルに桁区切りを加える

 Ruby であればこういう書きかたが許されている。ゼロを列挙するよりもはるかに視認性が高く、お気に入りの記法である。

a = 1_000_000_000
a
# => 1000000000

 C++ を書くとき、ここにほのかなもどかしさを感じることはあった。1000000000と書くのは読みづらいし、かといって std::pow(10, 9) と書くのもスマートとは思えない。

 試行錯誤の結果、桁数をわかりやすくするためだけに、 1001001001 のように必要な数値よりちょっと大きめに定義したりしていた。それでもなお不格好な感じは残り、喉に刺さった小骨のように気になっていた。そこへその小骨を取り除く方法を発見した。こう書けばいい。

int a = 1'000'000'000;

 要するに、 Ruby で整数リテラル内にアンダースコアを使えたように、 C++ ではシングルクオーテーションを使うことができるわけだ。

 もちろん3桁ごとに区切らずとも、任意の箇所に挿入することができる。たとえばこうすれば、二進数の先頭が符号ビットであることを示す、という意図にも使える。

int b = 0b1'1111101;

 まあ、要は伝え方の問題でしかなく、読んでくれる人に配慮がなければただの自己満足でしかない。そうであってもやっぱりこう書くほうがおさまりがいい、というのはあるから、こう書いていきたいなとは思う。