C ++: статическая переменная-член - PullRequest
3 голосов
/ 24 марта 2012

Заявление: «Статические переменные-члены могут быть изменены ТОЛЬКО статическими методами».

Правильно ли это утверждение или статические переменные-члены также могут быть изменены нестатическими методами?

Спасибо!

Ответы [ 4 ]

7 голосов
/ 24 марта 2012

Это не правильно. Статический член может быть доступен и изменен нестатической функцией-членом.

7 голосов
/ 24 марта 2012

Это неправильно.static данные-члены могут быть изменены любой функцией-членом.Методы static также могут быть вызваны любой функцией-членом.

С другой стороны, это невозможно: static методы не могут вызывать не- static методы и не могут обращаться к не- static members.

Это связано с тем, что static члены (методы и данные) связаны с классом, а нестатики - с экземплярами класса.

1 голос
/ 24 марта 2012

Неверное утверждение.Вы можете изменять статические члены из любой функции-члена класса и из любой другой функции, из которой статический член виден (т. Е. Открытая статика может быть изменена из любого места).

0 голосов
/ 24 марта 2012

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

struct test {
   void foo() {
      x = 1;
      bar();
   }
   static bar() {
      x = 2;
   }
   static int x;
};
int test::x = 0;
int main() {
   test::bar();
   test::x = 3;
}
...