Я не могу найти полезность второго const в этой части кода C ++, кто-то может объяснить, пожалуйста? - PullRequest
3 голосов
/ 07 ноября 2011

const T & top () const {return m_Data.back ();}

Ответы [ 4 ]

6 голосов
/ 07 ноября 2011

Это означает, что указатель this в функции-член равен const.Другими словами, вызов не изменяет объект.(и любая ссылка / указатель, который он возвращает, также будет const).

3 голосов
/ 07 ноября 2011

Этот синтаксис для методов внутри классов.Методы, помеченные как const (второй const в вашем коде), не могут изменять атрибуты объекта, только чтение.Const-методы являются единственными вызываемыми методами, если вы создаете экземпляр объекта как const.Для примера:

class A {
public:
  void put(int v) {
    var = v;
  }

  int read() const {
    return var;
  }

private:
  int var;
}

int main() {
  A obj;
  obj.put(3);

  const A obj2 = obj;
  obj2.read(); // OK, returns 3;
  obj2.put(4); // Compile time error!
}
2 голосов
/ 07 ноября 2011

Ответ Михаэля охватывает почти все, но есть и другие аспекты:

  • Вы можете вызывать методы const только внутри метода const.
  • Вы можете менять членов, если вы объявите их изменяемыми.
  • Вы не сможете изменять других членов класса.
0 голосов
/ 07 ноября 2011

Только функции-члены могут быть const квалифицированными, функции, не являющиеся членами, не могут. То же самое относится и к C ++ . C не имеет понятия функций-членов и, следовательно, они не могут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...