Есть разница между стат. полем и var внутри файла .cpp
От: sanx  
Дата: 08.08.11 14:03
Оценка:
Существенная ли разница, если я объявляю приватное статическое поле или же использую переменную спрятанную внутри файла .cpp? И про методы интересно, кроме того что статические имеют доступ к полям класса. Возможно есть какие-нибудь нюансы?
Re: Есть разница между стат. полем и var внутри файла .cpp
От: _nn_ www.nemerleweb.com
Дата: 08.08.11 14:23
Оценка:
Здравствуйте, sanx, Вы писали:

S>Существенная ли разница, если я объявляю приватное статическое поле или же использую переменную спрятанную внутри файла .cpp? И про методы интересно, кроме того что статические имеют доступ к полям класса. Возможно есть какие-нибудь нюансы?


Например различия доступа к классу:

struct a
{
private:
  int var;

  static int s;
};

int a::s = (new a())->var; // OK. Т.к. "s" часть класса "a", имеем доступ к приватной части.

static int s2 = (new a())->var; // Error. Т.к. "s2" не является частью класса "a".

int main()
{}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Есть разница между стат. полем и var внутри файла .cpp
От: rg45 СССР  
Дата: 08.08.11 15:32
Оценка: 3 (2)
Здравствуйте, sanx, Вы писали:

S>Существенная ли разница, если я объявляю приватное статическое поле или же использую переменную спрятанную внутри файла .cpp? И про методы интересно, кроме того что статические имеют доступ к полям класса. Возможно есть какие-нибудь нюансы?


Бывает так, что статическое поле имеет тип, использование которого в заголовочном файле может повлечь не очень приятные моменты — "засвечивание" деталей реализации, необходимость подключения дополнительных/нежелательных заголовочных файлов, риск увеличения времени компиляции и др. В этих случаях вынесение закрытых статических переменных из класса и их сокрытие в единицах трансляции может оказаться весьма полезным. То же можно сказать и о закрытых статических функциях членах. Но при этом, как уже заметили, не нужно забывать об изменении условий доступа к другим членам класса. Да, при этом имеет смысл активно использовать анонимные пространства имен — во избежание ошибок линковки и нарушений ODR.
--
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.