«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему передача константного объекта в неконстантную функцию-член вызывает ошибку дисквалификации квалификатора в C++?

Почему передача константного объекта в неконстантную функцию-член вызывает ошибку дисквалификации квалификатора в C++?

Опубликовано 14 января 2025 г.
Просматривать:222

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

Передача константных объектов в качестве аргумента «this»: ошибка дисквалификации квалификатора

В C передача константных объектов в качестве аргументов «this» в функции-члены может привести к ошибкам «передача 'const xxx' как аргумент 'this' функции-члена отбрасывает квалификаторы». Это происходит потому, что компилятор учитывает возможность того, что неконстантные функции-члены могут изменить объект, что запрещено для константных объектов.

Анализ проблем

В предоставленном коде , объекты в наборе сохраняются как const StudentT. При доступе к функциям-членам getId() и getName() внутри цикла компилятор обнаруживает эту проблему, поскольку объекты являются константными, а функции-члены не помечены как константные.

Решение

Чтобы устранить ошибку, функции getId() и getName() должны быть преобразованы в const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Это позволяет вызывать функции для константных объектов без нарушения правил константы.

Дополнительные примечания

  • Аналогично, оператор Функция
inline bool operator
  • Передача ссылок (вместо объектов) в функции-члены предпочтительна для производительности и корректности кода.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3