Почему мы не можем использовать константные члены в статических функциях-членах? - PullRequest
9 голосов
/ 28 декабря 2011
class TConst
{
    const int i;
    int& ref;
    public:
    TConst(int n):i(n),ref(n){}
    static void p1(){prn(i);}//error here
};

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

Почему это не разрешено?

Ответы [ 3 ]

13 голосов
/ 28 декабря 2011

const означает разные вещи.В этом случае это означает, что i является неизменным после инициализации.Это не означает, что это буквальная константа (как я думаю, вы думаете, что это означает).i может отличаться для разных экземпляров TConst, поэтому логично, что методы static не могут его использовать.

7 голосов
/ 28 декабря 2011

Это не сработало бы, даже если бы оно не было const:

error: a nonstatic member reference must be relative to a specific object

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

6 голосов
/ 28 декабря 2011

Элемент const инициализируется во время строительства объекта. Элементы static не зависят от создания объекта и не имеют доступа к указателю this, следовательно, они не знают, где находится ваша переменная const.

...