如果我有一个数字a,将它加1次b而不是简单地加上a + b会更慢吗?
a += b;
或者
for (int i = 0; i < b; i++) {
a += 1;
}
我意识到第二个示例似乎很愚蠢,但是我遇到了这样一种情况,那就是编码实际上会更容易,并且我想知道这是否会影响性能。
编辑:谢谢您的所有答复。看起来有些张贴者想知道我的情况。我正在尝试编写一个函数,如果输入的字符是字母,则将输入的字符移位一定数量的字符(即密码)。因此,我想说一个char + =移位数,但是我还需要考虑ascii表上小写字符和大写字符之间的跳转,并且还要从z换回A。可以用另一种方式实现,我认为最简单的方法是继续添加一个字母,直到到达字母字符块的末尾,然后跳到下一个字母并继续。
C ++语言没有描述这些操作需要花费多长时间。编译器可以自由地将您的第一个语句转换为第二个语句,这是编译该语句的合法方法。
实际上,假设所有东西都是type,许多编译器会将这两个子表达式视为同一个表达式int
。但是,第二种方法很脆弱,因为看似无害的更改会导致性能大幅下降。类型的小变化“无关紧要”,附近有多余的语句,等等。
这将是极为罕见的第一比第二慢,但如果类型a
是这样的,+= b
是不是调用慢得多操作+= 1
了一堆的时代,这可能是。例如;
struct A {
std::vector<int> v;
void operator+=( int x ) {
// optimize for common case:
if (x==1 && v.size()==v.capacity()) v.reserve( v.size()*2 );
// grow the buffer:
for (int i = 0; i < x; ++i)
v.reserve( v.size()+1 );
v.resize( v.size()+1 );
}
}
};
那么A a; int b = 100000; a+=b;
将花费比循环构造更长的时间。
但是我必须努力。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句