Подтвердить что ты не робот

Функция, не являющаяся членом, не может иметь cv-квалификатор

При записи следующей функции abs я получаю сообщение об ошибке:

Функция нечлена unsigned int abs(const T&) не может иметь cv-квалификатор.

template<typename T>
inline unsigned int abs(const T& t) const
{
    return t>0?t:-t;
}

После удаления квалификатора const для функции нет ошибки. Поскольку я не изменяю t внутри функции, код должен быть скомпилирован. Мне интересно, почему я получил ошибку?

4b9b3361

Ответ 1

Ваше желание не изменять t выражается в const T& t. Финал const указывает, что вы не будете изменять какие-либо переменные-члены класса abs. Поскольку нет класса, к которому принадлежит эта функция, вы получаете сообщение об ошибке

Ответ 2

Модификатор const в конце объявления функции применяется к скрытому параметру this для функций-членов.

Поскольку это свободная функция, нет this и этот модификатор не нужен.

Параметр t уже имеет свой собственный const в списке параметров.

Ответ 3

cv-qualifier в функции-члене указывает, что указатель this должен иметь косвенный тип const (или volatile, const volatile), и поэтому функция-член может быть вызвана экземплярами с этой квалификацией.

Свободные функции (и статические функции класса) не имеют указателя this.

Ответ 4

Как мы все знаем, ключевое слово const используется после того, как список аргументов указывает, что это указатель на константу указателя.

Существует нечлена-функция, она не принадлежит классу, поэтому возникает ошибка const const end.

Решение проблемы: - либо стать функцией члена класса, либо удалить ключевое слово const const end end