为什么std :: complex实际成员函数不是const?

时间:2014-06-25 03:52:53

标签: c++ stl

成员职能的任何理由"真实" " imag"在std :: complex类中不是const?

2 个答案:

答案 0 :(得分:2)

real类模板中complex有两个重载:

T real() const;
void real(T);

上的第一个 const,因此无法满足您的要求。

第二个,它采用T参数并且不返回任何内容,不是const,因为它是一个" setter"方法 - 它的全部要点是改变对象的状态,所以最好不要const

答案 1 :(得分:1)

让我们看一下C ++标准:

  

C ++ 2011第26.4.2节“类模板复杂”

namespace std {
    template<class T>
    class complex {
        public:
            typedef T value_type;

            complex(const T& re = T(), const T& im = T());
            complex(const complex&);
            template<class X> complex(const complex<X>&);

            T real() const;
            void real(T);
            T imag() const;
            void imag(T);

            complex<T>& operator= (const T&);
            complex<T>& operator+=(const T&);
            complex<T>& operator-=(const T&);
            complex<T>& operator*=(const T&);
            complex<T>& operator/=(const T&);

            complex& operator=(const complex&);
            template<class X> complex<T>& operator= (const complex<X>&);
            template<class X> complex<T>& operator+=(const complex<X>&);
            template<class X> complex<T>& operator-=(const complex<X>&);
            template<class X> complex<T>& operator*=(const complex<X>&);
            template<class X> complex<T>& operator/=(const complex<X>&);
    };
}

我说它非常清楚地表明std::complex::real()std::complex::imag()是const方法。