[2018年6月4号]C++ primer 课后练习 第十六章 模版与泛型编程

这篇博客主要探讨了C++ Primer一书中第十六章关于模板和泛型编程的课后练习,涉及函数模板的重载和匹配问题。通过分析16.47、16.49和16.50等题目,解释了不同参数类型如何影响函数模板的选择和适配,特别是非const指针作为参数时的匹配规则。
摘要由CSDN通过智能技术生成

16.47

template <typename F, typename T1, typename T2>
void filp(F f, T1&& t1, T2&& t2){
    f(std::forward<T1>(t1),std::forward<T2>(t2));
}

void func_f(int& i, int&& j){
}
void func_g(int i, int j) {
}

int main() {
    int i = 10;
    filp(func_f, i, 42);
    filp(func_g, i, 42);
    for (;;);
    return 0;
}
16.48
template <typename T> 
string debug_rep(const T&t){
}

template <typename T>
string debug_rep(T*t) {
}
string debug_rep(const string&);
string debug_rep(char * p){
    return debug_rep(string(p));
}

16.49

g(T);g(T*);g(T);g(T*)

f(T);f(const T*);f(T);f(const T*)

template <typename T>
void func_1649(T){
    cout << "func_1649(T)" << endl;
}
template <typename T>
void func_1649(const T *) {
    cout << "func_1649(const T *)" << endl;
}
template <typename T>
void func_g_1649(T) {
    cout << "func_g_1649(T)" << endl;
}
template <typename T>
void func_g_1649(T *) {
    cout << "func_g_1649(T *)" << endl;
}

int main() {
    int i = 42, *p= &i;
    const int ci =0, *p2=&ci;
    func_g_1649(42); func_g_1649(p); func_g_1649(ci); func_g_1649(p2);
    func_1649(42); func_1649(p); func_1649(ci); func_1649(p2);
    for (;;);
    return 0;
}


16.50

f(p)判断错误

f(p)更适配f(T),因为p是非const指针,可以被改变,所以f(const T *)是不适配的


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值