C++,调制表达式中符号(+/-)的最有效方法

Mat*_*son 0 c++ performance sign operators

我有一个表达

x += y;
Run Code Online (Sandbox Code Playgroud)

并且,基于布尔值,我希望能够将其更改为

x -= y;
Run Code Online (Sandbox Code Playgroud)

我当然能做到

if(i){x+=y;} else{x-=y;}
//or
x+=(y*sign);  //where sign is either 1 or -1
Run Code Online (Sandbox Code Playgroud)

但如果我必须迭代地执行此操作,我想避免额外的计算.有更有效的方法吗?可以调节操作员吗?

Kei*_*son 6

if (i) {x += y;} else {x -= y;}
Run Code Online (Sandbox Code Playgroud)

可能会像你能做的任何其他事情一样高效. y * sign可能相当昂贵(除非编译器能够确定y保证为1或-1).