static
это ключевое слово, используемое, например, меньше переменных/методов класса. Поэтому заявка:
static int a=9;
означает, что жизнь на протяжении всего срока службы приложения. Ключевое слово const
означает, что значение не может измениться. Поэтому const static int a=9;
объявляет переменную, которая является как статической (живет для приложения), так и не изменяет значение.
Причина вы не можете состояние:
const int a=9;
Это потому, что не статические члены не могут быть инициализированы как это, и необходимо инициализировать в конструкторе. Поскольку вы не можете изменять постоянные переменные вне декларации, постоянные нестатические члены становятся невозможными.
EDIT: Также обратите внимание, что нестатический элемент const не нужен. Поскольку ваш член никогда не изменит значение, сделав его статическим, чтобы обойти ошибки, не будет иметь никакого значения для вашего кода, кроме того, что вы можете получить к нему доступ с помощью A::a
, вместо того, чтобы создавать экземпляр A.
Без записи Const int A :: b я мог бы скомпилировать этот код успешно !!!!! Зачем ? – Jagan
Если только я не инициализирую static const int b с некоторым значением, он дает ошибку (если я не записываю определение)? Зачем ? – Jagan
Успешная компиляция не имеет ничего общего с правильностью вашего кода -> 'Член все еще должен быть определен в области пространства имен, если он используется в программе, а определение области пространства имен не должно содержать инициализатор' –