免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1486 | 回复: 3
打印 上一主题 下一主题

请教C++ template instatiation warning [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-31 09:30 |只看该作者 |倒序浏览
template  
inline T const& max (T const& a, T const& b)
{
    return a < b ? b : a;
}

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

template  
inline T const& max (T const& a, T const& b, T const& c)
{
    return max (max(a,b), c); // error, if max(a,b) uses call-by-value
}

int main ()
{
    ::max(7, 42, 6); // OK

    const char* s1 = "frederic";
    const char* s2 = "anica";
    const char* s3 = "lucas";
    ::max(s1, s2, s3); // ERROR

}

编译时,warning: returning reference to  temporary.
这是为什么?(代码在c++ templates 书中)

论坛徽章:
0
2 [报告]
发表于 2009-12-31 09:44 |只看该作者
lz的模板怎么写得这么怪异啊

论坛徽章:
0
3 [报告]
发表于 2009-12-31 09:54 |只看该作者

回复 #2 gz80 的帖子

这是书上的2.4 节。C++ Templates: The Complete Guide. David Vandevoorde, Nicolai M. Josuttis

论坛徽章:
0
4 [报告]
发表于 2009-12-31 15:06 |只看该作者
书上已经有解释了。
char const* max函数返回的是一个指针副本,当它被调用的时候也是拷贝了一个指针副本作为实参。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP