Const仍允许在运算符函数c ++下进行更改

时间:2018-04-11 17:38:37

标签: c++ class const

我有以下代码:

StringC StringC::operator+(const StringC& other) const
{
    strcat(ps,other.ps);
    return ps;
};

使用相关标题如下:

class StringC {
private:
    char* ps;
public:
    StringC(char const *);
    StringC& operator=(const StringC&);
    StringC operator+(const StringC& other) const;
    void Print();

我的理解是,在const函数中使用operator+会阻止我更改psother,但我可以更改两者他们还在。

我尝试了以下内容:

void Class1::Method1() const
{
    Variable = Variable + 1;
};

void Class1::Method1(const int v)
{
    v = 0;
    Variable = v + 1;
};

这个错误正如预期的那样,我假设我在使用const时遗漏了一些东西,但是在使用strcat时会发现第一个代码出错?

1 个答案:

答案 0 :(得分:8)

  

我的理解是,在const函数中使用operator+会阻止我更改psother,但我可以更改两者他们还在。

这是正确的。但是,您无法更改psother.ps,而这不是您正在做的事情。你正在做的是改变ps指向的内容,这不是const。

所以,在operator+ps的类型是char * const(指向char的常量指针)而不是const char *(指向常量char的指针)