weixin_45757561 2022-08-02 17: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 08: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月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月2日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程