c++ 函数模板的问题,请看代码,为啥去掉注释后,visual studio 2012会无法运行。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 函数模板的问题,请看代码,为啥去掉注释后,visual studio 2012会无法运行。相关的知识,希望对你有一定的参考价值。

注释掉这两行后程序可以运行,但不能查看输出结果,这两行代码难道有什么问题么?
#include<iostream>
//#include<windows.h>
using namespace std;
template <typename T>T max(T a,T b,T c)

if(a>b)
if(a>c)
return a;
else if(b>c)
return b;
else
return c;

int main()

cout<<max(1,2,3)<<endl;
cout<<max(3.14f,28.3f,7.7f)<<endl;
cout<<max('c','b','a')<<endl;
//system("pause");
return 0;

参考技术A 注释掉之后vs2010中应该也执行了,你看到的应该是一个黑色窗口闪过,这是应为程序执行和自动关闭了。
system("pause")就是从程序里调用“pause”命令;
而“pause”这个系统命令的功能很简单,就是在命令行上输出一行类似于“Press any key to exit”的字,等待用户按一个键,然后返回。

加这个就是为了让代码在执行后暂停,等待你的操作再退出
参考技术B 最后一个注释,是让系统暂停,好让你查看结果。没有了这个,执行完就返回了,有结果也看不见。。前面这个可以注释掉的。追问

可是我不注释的话就无法运行,怎么回事

参考技术C 因为在vs中程序是只执行一遍的 速度很快我们的肉眼是看不到的。所以采用system("pause");或getchar();之类的来防止程序执行结束

C++函数模板机制结论

函数模板机制结论:

  1. 编译器并不是把函数模板处理成能够处理任何类型的函数
  2. 函数模板通过具体类型产生不同的函数
  3. 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。

以上是关于c++ 函数模板的问题,请看代码,为啥去掉注释后,visual studio 2012会无法运行。的主要内容,如果未能解决你的问题,请参考以下文章

去掉双斜杠注释

[C++] 利用模板的模板参数实现单链表

为啥不能编译这个 C++ 模板代码?

使用 C++ 模板切换算法

为啥我不能将模板函数指针传递给可变参数函数?

flask中jinjia2模板使用详解2