我有一个难题,可以归结为(具体情况更多):
nc
并在最后应用std::stoi
。 int x=0;
。在每次迭代中:x *= 10; x += (nc & 0xCF);
给定数字位数通常总是小于,例如6,会更有效吗?
最佳答案
2号几乎可以肯定是更有效率的。它使用常量内存,避免动态分配,并且比std::stoi
(后者处理备用基数,因此不太可能优化乘法步骤)的工作量少。
可维护性也是一个考虑因素。愿意动脑子的程序员应该能够理解#2,尤其是附带注释。不幸的是,我的经验是,如果您有任何精通代码的程序员,他们可能会对#1有强烈的偏好。
我不确定那个魔术数字0xCF
。您不只是想要x += nc - '0';
吗?它是便携式的,习惯用法是易于理解的。另一方面,使用0xCF
进行屏蔽时采用的是ASCII。对于'0' <= nc && nc <='9'
范围之外的字符,任何人都不会做任何有意义的事情,但是如果我使用按位算术,我会使用0x0F
进行屏蔽。
关于c++ - C++困境:关于std::stoi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22264307/