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

template
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;
这些都不会导致二义性吗?

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

        double & operator[ ](int i);
        double operator[ ](int i) const;

这个是运算符的重载,调用方式不同,不会产生二义性

        T1 & first();
        T2 & second();
        T1 first() const { return a; }
        T2 second() const { return b; }

这里的一行a和和二行b是定义的属性,第三行和第四行是定义的成员函数,T是类模板,相当于泛型,重载都不会有二义性
二义性:调用的时候发生矛盾,编译器无法正常调用


可以看下cpp参考手册中的 c++-成员函数