大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > C++函数模板详细讲解

C++函数模板详细讲解(3)

关键词:函数模板C++  阅读(1346) 赞(13)

[摘要]本文是对C++函数模板的讲解,对学习C++编程技术有所帮助,与大家分享。

改变参数的数目或显式地指定模板参数

对于以上的重载,如果改为基于C-string的max()函数,通过传值来传递参数,就不能实现3个参数的max()版本:

#include<iostream>
#include<string>
using namespace std;

//求两个任意类型值的最大者(通过传引用进行调用)
template<typename T>
inline T const& max(T const& a, T const& b)
{
    return a < b ? b : a;
}

//求两个C字符串的最大者(通过传值进行调用)
inline char const* max(char const* a, char const* b)
{
    return strcmp(a, b) < 0 ? b : a;
}

//求3个任意类型值的最大者(通过传引用进行调用)
template<typename T>
inline T const& max(T const& a, T const& b, T const& c)
{
    return max(max(a, b), c);
}


int main()
{
    cout<<::max(7, 42, 68)<<endl; //ok

    const char* s1 = "frederic";
    const char* s2 = "anica";
    const char* s3 = "lucas";
    cout<<::max(s1, s2, s3)<<endl; //error

    cin.get();  
    return 0;
}

错误在于:如果对3个C-string调用max,则语句return max(max(a, b), c);将产生错误

原因是对于C-string而言,max(a, b)产生了一个新的临时局部值,该值有可能被外面的max函数以传引用的方式返回,将导致传回无效的引用。

«上一页123下一页»


相关评论