что переопределяет статическую переменную в С++?

Говорят, что после создания определения для статического члена данных пользователь не может его переопределить. что это точно означает? Поскольку я могу назначить ему что угодно

#include<iostream.h>
class X
{
    public:
       static int i;
    X()
    {
        i = 2;    //no error in initializing it in constructor
    };
};

int X::i=1;

int main()
{
   X obj;
   cout << obj.i;   // prints 2, no prob. occur
   obj.i = 3;
   cout << obj.i;   // prints 3, same runs fine 
   X::i = 10;
   cout<<obj.i;     // prints 10, still no error
   return 0;
}

если присвоение значения и переопределение различаются, то что такое переопределение статической или даже обычной переменной?

Заранее спасибо!


person Community    schedule 29.06.2017    source источник
comment
Внутри класса находится декларация. Вне класса находятся определение и инициализация. В конструкторе есть присваивание.   -  person Some programmer dude    schedule 29.06.2017
comment
Я не думаю, что это дубликат. ОП, кажется, думает, что static и const являются синонимами. Когда он сказал «переопределить», я думаю, он имел в виду «назначить».   -  person Carey Gregory    schedule 29.06.2017
comment
На самом деле, я хочу знать, что такое переопределение переменной? и почему статические переменные нельзя переопределить   -  person    schedule 29.06.2017
comment
Я разделяю мнение @Care   -  person Chris Parker    schedule 29.06.2017
comment
Предыдущий комментарий запутался в каком-то аду Javascript, и я не мог его отредактировать. Я разделяю мнение Кэри Грегори и Прасанны Тхапы — это вариант этого вопроса, а не дубликат. Семантика статики делает это достойным отдельного ответа, ИМХО.   -  person Chris Parker    schedule 29.06.2017