константа в классе
От: Аноним  
Дата: 12.09.05 07:33
Оценка:
Люди, помогите !
как объявить константу в классе?
мне нужно вот в таком вот виде:

class A {
    const int F = 123;
};


Спасибо
Re: константа в классе
От: dyattle  
Дата: 12.09.05 07:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А так не пойдёт?

class A
{
    enum
    {
         F = 123
    };
};
Re: константа в классе
От: Chelovek_  
Дата: 12.09.05 07:50
Оценка: +1
Может вот так:

А>
А>class A {
А>    static const int F = 123;
А>};
А>
Re[2]: константа в классе
От: Аноним  
Дата: 12.09.05 07:51
Оценка:
Здравствуйте, dyattle, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


D>А так не пойдёт?


D>
D>class A
D>{
D>    enum
D>    {
D>         F = 123
D>    };
D>};
D>


да как раз так я и привык делать
но требуется именно константа... const
Как объявить константу в классе?
От: Кодт Россия  
Дата: 12.09.05 07:53
Оценка: 6 (4)
#Имя: FAQ.cpp.constinclass
Здравствуйте, Аноним, Вы писали:

А>как объявить константу в классе?


class A {
    const int F /* = 123 */;  // это - константная переменная-член

    static const int G = 123; // вот так правильно... (старые компиляторы будут ругаться)
    static const int H;       // это - константная переменная - статический член (требует отдельной инициализации)
    enum { I = 123 };         // ещё можно делать вот так

    A() : F(123) {}           // константы-члены нужно инициализировать в конструкторе
    A(int x) : F(x*2) {}      // причём в разных конструкторах - можно по-разному
};

// где-то в недрах .cpp
const int A::H = 123;
Перекуём баги на фичи!
Re[2]: константа в классе
От: Аноним  
Дата: 12.09.05 07:56
Оценка:
Здравствуйте, Chelovek_, Вы писали:

C_> Может вот так:


А>>
А>>class A {
А>>    static const int F = 123;
А>>};
А>>


: error C2258: illegal pure syntax, must be '= 0'
: error C2252: 'F' : pure specifier can only be specified for functions
Re[2]: константа в классе
От: elGray  
Дата: 12.09.05 08:09
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>как объявить константу в классе?

А>>
А>>class A {
А>>    const int F /* = 123 */; // это - константная переменная-член

К>      static const int G = 123; // вот так правильно... (старые компиляторы будут ругаться)
К>      static const int H; // это - константная переменная - статический член (требует отдельной инициализации)
К>      enum { I = 123 }; // ещё можно делать вот так

К>      A() : F(123) {} // константы-члены нужно инициализировать в конструкторе
К>      A(int x) : F(x*2) {} // причём в разных конструкторах - можно по-разному
А>>};

К>// где-то в недрах .cpp
К>const int A::H = 123;
А>>


спасибо большое!
правда, у меня (ms vs 6.0) сработал пример только с F. Как раз то, что нужно
получается, константной переменной-члену можно дать значение только в списке инициализаторов?
Re[3]: константа в классе
От: Ovl Россия  
Дата: 12.09.05 09:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, dyattle, Вы писали:


D>>Здравствуйте, Аноним, Вы писали:


D>>А так не пойдёт?


D>>
D>>class A
D>>{
D>>    enum
D>>    {
D>>         F = 123
D>>    };
D>>};
D>>


А>да как раз так я и привык делать

А>но требуется именно константа... const

нужно слово const или чтобы переменная была неизменяемой?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[4]: константа в классе
От: _DAle_ Беларусь  
Дата: 12.09.05 11:06
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, dyattle, Вы писали:


D>>>Здравствуйте, Аноним, Вы писали:


D>>>А так не пойдёт?


D>>>
D>>>class A
D>>>{
D>>>    enum
D>>>    {
D>>>         F = 123
D>>>    };
D>>>};
D>>>


А>>да как раз так я и привык делать

А>>но требуется именно константа... const

Ovl>нужно слово const или чтобы переменная была неизменяемой?


Константные члены могут быть проинициализированы значениями, известными только в рантайме. Да и значения перечислений не являются lvalue.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[5]: константа в классе
От: Ovl Россия  
Дата: 12.09.05 11:44
Оценка:
Здравствуйте, _DAle_, Вы писали:

Ovl>>нужно слово const или чтобы переменная была неизменяемой?


_DA>Константные члены могут быть проинициализированы значениями, известными только в рантайме.

может. но про это разговора не было

_DA>Да и значения перечислений не являются lvalue.

а разве константа, которой добивается автор, будет являеться lvalue?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[6]: константа в классе
От: _DAle_ Беларусь  
Дата: 12.09.05 11:47
Оценка:
Здравствуйте, Ovl, Вы писали:

_DA>>Да и значения перечислений не являются lvalue.

Ovl>а разве константа, которой добивается автор, будет являеться lvalue?

Да.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[7]: константа в классе
От: Ovl Россия  
Дата: 12.09.05 11:51
Оценка:
Здравствуйте, _DAle_, Вы писали:

_DA>Здравствуйте, Ovl, Вы писали:


_DA>>>Да и значения перечислений не являются lvalue.

Ovl>>а разве константа, которой добивается автор, будет являеться lvalue?

_DA>Да.


можно пример когда константа является lvalue?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[8]: константа в классе
От: _DAle_ Беларусь  
Дата: 12.09.05 11:57
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, _DAle_, Вы писали:


_DA>>Здравствуйте, Ovl, Вы писали:


_DA>>>>Да и значения перечислений не являются lvalue.

Ovl>>>а разве константа, которой добивается автор, будет являеться lvalue?

_DA>>Да.


Ovl>можно пример когда константа является lvalue?


Не пример, но статья, объясняющая возможные непонятки http://www.rsdn.ru/article/cpp/lvalue.xml
Автор(ы): Павел Кузнецов
Дата: 02.01.2004
lvalue и rvalue — что это такое.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[5]: константа в классе
От: Ellin Россия www.rsdn.ru
Дата: 12.09.05 12:03
Оценка:
Здравствуйте, _DAle_, Вы писали:
_DA>Константные члены могут быть проинициализированы значениями, известными только в рантайме.
А как с этим быть?
К>// в .срр файле
К>const int Test::val = 33;
А>>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: константа в классе
От: _DAle_ Беларусь  
Дата: 12.09.05 12:08
Оценка:
Здравствуйте, Ellin, Вы писали:

E>Здравствуйте, _DAle_, Вы писали:

_DA>>Константные члены могут быть проинициализированы значениями, известными только в рантайме.
E>А как с этим быть?
E>
К>>// в .срр файле
К>>const int Test::val = 33;
А>>>
E>


Немного не понял к чему вопрос. Но в любом случае для такой инициализации необходимо, чтобы val был статической константой.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[9]: константа в классе
От: Ovl Россия  
Дата: 12.09.05 12:27
Оценка:
Здравствуйте, _DAle_, Вы писали:

_DA>Здравствуйте, Ovl, Вы писали:


Ovl>>Здравствуйте, _DAle_, Вы писали:


_DA>>>Здравствуйте, Ovl, Вы писали:


_DA>>>>>Да и значения перечислений не являются lvalue.

Ovl>>>>а разве константа, которой добивается автор, будет являеться lvalue?

_DA>>>Да.


Ovl>>можно пример когда константа является lvalue?


_DA>Не пример, но статья, объясняющая возможные непонятки http://www.rsdn.ru/article/cpp/lvalue.xml
Автор(ы): Павел Кузнецов
Дата: 02.01.2004
lvalue и rvalue — что это такое.


я имел ввиду, что константа не может быть lvalue без использования const_cast (чье использование мне не кажется хорошим тоном).
imho, аргумент, что константу иногда требуется изменить противоречит самому использованию константы.
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[10]: константа в классе
От: _DAle_ Беларусь  
Дата: 12.09.05 12:29
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, _DAle_, Вы писали:


_DA>>Здравствуйте, Ovl, Вы писали:


Ovl>>>Здравствуйте, _DAle_, Вы писали:


_DA>>>>Здравствуйте, Ovl, Вы писали:


_DA>>>>>>Да и значения перечислений не являются lvalue.

Ovl>>>>>а разве константа, которой добивается автор, будет являеться lvalue?

_DA>>>>Да.


Ovl>>>можно пример когда константа является lvalue?


_DA>>Не пример, но статья, объясняющая возможные непонятки http://www.rsdn.ru/article/cpp/lvalue.xml
Автор(ы): Павел Кузнецов
Дата: 02.01.2004
lvalue и rvalue — что это такое.


Ovl>я имел ввиду, что константа не может быть lvalue без использования const_cast (чье использование мне не кажется хорошим тоном).

Ovl>imho, аргумент, что константу иногда требуется изменить противоречит самому использованию константы.

Я же дал ссылку, почитай, пожалуйста, что такое lvalue в с++. Изменение значения константы тут не при чем.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[10]: константа в классе
От: Ovl Россия  
Дата: 12.09.05 12:30
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>Здравствуйте, _DAle_, Вы писали:


_DA>>Здравствуйте, Ovl, Вы писали:


Ovl>>>Здравствуйте, _DAle_, Вы писали:


_DA>>>>Здравствуйте, Ovl, Вы писали:


_DA>>>>>>Да и значения перечислений не являются lvalue.

Ovl>>>>>а разве константа, которой добивается автор, будет являеться lvalue?

_DA>>>>Да.


Ovl>>>можно пример когда константа является lvalue?


_DA>>Не пример, но статья, объясняющая возможные непонятки http://www.rsdn.ru/article/cpp/lvalue.xml
Автор(ы): Павел Кузнецов
Дата: 02.01.2004
lvalue и rvalue — что это такое.


Ovl>я имел ввиду, что константа не может быть lvalue без использования const_cast (чье использование мне не кажется хорошим тоном).

Ovl>imho, аргумент, что константу иногда требуется изменить противоречит самому использованию константы.

пропустил параграф. если пользоваться нужен указатель на константу, то тогда действительно enum не катит
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[10]: константа в классе
От: Кодт Россия  
Дата: 12.09.05 12:31
Оценка:
Здравствуйте, Ovl, Вы писали:

Ovl>>>можно пример когда константа является lvalue?


_DA>>Не пример, но статья, объясняющая возможные непонятки http://www.rsdn.ru/article/cpp/lvalue.xml
Автор(ы): Павел Кузнецов
Дата: 02.01.2004
lvalue и rvalue — что это такое.


Ovl>я имел ввиду, что константа не может быть lvalue без использования const_cast (чье использование мне не кажется хорошим тоном).

Ovl>imho, аргумент, что константу иногда требуется изменить противоречит самому использованию константы.

const_cast необязателен, чтобы продемонстрировать lvalue'ность.
enum SomeEnum { some_rvalue = 123 };
const int some_const_lvalue = 123;

const SomeEnum* pe = &some_enum; // агащаз - error: expression must be an lvalue or a function designator
const int* pi = &some_const_lvalue; // всё в порядке
Перекуём баги на фичи!
Re[11]: константа в классе
От: Ovl Россия  
Дата: 12.09.05 12:36
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Ovl, Вы писали:


Ovl>>>>можно пример когда константа является lvalue?


_DA>>>Не пример, но статья, объясняющая возможные непонятки http://www.rsdn.ru/article/cpp/lvalue.xml
Автор(ы): Павел Кузнецов
Дата: 02.01.2004
lvalue и rvalue — что это такое.


Ovl>>я имел ввиду, что константа не может быть lvalue без использования const_cast (чье использование мне не кажется хорошим тоном).

Ovl>>imho, аргумент, что константу иногда требуется изменить противоречит самому использованию константы.

К>const_cast необязателен, чтобы продемонстрировать lvalue'ность.

К>
К>enum SomeEnum { some_rvalue = 123 };
К>const int some_const_lvalue = 123;

К>const SomeEnum* pe = &some_enum; // имелось ввиду some_rvalue?
К>const int* pi = &some_const_lvalue; // всё в порядке
К>


если бы вопрос был только является ли элемент enum lvalue — то ответ можно посмотреть в конце статьи.
но у меня вопрос был как эту lval-ность использовать...
и просто ответ "как указатель на константное значение" — меня бы вполне устроил
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.