利用C++0x Lamda构造CPS时编译器100%CPU占用死机(ICC 11.0)

U2USoft 2009-12-16 03:38:12
我想用CPS的方式实现尾递归,有这么一段代码:

using namespace std;

template<typename U>
int FactorialContinuation(int n, U& continuation)
{
if (n == 0) return continuation(1);
return FactorialContinuation(n - 1,
[&](int r){ return continuation(n * r); });
}

int FactorialRecursively(int n)
{
return FactorialContinuation(n - 1,
[&](int r){ return n * r;});
}

int _tmain(int argc, _TCHAR* argv[])
{
cout << FactorialRecursively(3) << endl;

_getch();
return 0;
}

只要编译,mcpcom.exe进程就会100%占用CPU并且无法响应。
我的分析:这里的参数都是作为函数参数传入的,不存在以模板参数形式传入的模板展开。所以应该不是模板展开时“爆掉”的。会不会是ICC的Bug,或者是我的代码有什么问题呢?还请各位ICC高手作出回答,谢谢!

另外,编译环境为:

VS2008(SP1) + ICC 11.0(以IA-32模式编译) + Win7(x64)
...全文
241 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
intel_yolanda 2009-12-29
  • 打赏
  • 举报
回复
你好,可以试一下下面的work-around 方法:

using namespace std;

template <typename Func>
int FactorialContinuation(int n, Func& continuation) {
if (n <= 0) return 1;
if (n == 1) return continuation(1);
return (n)*FactorialContinuation(n - 1, continuation);
}

int FactorialRecursively(int n) {
return FactorialContinuation(n - 1,
[&](int r){ return n * r;});
}

int main(int argc, char* argv[]) {
cout<< FactorialRecursively(3) << endl;

_getch();
return 0;
}

如果有任何其他问题,可及时告知,谢谢!
intel_yolanda 2009-12-18
  • 打赏
  • 举报
回复
谢谢你提交的这个问题,我已经重现了你的问题。我会将它提交到我们的问题跟踪系统。
如果有任何更新,我会及时通知你,谢谢!

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧