我有一个难题,可以归结为(具体情况更多):

  • 连接数字字符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/

    10-15 00:35
    查看更多