weixin_45757561 2022-08-02 09:52 采纳率: 100%
浏览 32
已结题

c++类成员函数 二义性问题,求解

template <class T1, class T2>
class Pair {
private:
        T1 a;
        T2 b;
public:
        T1 & first();
        T2 & second();
        T1 first() const { return a; }
        T2 second() const { return b; }
        Pair(const T1 & aval, const T2 & bval) : a(aval), b(bval) { }
        Pair() {}
};
其中
        T1 & first();
        T2 & second();
        T1 first() const { return a; }
        T2 second() const { return b; }
这几个函数,不会存在二义性吗?

还有看到几个运算符重载的成员函数:
public:
        double & operator[ ](int i);
        double operator[ ](int i) const;
这些都不会导致二义性吗?

  • 写回答

3条回答 默认 最新

  • 真相重于对错 2022-08-03 00:40
    关注

    不会冲突,你缺乏两个知识点。
    1、函数重载,函数重载就是函数名相同,而参数不同的函数,与返回值无关。如果有两个函数同名,参数相同,而返回值不同,则会报错。
    其次就是const 参数与 非const 构成重载。
    2、类成员函数后边跟一个const ,这代表这个成员函数只能被const对象调用,另外一个类的非静态函数,编译器会自动加一个参数,他就是this
    结合二者,那么拿first举例,编译后的伪代码
    T1& first( Pair<T1,T2> *this)
    T1 first( const Pair<T1,T2> *this)这两个函数构成重载,当一个const 对象调用时执行第二个,否则执行第一个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 8月10日
  • 已采纳回答 8月3日
  • 创建了问题 8月2日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部