我可以使用i ++语法将int i增加多个吗?

Fra*_*ert 4 c c++

int fkt(int&i){return i ++; }

int main()
{
  int i = 5;
  printf("%d ", fkt(i));
  printf("%d ", fkt(i));
  printf("%d ", fkt(i));
}
Run Code Online (Sandbox Code Playgroud)

打印'5 6 7'.假设我想像这样打印'5 7 9',是否有可能以类似的方式在fkt()中没有临时变量?(临时变量会略微降低效率,对吗?)即,类似的东西

return i+=2 
Run Code Online (Sandbox Code Playgroud)

要么

return i, i+=2; 
Run Code Online (Sandbox Code Playgroud)

这两者首先增加我然后返回它,这不是我需要的.

谢谢

编辑:主要原因,我在一个函数而不是外部这样做是因为fkt将是一个函数指针.原来的功能将与i做其他事情.我只是觉得使用{int temp = i; I + = 2; return temp;}看起来不像{return i ++;}.

我不关心printf,这只是为了说明结果的使用.

编辑2:哇,这似乎是一个比传统板更多的聊天:)谢谢你的所有答案.我的fkt实际上就是这个.根据某些条件,我将get_it定义为get_it_1,get_it_2或get_it_4:

unsigned int (*get_it)(char*&);

unsigned int get_it_1(char* &s)
  {return *((unsigned char*) s++);}
unsigned int get_it_2(char* &s)
  {unsigned int tmp = *((unsigned short int*) s); s += 2; return tmp;}
unsigned int get_it_4(char* &s)
  {unsigned int tmp = *((unsigned int*) s); s += 4; return tmp;}
Run Code Online (Sandbox Code Playgroud)

对于get_it_1来说,它是如此简单......我将来会尝试提供更多背景信息......

S.L*_*ott 28

"临时变量会略微降低效率,对吧?"

错误.

你测量过吗?请注意,++PDP-11只具有神奇的效率.在大多数其他处理器上它和它一样+=1.请测量两者,看看实际差异究竟是什么.

  • 在PDP-11上,编译器优化由人类执行;) (5认同)
  • 由于编译器优化,应该没有任何区别...... (2认同)
  • PDP11的架构(以及之后的许多架构)可以在一条指令中取消引用和递增或递减指针.通常,增量/减量被强制为正在加载/存储的数据大小(例如,如果加载/存储字节则为1,如果是16位字,则为2等).不同的处理器支持前后增量的不同组合/递减.我知道没有任何架构直接支持除指针解引用之外的其他任何内容的增量,尽管在某些情况下,某些高流水线处理器可能会受益于后增量. (2认同)
  • 在旧的Z80芯片上,添加速度比inc慢:) (2认同)

Cog*_*eel 18

(临时变量会略微降低效率,对吧?)

如果这是你要求的主要原因,那么你太早就会担心.在遇到实际性能问题之前,不要再猜测编译器.

如果你想让fkt能够为i添加不同的金额,那么你需要传递一个参数.不存在重大理由,更喜欢+++=.

  • +1:"不要猜测你的编译器".生活的好座右铭. (6认同)

Don*_*ner 9

您可以增加两次,然后减去,例如:

return (i += 2) - 2
Run Code Online (Sandbox Code Playgroud)

但是,回答这个问题,我认为你不应该害怕使用临时变量.

  • 就效率而言,使用gcc 4.4.1 -O2进行编译会产生与使用临时文件完全相同的程序集. (2认同)