| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 801 人关注过本帖
标题:函数模板支持重载,但vc6是不是有模板重载后非模板函数就不支持类型自动转换 ...
只看楼主 加入收藏
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
结帖率:100%
收藏
 问题点数:0 回复次数:1 
函数模板支持重载,但vc6是不是有模板重载后非模板函数就不支持类型自动转换?
1.自动转化
#include<iostream>
using std::cout;
using std::endl;
int const& max(int const& a,int const& b)
{
    return a<b?b:a;
}
int main()
{
    cout<<max('a',42)<<endl;
    return 0;
}

2.函数重载后,编译出错,没有调用非模板函数,还是调用模板。
#include<iostream>
using std::cout;
using std::endl;
inline int const& max(int const& a,int const& b)
{
    return a<b?b:a;
}
template<typename T>
inline T const& max(T const& a,T const& b)
{
    return a<b?b:a;
}
int main()
{
    cout<<::max('a',42)<<endl;
    return 0;
}
编译出错,参数不确定。
所以,函数模板支持重载,但重载后vc6不支持非函数模板自动转换了。
搜索更多相关主题的帖子: 函数模板 
2009-08-27 13:37
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
另外vc6是不是模板重载后不能识别指针参数和非指针参数?
如非模板:
#include<iostream>
inline int* const& max(int* const& a,int* const& b)
{
    return *a<*b?b:a;
}
inline int const& max(int const& a,int const& b)
{
    return a<b?b:a;
}
int main()
{
    int a=7;
    int b=42;
    int* p1=&b;
    int* p2=&a;
    ::max(p1,p2);
    return 0;
}
正确调用inline int* const& max(int* const& a,int* const& b) 。
如模板:
#include<iostream>
template<typename T>
inline T* const& max(T* const& a,T* const& b)
{
    return *a<*b?b:a;
}
template<typename T>
inline T const& max(T const& a,T const& b)
{
    return a<b?b:a;
}
int main()
{
    int a=7;
    int b=42;
    int* p1=&b;
    int* p2=&a;
    ::max(p1,p2);
    return 0;
}
编译错误,max(p1,p2);不清楚调用哪个覆盖。
所以vc6.0模板重载还是不要改变参数指针类型,只能改变参数数量或显示指定参数类型。
以上程序在devc++里都编译正确。
2009-08-27 15:05
快速回复:函数模板支持重载,但vc6是不是有模板重载后非模板函数就不支持类型自 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015555 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved