2009年6月5日金曜日

boost::lexical_cast は・・・

 こいつは便利だぜ~!と思っていたのだが、実務(仕事)で使って、結構痛い目にあったので、それ以後は lexical_cast を使っていない。boost users ML でも話題に上っていたが、std::atoi 感覚で文字列から数値にコンバートをかけると予期せぬ結果を生む。std::atoi では、スペースをトリミングしなくても正しく数値を読み込んでくれるのであるが、boost::lexical_cast は、スペースが先頭に付随すると問答無用で、0に変換する。いや、この記述は正しくない。実務で lexical_cast を導入した時には、スペースが先頭に付随していても問題なく数値変換が行われていたのである。途中で挙動が変わり、それは iostream に依存するのである。安全性を考えた場合、積極的に lexical_cast を使う理由が見つからない。
 もうひとつ、iostream 系の入出力で残念に思う事が、tuple の入出力だ。区切り文字にスペースを利用する場合に、tuple の要素が空だと、もうグタグタになってしまうのである。tuple は使い手があるようにも思えるのだが、どうにも iostream との組み合わせが頂けないのである。

0 件のコメント: