首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载函数模板

重载函数模板
EN

Stack Overflow用户
提问于 2014-07-10 11:52:55
回答 3查看 93关注 0票数 0

在阅读C++ Templates:The Complete Guide一书中的重载函数模板时,我遇到了以下示例:

代码语言:javascript
复制
// maximum of two values of any type 
template <typename T> 
inline T const& max (T const& a, T const& b) 
{ 
    return a < b ? b : a; 
} 

// maximum of two pointers 
template <typename T> 
inline T* const& max (T* const& a, T* const& b) 
{ 
    return *a < *b ? b : a; 
} 

// maximum of two C-strings 
inline char const* const& max (char const* const& a, 
                               char const* const& b) 
{ 
    return std::strcmp(a,b) < 0 ? b : a; 
} 

int main () 
{ 
    int a=7; 
    int b=42; 
    ::max(a,b);      // max() for two values of type int 

    std::string s="hey"; 
    std::string t="you"; 
    ::max(s,t);      // max() for two values of type std::string 

    int* p1 = &b; 
    int* p2 = &a; 
    ::max(p1,p2);    // max() for two pointers 

    char const* s1 = "David"; 
    char const* s2 = "Nico"; 
    ::max(s1,s2);    // max() for two C-strings 
} 

我不明白在正常max函数的返回类型和参数类型中使用的char const* const&的含义和用途。即使我们使用char,const*,它也工作得很好。

EN

回答 3

Stack Overflow用户

发布于 2014-07-10 11:55:47

回复

没有理解char const* const的含义和用途&在正常的max函数的返回类型和参数类型中使用。即使我们使用char,const*,它也工作得很好。

这可能会在书中解释(然后它是出于教学目的,只是一个糟糕的例子),或者它可能是纯粹的愚蠢。

如果您不关心严格地应用指导规则,或者只是在形式参数上没有这样的const规则,那么就没有充分的理由不使用char const* const,或者甚至只使用char const*

如果它是教育性的,那么请注意,所有三个重载对于正式参数类型都具有相同的形式,即T const&

例如,当你想要从模板代码中获取其中一个的地址时,这会有所帮助。

我提到这一点是因为这本书是Josuttis和Vandevorde (Daveed)写的,他们很少做愚蠢的事情。

票数 0
EN

Stack Overflow用户

发布于 2014-07-10 13:03:19

由于您在本书的函数模板和重载解析部分中找到了这一点,因此示例的重点是说明选择哪些函数进行重载解析。为了阐明非模板化函数是首先要考虑的问题,不管模板化函数匹配得有多好,他们都构建了char const* const&的最大示例。相反,如果函数签名是char const*,那么它就没有说教的目的了--两个模板化的函数都不匹配。

票数 0
EN

Stack Overflow用户

发布于 2014-07-10 16:07:58

是的,在实践中,通过常量引用返回指针是没有意义的。

但这里是本书中关于函数模板重载的部分,我认为它只是用来拟合函数模板max的返回值的定义,它是一个常量引用作为T const&,所以正常的max函数(对于类型char const*)的返回值应该是char const* const&

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24668194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档