Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
#1

правило Константы слева - C++

17.12.2011, 16:21. Просмотров 1424. Ответов 22
Метки нет (Все метки)

Еще давно научили этому, чтобы писать в условиях сначала константу, а потом переменную которая проверяется. А сейчас рефакторил проект и возникла вопрос насколько широко это распространено? Помогает ли это, кроме случаев ероров на const = variable ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 16:21     правило Константы слева
Посмотрите здесь:

Составить правило - C++
как правильно составить условие для If выдать сообщения если введены не цифры

Определение константы - C++
Помогите составить определение следующих данных - константа pi = π = 3.14159265358 (12 значащих цифр)

Экспоненциальные Константы - C++
Всем доброго времени суток. Хотелось бы спросить такую вещь. Вид Экспоненциальной Константы же такой: {E|e} Тогда такая константа что...

Статическе константы - C++
Для чего используют статические константы?

Константы препроцесора - C++
А есть ли где-то список предустановленых констант препроцесора? Мне нужно узнать тип операционой системы, версию, и поочие. Есть ли где-то...

встроенные константы в С++ (pi e) - C++
Подскажите, существуют ли в С++ встроенные константы. Например pi=3.14.... или e=2.71.... Если да, то как их вызвать. Если...

Константы и указатели - C++
Как это работает? const int c = 2; const int* p1 = &c; int* p2 = (int*)p1; *p2 = 3; std::cout << c << " " << *p1 << " "...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.12.2011, 16:27     правило Константы слева #2
Цитата Сообщение от AC-93 Посмотреть сообщение
правило Константы справа
может слева?

p.s. впервые об этом правиле слышу)
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 16:33  [ТС]     правило Константы слева #3
Упс, да, слева
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 16:34     правило Константы слева #4
Цитата Сообщение от sandye51 Посмотреть сообщение
впервые об этом правиле слышу)
например
C
1
if (NULL == (file = fopen(...)))
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 16:36  [ТС]     правило Константы слева #5
название темы теперь не поправить, чтобы слева было?

Добавлено через 1 минуту
Ну так кто как пишет? и например в
C
1
for(i = 0; i < n ; ++i) или for(i = 0; n > i ; ++i) n = const
Тема переименована
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 16:38     правило Константы слева #6
Цитата Сообщение от AC-93 Посмотреть сообщение
например в
C
1
for(i = 0; i < n ; ++i)
C
1
 или for(i = 0; n > i ; ++i)
n = const
ИМХО здесь это только усложняет восприятие кода, а вот "одинарный" случай с if вполне удобен
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.12.2011, 16:41     правило Константы слева #7
int const * const i = NULL;
вполне валидно, да
тут кому как больше нравится
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.12.2011, 16:46     правило Константы слева #8
Jupiter, это понятно) просто не видел таких рекомендаций.
я вот наоборот константы всегда справа пишу)
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 16:49     правило Константы слева #9
А теперь задачка на скорость сообразительности
C
1
2
3
4
5
6
7
void foo(const char **p) { }
void bar(char **p) { }
 
int main(int argc, char **argv) {
     bar(argv); // ok
     foo(argv); // warning
}
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 16:56  [ТС]     правило Константы слева #10
не должно быть варнинга.
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.12.2011, 17:06     правило Константы слева #11
Цитата Сообщение от AC-93 Посмотреть сообщение
не должно быть варнинга
а он есть, сам ни раз сталкивался. Не понимаю почему..

например тут вообще ошибка. Почему?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
class link
{
    int value;
    link *prev;
    link *next;
public:
    explicit link(int value) :
        value(value), prev(), next()
    {
    }
 
    link(int v, const link* pr, const link* nx) :
        value(v), prev(pr), next(nx)
    {
    }
 
    ~link()
    {
        delete prev;
        delete next;
    }
};
 
int main()
{
    link(1, new link(1), new link(2));
    return 0;
}
хотя сам уже допер почему)

а в предыдущем примере пока непонятно..)
yekka
385 / 149 / 8
Регистрация: 12.05.2011
Сообщений: 450
17.12.2011, 17:08     правило Константы слева #12
Цитата Сообщение от AC-93 Посмотреть сообщение
не должно быть варнинга.
ага, на самом деле там будет ошибка компилляции

Добавлено через 1 минуту
в си - варнинг,
в плюсах - ошибка компилляции
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 17:19     правило Константы слева #13
Цитата Сообщение от AC-93 Посмотреть сообщение
не должно быть варнинга.
Должен быть. Проверьте, если хотите
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 18:55  [ТС]     правило Константы слева #14
Цитата Сообщение от fasked Посмотреть сообщение
Должен быть. Проверьте, если хотите
проверил, vs2008 варнинги 4 лвл,

C
1
2
3
Warning 1   warning C4100: 'p' : unreferenced formal parameter  x:\учебные\программирование 2011\1\1.c  1
Warning 2   warning C4100: 'p' : unreferenced formal parameter  x:\учебные\программирование 2011\1\1.c  2
Warning 3   warning C4100: 'argc' : unreferenced formal parameter   x:\учебные\программирование 2011\1\1.c  4
на 3 уровне их 0
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.12.2011, 19:08     правило Константы слева #15
AC-93, проверить не сложно.. а вот объяснение этому..)
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 19:44  [ТС]     правило Константы слева #16
Так нету варнингов!
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.12.2011, 20:25     правило Константы слева #17
Не понимаю смысла. Зачем писать
C++
1
if (5==x)
? Что это даст? Компилятор построит тот же самый код, что и для
C++
1
if (x==5)
, зато во втором случае не будешь тормозить при наборе, тратить время и мозг на переворачивание равенства, а значит меньше вероятность ошибиться где нибудь по соседству с этой строчкой, так как можно потратить высвободившиеся ресурсы на обдумывание соседних строк.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 20:26     правило Константы слева #18
Цитата Сообщение от AC-93 Посмотреть сообщение
Так нету варнингов!
Это в очередной раз доказывает качество компилятора от Майкрософт
Цитата Сообщение от sandye51 Посмотреть сообщение
а вот объяснение этому
Ну думайте
Цитата Сообщение от taras atavin Посмотреть сообщение
Что это даст?
Избегать ошибок набора приравнивания вместо сравнения.
C
1
2
if(5 = a) // ошибка компиляции
if(a = 5) // нет ошибок компиляции
Цитата Сообщение от taras atavin Посмотреть сообщение
зато во втором случае не будешь тормозить при наборе, тратить время и мозг на переворачивание равенства, мозг на то, а значит меньше вероятность ошибиться где нибудь по соседству с этой строчкой.
Дело привычки.
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 20:31  [ТС]     правило Константы слева #19
глупо говорить о преимуществе одного компилятора над другим не указывая версию и ос. По теме спс, понял.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 20:32     правило Константы слева
Еще ссылки по теме:

Константы в структурах - C++
есть массив структур. допустим 10 элементов. как инициализировать 5 элементов массива константами?

Константы, decltype - C++
Суть в том, что, если тип не есть класс, то при определении типа cv-квалификаторы отбрасываются. А сам объект остаётся...

Указатели и константы - C++
Добрый вечер, будьте добры раскрыть смысл каждой из трех строк: const int* ptr; int* const ptr; int const* ptr;

константы в классах - C++
в классе используется константа типа double. Как правильно задать ее? как static const double внутри класса или просто написать...

Не различает константы - C++
Добрый вечер. Есть константы в базовом классе:protected: ... // тут enum'ы и структуры const QString FORMAT_DIR = &quot;format&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 20:32     правило Константы слева #20
Цитата Сообщение от AC-93 Посмотреть сообщение
глупо говорить о преимуществе одного компилятора над другим не указывая версию и ос.
Я лично руководствуюсь стандартом языка Си
Yandex
Объявления
17.12.2011, 20:32     правило Константы слева
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru