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

Зачем использовать ключевое слово const до и после имени метода или функции?

В моем приложении есть следующий код. Почему мы используем ключевое слово const с типом возвращаемого значения и после имени метода?

const T& data() const { return data_; }
4b9b3361

Ответ 1

const T& data() const { return data_; }
^^^^^

означает, что он вернет ссылку const на T (здесь data_)

Class c;
T& t = c.data()             // Not allowed.
const T& tc = c.data()      // OK.


const T& data() const { return data_; }
                ^^^^^

означает, что функция не будет изменять какие-либо переменные-члены класса (если только элемент не является mutable).

void Class::data() const {
   this->data_ = ...;  // is not allowed here since data() is const (unless 'data_' is mutable)
   this->anything = ... // Not allowed unless the thing is 'mutable'
}

Ответ 2

Отборочный constvolatile) привязывается к левой. Это означает, что в любое время, когда вы видите const, оно применяется к токену слева от него. Однако есть одно исключение; если ничего не осталось слева от const, вместо этого оно связывается справа. Важно запомнить эти правила.

В вашем примере первый const не имеет ничего слева от него, поэтому он привязывается к правилу, который равен T. Это означает, что возвращаемый тип является ссылкой на const T.

Вторая константа имеет что-то слева от нее; функция data(). Это означает, что const связывается с функцией, делая ее функцией const.

В конце мы имеем функцию const, возвращающую ссылку на const T.

Ответ 3

Первая const означает, что функция возвращает ссылку const T.

Второй говорит, что метод не меняет состояние объекта. То есть метод не изменяет никаких переменных-членов.

Ответ 4

const T& data() const { return data_; }

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

const возвращает тип, возвращающий константу ref в T