【发布时间】:2010-07-14 14:05:13
【问题描述】:
int fkt(int &i) { 返回我++; }
int main()
{
int i = 5;
printf("%d ", fkt(i));
printf("%d ", fkt(i));
printf("%d ", fkt(i));
}
打印“5 6 7”。假设我想像这样打印“5 7 9”,是否可以在 fkt() 中没有临时变量的情况下以类似的方式进行操作? (临时变量会略微降低效率,对吗?)即,类似于
return i+=2
或
return i, i+=2;
这两个都是先增加i再返回,这不是我需要的。
谢谢
编辑:主要原因,我在一个函数中而不是在外面是因为 fkt 将是一个函数指针。原始函数将对 i 执行其他操作。我只是觉得使用 {int temp = i;我+=2; return temp;} 似乎不如 {return i++;} 好。
printf我不关心,这只是为了说明结果的使用。
EDIT2:哇,这似乎更像是一个聊天而不是传统的板:) 感谢所有的答案。我的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;}
对于get_it_1来说,就是这么简单……以后我会尽量提供更多背景知识……
【问题讨论】:
-
忽略那些效率考虑并使用有效的解决方案。
-
我只是想确保您意识到 printf 比 i+=2 慢数千倍。
-
SadSido 是对的...i+=2;返回我;会是一样的。如果你仔细想想,i++ 实际上只是一种方便的表示 i+=1 的方式,这是一种方便的表示 i=i+1 的方式。 (有趣的是,我们程序员如何想出方便的方法来使我们的方便方法更方便)您不会有任何开销,因为汇编指令已经有一个“立即添加”选项用于与整数相加。无需额外注册!
-
先写出最容易阅读和维护的代码,然后测量。如果您通过测量发现性能问题,首先找到对性能影响最大的区域,然后在那里实施您认为可以改进的地方,然后再次测量,看看您的猜测是正确的。
-
“我们应该忘记小的效率,比如说大约 97% 的时间:过早的优化是万恶之源。然而,我们不应该放弃关键的 3% 的机会。一个好的程序员不会因为这样的推理而自满,他会明智地仔细查看关键代码;但只有在识别出该代码之后”——Donald Kunth——en.wikipedia.org/wiki/Program_optimization