您的位置:首页 > 编程语言 > C语言/C++

[笔试题 5][c/c++]模板函数和普通函数的调用优先顺序

2011-09-18 23:19 417 查看
template <typename T>
inline void print(T t)
{
cout<<"generic::"<<t<<endl;
}

void print(int a)
{
cout<<a<<endl;
}

print(true);

此时注意:

通常调用的顺序是普通函数优先于模板函数而进行调用。

但此处bool优先被匹配到了。bool和int不存在冲突。

故输出为 generic:: 1;

但若改为如下形式

template <typename T>
inline void print(T t)
{
cout<<"generic::"<<t<<endl;
}

void print(bool a)
{
cout<<a<<endl;
}


则优先匹配到的是print(bool)普通函数!!

输出为1.

ps:以下形式,结果输出呢?^_^

template <typename T>
inline void print(T t)
{
cout<<"generic::"<<t<<endl;
}

void pirnt(bool a)
{
cout<<a<<endl;
}
当时自己闹了个笑话。。。。。

不过把问题搞清楚了,也是值得的!

9-18写于实验室。2场笔试,伤不起。。。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笑话
相关文章推荐