一个必定使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的编译器代码是拼凑出来。
...全文
1052 32 打赏 收藏 转发到动态 举报
写回复
用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)
Visual C++ 6.0 专业便携版 1.仅用于技术学习交流之用,禁止用于一切商业用途。 2.对于使用本人的软件所造成的一切损失及后果由使用者自行承担。 3.使用前先将压缩包解压到磁盘上,运行“安装.exe”开始初始化环境配置,这个过程仅在首次使用时执行一次。 4.安装后会生成“unins000.exe”和“unins000.dat”前者是卸载程序,后者保存着卸载数据,请勿删除。 5.需要卸载时,直接运行“unins000.exe”即开始卸载。 对原版的修改: 1.解除了原版不能打开超过 256 色位图的限制。 2.解除了原版字体选项过少的限制。 3.增加对 .asm 和 .inc 汇编类型文件的支持,向项目添加此类文件时,会被默认归类到“Source Files”和“Header Files”分类下。 4.替换 c2.dll 版本为 13.0.9044.0 ,支持内联汇编的 SSE 指令。 5.修改 VC6 版本号为 "6.x" ,使同一系统中能和其他版本的 VC6 共存。 增加的内容: 1.集成 Visual Assist X、WndTabs 插件。 2.集成 DevTrueColour.dll 和 FileTool.dll 插件,前者是字体颜色选择插件,后者是用于 Vista 以上系统中用来替代 IDE 本身的添加和打开文件功能,以防止 IDE 崩溃。 3.集成 VS 2008 SP1 的 ml.exe ,增加对汇编的支持。 4.集成 Glut 3.7 beta。 5.集成 企业版核心组件。 SDK 集成: 1.集成 Windows 2003 SDK ,这是微软官方最后一个支持 VC 6 的 SDK 版本。 2.集成 WTL 和 VFC 。 3.集成 STL Port、SGI STL 两者任选其一,可用来代替 VC 6 自带的 STL 以获得更好的性能。 4.集成 Native Development Kit 。 5.集成 Masm32 ,方便编写和调试简单的汇编程序。 6.集成 Boost C++ 库。 编译器集成: 1.集成 Intel C++ 10 编译器,这是能支持 VC6 的最后一个 Intel C++ 编译器
Visual C++ 6.0 专业便携版 1.仅用于技术学习交流之用,禁止用于一切商业用途。 2.对于使用本人的软件所造成的一切损失及后果由使用者自行承担。 3.使用前先将压缩包解压到磁盘上,运行“安装.exe”开始初始化环境配置,这个过程仅在首次使用时执行一次。 4.安装后会生成“unins000.exe”和“unins000.dat”前者是卸载程序,后者保存着卸载数据,请勿删除。 5.需要卸载时,直接运行“unins000.exe”即开始卸载。 对原版的修改: 1.解除了原版不能打开超过 256 色位图的限制。 2.解除了原版字体选项过少的限制。 3.增加对 .asm 和 .inc 汇编类型文件的支持,向项目添加此类文件时,会被默认归类到“Source Files”和“Header Files”分类下。 4.替换 c2.dll 版本为 13.0.9044.0 ,支持内联汇编的 SSE 指令。 5.修改 VC6 版本号为 "6.x" ,使同一系统中能和其他版本的 VC6 共存。 增加的内容: 1.集成 Visual Assist X、WndTabs 插件。 2.集成 DevTrueColour.dll 和 FileTool.dll 插件,前者是字体颜色选择插件,后者是用于 Vista 以上系统中用来替代 IDE 本身的添加和打开文件功能,以防止 IDE 崩溃。 3.集成 VS 2008 SP1 的 ml.exe ,增加对汇编的支持。 4.集成 Glut 3.7 beta。 5.集成 企业版核心组件。 SDK 集成: 1.集成 Windows 2003 SDK ,这是微软官方最后一个支持 VC 6 的 SDK 版本。 2.集成 WTL 和 VFC 。 3.集成 STL Port、SGI STL 两者任选其一,可用来代替 VC 6 自带的 STL 以获得更好的性能。 4.集成 Native Development Kit 。 5.集成 Masm32 ,方便编写和调试简单的汇编程序。 6.集成 Boost C++ 库。 编译器集成: 1.集成 Intel C++ 10 编译器,这是能支持 VC6 的最后一个 Intel C++ 编译器。 by cntrump December 25, 2010

64,654

社区成员

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

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