Скажем, у вас была такая функция:
void* allocate(std::size_t sz, void* hint = nullptr) {
// if you give `hint` it *might* be more efficient
}
И затем вы решили, что больше не стоит усилий, чтобы делать вещи, основанные на hint
.Таким образом, вы должны сделать это:
void* allocate(std::size_t sz, [[deprecated]] void* hint = nullptr) {
// `hint` is ignored. The compiler warns me if I use it in the
// function body accidentally, and people reading the function
// signature can see that it is probably going to be ignored.
}
Это позволяет библиотеке сохранять ту же сигнатуру / ABI (так что вам не нужно перекомпилировать материал, который его использует, и унаследованный код по-прежнему может использовать его без каких-либо действий).вреда), а также предотвращает его случайное повторное использование при изменении функции.
Но это в основном для разработчиков функции, а не пользователей функции, в будущем, чтобы они знали, почему, казалось бы, "параметр «бесполезен».
Я бы также подумал, что это отключит предупреждение «неиспользуемый параметр» с флагом -Werror=unused-parameter
в gcc / clang, но это не так.Использование (void) deprecated_parameter
также выдает предупреждение об использовании устаревшего параметра, так что это похоже на ошибку.Если бы он отключил предупреждение о неиспользованном параметре, это был бы другой вариант использования для [[deprecated]]
.