什么时候在功能之前使用const,什么时候不应该使用const

时间:2014-10-27 20:54:01

标签: c++

我无法弄清楚这一点。我正在尝试重新创建“复杂”的c ++类和那些函数。

例如:real(), imag(), abs()等将参数用作const complex& obj。所以我想如果你通过它的引用传递对象,它就不会被复制并节省一点内存并且更快并且在它前面使用const以避免弄乱那个对象。我对吗? 所以我认为我也可以像这些那样创建我的函数,但为什么那些带有const参数的函数需要const才能自己运行? 这是我得到的:

class MyComplex{
private:
    double real;
    double imag;
public:
    MyComplex();
    MyComplex(int real);
    MyComplex(int real, int imag);
    double getReal();
    double getImag();
    void setReal(int real);
    void setImag(int imag);

    friend const double real(const MyComplex& obj);
    friend const double imag(const MyComplex& obj);
    friend const double abs(const MyComplex& obj);
    friend const double arg(const MyComplex& obj);
    friend const double norm(const MyComplex& obj);
    friend const std::string conj(const MyComplex& obj);
    friend std::string myPolar(double rho, double theta);


};

如果我不把const放在他们面前,他们就不行了。

const double real(const MyComplex& obj){
    return obj.real;
}

其他功能非常相似。

3 个答案:

答案 0 :(得分:1)

你的设计很糟糕。

你应该改变什么:

getRealgetImag应为const - 成员函数(在参数列表后添加限定符)。

所有这些friend - 函数都不应该如此友好,只能使用公共接口实现它们 (请记住,封装意味着根据类内部细节最小化代码量。)

无论如何,很少有理由拥有const - 合格的返回类型。我从来没有过 使返回类型const有时甚至可能会破坏。

答案 1 :(得分:0)

没有理由返回const内置类型或对象。

答案 2 :(得分:0)

声明

friend const double real(const MyComplex& obj);

不声明const函数,它声明了一个返回常量值的非const函数。由于您无论如何都按值返回,因此const毫无用处。

const函数声明如下:

//within the class definition
double getReal() const;

这使隐含参数变为getReal()this指针const,允许您执行myConstComplex.getReal()

而且,正如Deduplicator正确指出的那样,只要踢那些朋友,你就不需要它们而且你不想要它们。