2011-12-28 1 views
9
class TConst 
{ 
    const int i; 
    int& ref; 
    public: 
    TConst(int n):i(n),ref(n){} 
    static void p1(){prn(i);}//error here 
}; 

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

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

+1

Всегда помните, что полная ошибка, которую вы получаете. – orlp

+1

const int по-прежнему привязан к объекту, а не классу. – nullpotent

+1

В статическом методе нет экземпляра класса, поэтому нет членов класса ... FYI вы можете сделать это 'static const int i = 42;', если вы хотите использовать его таким образом. – AJG85

ответ

6

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

7

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

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

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

13

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

+0

Это всегда так просто) Спасибо – Alexander