一个必定使vc2005sp1编译器崩溃的代码

Oversense 2007-05-17 01:04:19
template <int n>
struct s
{
enum { value = s<n-1>::value };
};

template<>
struct s<0>
{
enum { value = 0 };
};

int main()
{
s<490>::value;
}

一直以来,我都相信,vc的编译器代码是拼凑出来。
...全文
1061 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2007-05-18
  • 打赏
  • 举报
回复
to Oversense: 我想你可能没看懂我的意思,或者是太低估我了。你的两个数据也说明不了实际的问题,前者编译时间短是由于代码规模小,后者运行时间长是由于代码算法太差。
Oversense 2007-05-18
  • 打赏
  • 举报
回复
to iambic,没有实践,就没有发言权

下面的例子,在vc2005sp1 上,第一个编译的时间是1,第二个运行的时间是100000

template <int n>
struct f
{
enum {value=f<n-1>::value+f<n-2>::value};
};
template<>
struct f<1>
{
enum {value=1};
};
template<>
struct f<2>
{
enum {value=1};
};

long F (long n)
{
if (n==1 || n==2)
{
return 1;
}
else
{
return F(n-1)+F(n-2);
}
}

int main()
{
std::cout<<f<45>::value<<std::endl;
std::cout<<F(45)<<std::endl;
return 0;
}
Oversense 2007-05-18
  • 打赏
  • 举报
回复
to 楼上的,看好你的版本,vc2005sp1
泥巴娃 2007-05-18
  • 打赏
  • 举报
回复
完全是无稽,根本不会 crash
Oversense 2007-05-18
  • 打赏
  • 举报
回复
to 楼上的,可以这么认为
femalelover 2007-05-18
  • 打赏
  • 举报
回复
借步步文的地方问一下, 是不是G++, VC2005在编译模板的时候, 都只支持所谓的"包含模型"啊, 就是说模板的声明与定义都必须在头文件中, 否则链接出错了.
dai_weitao 2007-05-18
  • 打赏
  • 举报
回复
模板的递归不单单是一种极限测试, 它实际上作用很大.
只是还没有一款真正好的编译器去支持
Red_angelX 2007-05-18
  • 打赏
  • 举报
回复
原来如此.
Rainstorey 2007-05-18
  • 打赏
  • 举报
回复
模板嵌套递归
lidongri 2007-05-18
  • 打赏
  • 举报
回复
模板元编程
qhgary 2007-05-18
  • 打赏
  • 举报
回复
该结帖了吧.
tidyduck 2007-05-18
  • 打赏
  • 举报
回复
传说中的模板递归啊,踩一脚!~~
星羽 2007-05-17
  • 打赏
  • 举报
回复
恩,传说中的
xuleier 2007-05-17
  • 打赏
  • 举报
回复
这种问题都被发现了?
qhgary 2007-05-17
  • 打赏
  • 举报
回复
难道这就是传说中的递归模版?
taodm 2007-05-17
  • 打赏
  • 举报
回复
要求太高了。
Oversense 2007-05-17
  • 打赏
  • 举报
回复
我的意思,他应该出提示,而不是crash.
iambic 2007-05-17
  • 打赏
  • 举报
回复
>>不会吧
>>我编译的时间几乎是瞬时的..

这么几行代码当然很快啦,项目大起来速度就很慢了。
如果说从模板诞生的时候就有这种问题,那模板元应该要把这个问题发挥到极致了。
whoho 2007-05-17
  • 打赏
  • 举报
回复
特殊化递归层数在C++标准上并没有什么规定,只是“建议”了一个很小的数值,
490导致vc无法编译是很正常的,不值得大惊小怪.

至于VC编译器的拼凑之说,顶多只能算揣测吧,从前不好说,但在Stanley B. Lippman
这个C++世界的顶尖高手加盟微软以后,主持新版VC编译器的开发,应该说,VC的品质
已经有了质的飞跃

goodluckalong 2007-05-17
  • 打赏
  • 举报
回复
mark
加载更多回复(12)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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