C++模板程序的问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 20:33:02
#include<iostream>
template<typename T>
T const &max(T const& a,T const& b)
{
return a<b?b:a;
}
template<typename T>
T* const& max(T* const& a,T* const& b)
{
return a<b?b:a;
}
const char* const& max(const char* const& a,const char*const& b)
{
return std::strcmp(a,b)<0?b:a;
}
int main()
{
int ia=3,ib=7;
char* s1="hello";
char* s2="hell";
std::cout<<*max(&ia,&ib)<<"\n";
std::cout<<max(s1,s2)<<"\n";
std::cout<<max(ia,ib)<<"\n";
}

我用是是VS2005,并在最后一个后大括号前面加了个断点方便观察
有2个地方不太明白
第一个地方就是头文件下面为什么没有
using namespace std;也可以照样用COUT
第二个地方就是这个特殊类型的max重载.光看它的声名我头就大了
const char* const& max(const char* const& a,const char*const& b)
{
return std::strcmp(a,b)<0?b:a;
}求高手具体讲解下

const char* const& max(const char* const& a,const char*const& b)
{
return std::strcmp(a,b)<0?b:a;
}
//这种声明方式只是为了不改变参的值,因为只是比较而已没有必要修改传入的参数,所以用(const char* const&a ,const char *const&b)
返回值是同样的,没的必要改变,const 只是为了防止无意中的修改值,如果只是看程序你可以不管他,strcmp()就是一个比较字符串的函数,返回一个小的串
再做一点改变(扩展一下):
char* const& max(const char* const& a,const char*const& b)const ;
最后的const就是在函数中不可以改变类中私有变量的值

1.因为在使用的时候前面加了
std::cout。 这种方式和using namespace std;一样。

如果是cout则不行,std::cout才行,cout在std::这个名字空间里,cout前面加std::就是名字空间。

2.当调用max(s1,s2); 时,s1和s2都是指向字符串的首地址,首地址是个常量了。s1、s2分别代表字符串"hello"和"hell";

const char* const& max(const char* const& a,const char*const& b)
这个函数的参数是两个常字符指针类型的引用。引用的意思就是取别名,但是还是使用传过来的量,这里引用的意思就是在函数const char* const& max(const char* const& a,const char*const& b) 中a 和 b分别就是s1 和 s2,只是他们的别名.

返回的也是一个字符串的首地址,也是常类型的。

第一:
using namespace std 是声明在其作用域下的所有方法都是在名字空间std里,故cout不需要特别指定