C ++困境:关于std :: stoi

时间:2014-03-08 02:42:43

标签: c++ string int type-conversion

我陷入困境,归结为(具体案例涉及更多):

  1. 连接数字字符nc并最后应用std::stoi

  2. 初始化int x=0;。在每次迭代中:x *= 10; x += (nc & 0xCF);

  3. 什么会更有效,因为数字位数通常总是小于6?

1 个答案:

答案 0 :(得分:2)

2号几乎肯定更有效率。它使用常量内存,避免动态分配,并且工作量少于std::stoi(处理备用基数,因此不太可能优化乘法步骤)

可维护性也是一个考虑因素。愿意使用大脑的程序员应该能够理解#2,尤其是伴随着评论。不幸的是,我的经验是,如果你有任何货物狂热程序员在你的代码库上工作,他们可能会对#1有强烈的偏好。

然而,我不确定这个神奇的数字0xCF。你不想只是x += nc - '0';吗?它是便携式的,是惯用的,更容易理解。另一方面,使用0xCF进行屏蔽会假设为ASCII。对于'0' <= nc && nc <='9'范围之外的字符,没有人做任何明智的事情,但如果我使用按位算术,我会用0x0F进行掩码。

相关问题