Russian Qt Forum
Ноябрь 23, 2024, 16:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Объявить константу в классе  (Прочитано 15550 раз)
Alex_C
Гость
« : Апрель 11, 2012, 15:37 »

Немного не в тему Qt, но в тему C++:
мне необходимо в объявлении класса объявить константу. Так правильно?
Код:
private:
    const static qreal D2R = 0.017453;
Записан
Bepec
Гость
« Ответ #1 : Апрель 11, 2012, 15:38 »

А статик то зачем?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Апрель 11, 2012, 15:48 »

Немного не в тему Qt, но в тему C++:
мне необходимо в объявлении класса объявить константу. Так правильно?
Код:
private:
    const static qreal D2R = 0.017453;
для этого есть раздел С++.

инициализировать статики надо вне класса, например так:
Код
C++ (Qt)
// .h
class A
{
   static const qreal a;
};
 
// .cpp
const qreal A::a = 1.0; // вне всякого метода
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 11, 2012, 16:23 »

инициализировать статики надо вне класса
За исключением интегральных типов.
Записан

Qt 5.11/4.8.7 (X11/Win)
Nimbus
Гость
« Ответ #4 : Апрель 11, 2012, 16:29 »

А статик то зачем?
Чтобы при создании объектов для неё не выделялась память каждый раз. Я тоже практикую такой подход Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Апрель 11, 2012, 16:33 »

По ходу дела такой вопрос
Код
C++ (Qt)
class CTest {
..
static const double PI = 3.151529;
static const double D2R = 180 / PI;
};
 
Есть ли уверенность что PI будет инициализировано до D2R ?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Апрель 11, 2012, 16:42 »

Есть ли уверенность что PI будет инициализировано до D2R ?
Хороший вопрос Улыбающийся
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 11, 2012, 16:45 »

Хороший вопрос Улыбающийся
Ага  Улыбающийся Из той же оперы
Код
C++ (Qt)
const double cos20 = cos(20 * 3.141529 / 180);
 
А так можно?
« Последнее редактирование: Апрель 11, 2012, 16:47 от Igors » Записан
V1KT0P
Гость
« Ответ #8 : Апрель 11, 2012, 16:49 »

По ходу дела такой вопрос
Код
C++ (Qt)
class CTest {
..
static const double PI = 3.151529;
static const double D2R = 180 / PI;
};
 
Есть ли уверенность что PI будет инициализировано до D2R ?
Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Апрель 11, 2012, 16:55 »

Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Точно!
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 11, 2012, 17:02 »

Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Никто не спорит что такая вероятность есть - и даже велика  Улыбающийся Но речь идет о "гарантиях" (а не о "вероятности"). Иногда надо быть нудным напр "а где в стандарте это написано"?
Записан
V1KT0P
Гость
« Ответ #11 : Апрель 11, 2012, 17:11 »

Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Никто не спорит что такая вероятность есть - и даже велика  Улыбающийся Но речь идет о "гарантиях" (а не о "вероятности"). Иногда надо быть нудным напр "а где в стандарте это написано"?
Почитай документацию по тому компилятору который используешь =). Вот GCC например предупреждает, если в конструкторе переменные инициализируются не в том порядке в каком объявлены. Так что думаю с GCC проблем не будет.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Апрель 11, 2012, 17:13 »

Вот GCC например предупреждает, если в конструкторе переменные инициализируются не в том порядке в каком объявлены. Так что думаю с GCC проблем не будет.
Имхо, это немного другое.
Записан

Qt 5.11/4.8.7 (X11/Win)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Апрель 11, 2012, 17:30 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Апрель 11, 2012, 17:32 »

Почитай документацию по тому компилятору который используешь =). Вот GCC например предупреждает, если в конструкторе переменные инициализируются не в том порядке в каком объявлены. Так что думаю с GCC проблем не будет.
Что-то не то Вы рекомендуете Улыбающийся  Если это зависит от компилятора - то лучше такую конструкцию const не использовать и обойтись #define. Потому что только у меня 3 компилятора (gcc, icc и вындозный), а у других часто больше.

Здесь хорошо бы прильнуть к стандарту..
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.155 секунд. Запросов: 23.