И я полагаю, что константная функция имеет отличительную сигнатуру функции, чем аналогичная неконстантная функция (т.е. const-nesss является частью сигнатуры функции, в отличие от большинства источников, которые говорят, что она зависит только от типа аргументов итип возврата).
Функция константы имеет ключевое слово const
, которое добавляется в конце ее.
int doSomething() const;
Это означает, что функция не изменитсостояние (члены) класса.
Упоминание const
в аргументе означает, что функция не будет изменять состояние этой переменной (param
в следующем примере), передаваемой в функцию.
int doSomething(const int param);
Упоминание const
перед тем, как возвращаемый тип применяется к типу, возвращаемому функцией.
const int doSomething();
Подразумевает, что функция возвращает целочисленное значение const.
Так что даваше понимание верно.И нет другого способа объявить функцию const, кроме как поставить const после последнего парантеза.Кроме того, обратите внимание, что функцию-член const можно вызывать только для объекта const, в то время как не-const функцию-член можно вызывать как const, так и не const объектами этого класса.
Что касается способа объявленияКаждая организация имеет свои собственные правила кодирования, и вам следует придерживаться этого. Да, нет явных преимуществ использования упомянутых вами конструкторов в любом случае в отношении оптимизации или обработки компилятора.Просто следуйте тому, что вам нравится или то, что ваша организация хочет, чтобы вы следовали.