我陷入困境,归结为(具体案例涉及更多):
连接数字字符nc
并最后应用std::stoi
。
初始化int x=0;
。在每次迭代中:x *= 10; x += (nc & 0xCF);
什么会更有效,因为数字位数通常总是小于6?
答案 0 :(得分:2)
2号几乎肯定更有效率。它使用常量内存,避免动态分配,并且工作量少于std::stoi
(处理备用基数,因此不太可能优化乘法步骤)
可维护性也是一个考虑因素。愿意使用大脑的程序员应该能够理解#2,尤其是伴随着评论。不幸的是,我的经验是,如果你有任何货物狂热程序员在你的代码库上工作,他们可能会对#1有强烈的偏好。
然而,我不确定这个神奇的数字0xCF
。你不想只是x += nc - '0';
吗?它是便携式的,是惯用的,更容易理解。另一方面,使用0xCF
进行屏蔽会假设为ASCII。对于'0' <= nc && nc <='9'
范围之外的字符,没有人做任何明智的事情,但如果我使用按位算术,我会用0x0F
进行掩码。