Проблема с перегрузкой операторов типов в классе C ++

Мой сервер выбрасывал это исключение в течение 2 дней, и я решил его, переместив функцию разъединения с помощью:

outputStream.close();
inputStream.close();
Client.close();

. К концу строки списка. если это кому-то помогло.

0
задан soyoon3292 18 January 2019 в 13:28
поделиться

2 ответа

Добавление ключевого слова const в конце метода запрещает ему изменять любые значения членов или вызывать любые неконстантные методы. Единственным исключением являются изменяемые значения, которые всегда можно изменить.

class A
{
    int i1;
    mutable int i2;
public:
    void m() const
    {
        // i1 = 5 <- error
        i2 = 5 // <- ok
    }
}
0
ответ дан Phins 18 January 2019 в 13:28
поделиться

В этой функции:

void testFunc(const CMyString &strParam) {
    cout << strParam << endl;
}

strParam является ссылкой const на CMystring, поэтому вы можете вызывать только const -квалифицированный метод для него:

[ 111]

В рамках const -квалифицированного метода вы не можете изменять не mutable атрибуты или вызывать не const методы, что гарантирует, что ваш объект не «модифицирован» (по крайней мере, он не должен быть из внешняя точка зрения).

Обратите внимание, что вам, скорее всего, следует преобразовать в const char* из const -квалифицированного метода, в противном случае можно было бы сделать это:

void testFunc(const CMyString &strParam) {
    // I am modifiying the underlying char array of const variable
    static_cast<char*>(strParam)[0] = '\0';
}

Поэтому ваш оператор преобразования должен быть:

operator const char*() const;
0
ответ дан Holt 18 January 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: