Const правильность для значений параметров

Я знаю, что мало вопросов о правильности констант, когда утверждается, что для объявления функции и ее определения не нужно согласовывать значения параметров. Это связано с тем, что постоянство значения параметра имеет значение только внутри функции. Это отлично:

// header
int func(int i);

// cpp
int func(const int i) {
    return i;
}

Делать это действительно лучшая практика? Потому что я'никогда не видел, чтобы кто-то делал это. Я'мы видели эту цитату (не уверен в источнике) в других местах, где это обсуждалось: "

Фактически, для компилятора сигнатура функции одинакова независимо от того, включаете ли вы этот const перед параметром значения или нет. ""

Избегайте константных параметров передачи в значениях в объявлениях функций. Все еще сделайте параметр const в той же функции 'определение, если он выигралне может быть изменено. "

Во втором абзаце говорится, чтобы не указывать const в декларации. Я предполагаю, что это потому, что постоянство параметра-значения не имеет смысла как часть определения интерфейса. Это деталь реализации.

Исходя из этой рекомендации, также рекомендуется ли для значений указателя параметров указателя? (Это не имеет смысла для ссылочного параметра, так как вы можетепереназначить ссылку.)

// header
int func1(int* i);
int func2(int* i);

// cpp
int func1(int* i) {
    int x = 0;

    *i = 3; // compiles without error
    i = &x; // compiles without error

    return *i;
}
int func2(int* const i) {
    int x = 0;

    *i = 3; // compiles without error
    i = &x; // compile error

    return *i;
}

Резюме: Создание значений параметров полезно для выявления некоторых логических ошибок. Это лучшая практика? Вы идете до крайности, оставляя const из файла заголовка? Это так же полезно, чтобы константные значения указателя? Почему или почему нет?

Некоторые ссылки:

C ++ const ключевое слово - использовать свободно? Использование 'Const» для параметров функции

Пример использования параметров const:

bool are_ints_equal(const int i, const int j) {
    if (i = j) { // without the consts this would compile without error
        return true;
    } else {
        return false;
    }
    // return i = j; // I know it can be shortened
}