Alex_C
Гость
|
|
« : Апрель 11, 2012, 15:37 » |
|
Немного не в тему Qt, но в тему C++: мне необходимо в объявлении класса объявить константу. Так правильно? private: const static qreal D2R = 0.017453;
|
|
|
Записан
|
|
|
|
Bepec
Гость
|
|
« Ответ #1 : Апрель 11, 2012, 15:38 » |
|
А статик то зачем?
|
|
|
Записан
|
|
|
|
kambala
|
|
« Ответ #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
|
|
« Ответ #3 : Апрель 11, 2012, 16:23 » |
|
инициализировать статики надо вне класса
За исключением интегральных типов.
|
|
|
Записан
|
Qt 5.11/4.8.7 (X11/Win)
|
|
|
Nimbus
Гость
|
|
« Ответ #4 : Апрель 11, 2012, 16:29 » |
|
А статик то зачем?
Чтобы при создании объектов для неё не выделялась память каждый раз. Я тоже практикую такой подход
|
|
|
Записан
|
|
|
|
Igors
|
|
« Ответ #5 : Апрель 11, 2012, 16:33 » |
|
По ходу дела такой вопрос C++ (Qt) class CTest { .. static const double PI = 3.151529; static const double D2R = 180 / PI; };
Есть ли уверенность что PI будет инициализировано до D2R ?
|
|
|
Записан
|
|
|
|
GreatSnake
|
|
« Ответ #6 : Апрель 11, 2012, 16:42 » |
|
Есть ли уверенность что PI будет инициализировано до D2R ?
Хороший вопрос
|
|
|
Записан
|
Qt 5.11/4.8.7 (X11/Win)
|
|
|
Igors
|
|
« Ответ #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
|
|
« Ответ #9 : Апрель 11, 2012, 16:55 » |
|
Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Точно!
|
|
|
Записан
|
Qt 5.11/4.8.7 (X11/Win)
|
|
|
Igors
|
|
« Ответ #10 : Апрель 11, 2012, 17:02 » |
|
Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Никто не спорит что такая вероятность есть - и даже велика Но речь идет о "гарантиях" (а не о "вероятности"). Иногда надо быть нудным напр "а где в стандарте это написано"?
|
|
|
Записан
|
|
|
|
V1KT0P
Гость
|
|
« Ответ #11 : Апрель 11, 2012, 17:11 » |
|
Есть вероятность что D2R будет посчитан еще на этапе компиляции.
Никто не спорит что такая вероятность есть - и даже велика Но речь идет о "гарантиях" (а не о "вероятности"). Иногда надо быть нудным напр "а где в стандарте это написано"? Почитай документацию по тому компилятору который используешь =). Вот GCC например предупреждает, если в конструкторе переменные инициализируются не в том порядке в каком объявлены. Так что думаю с GCC проблем не будет.
|
|
|
Записан
|
|
|
|
GreatSnake
|
|
« Ответ #12 : Апрель 11, 2012, 17:13 » |
|
Вот GCC например предупреждает, если в конструкторе переменные инициализируются не в том порядке в каком объявлены. Так что думаю с GCC проблем не будет.
Имхо, это немного другое.
|
|
|
Записан
|
Qt 5.11/4.8.7 (X11/Win)
|
|
|
kambala
|
|
« Ответ #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
|
|
« Ответ #14 : Апрель 11, 2012, 17:32 » |
|
Почитай документацию по тому компилятору который используешь =). Вот GCC например предупреждает, если в конструкторе переменные инициализируются не в том порядке в каком объявлены. Так что думаю с GCC проблем не будет.
Что-то не то Вы рекомендуете Если это зависит от компилятора - то лучше такую конструкцию const не использовать и обойтись #define. Потому что только у меня 3 компилятора (gcc, icc и вындозный), а у других часто больше. Здесь хорошо бы прильнуть к стандарту..
|
|
|
Записан
|
|
|
|
|