【发布时间】:2010-12-15 22:44:45
【问题描述】:
void Send(int * to, const int* from, const int count)
{
int n = (count+7) / 8;
switch(count%8)
{
case 0: do { *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while (--n>0);
}
}
【问题讨论】:
-
正如其他人所说,达夫的设备。如果我不需要,我不会实现这个,太深奥/混淆了。我更喜欢可读的代码 ;-) 虽然,如果包装在这样的函数中,具有良好的 cmets/documentation,如果我不必触摸它,我会使用它。
-
在适当的情况下使用 Duff 的设备不会有太大问题。它被深入讨论,需要的最大评论将是一个充分讨论它的 URL。
-
哇 - 有人真的很费心使用 Duff 的设备进行优化,但没有将模和除法转换为移位???
-
do {} while() 语法不正确吗?
-
@Aaron: Any 体面的编译器会优化模数和除法,如果 r.h.s.是在编译时已知的 2 的幂。另一方面,手动循环展开仍然是偶尔有用的优化。
标签: c++