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

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

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

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

p.s. впервые об этом правиле слышу)
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 16:33  [ТС]     правило Константы слева #3
Упс, да, слева
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 16:34     правило Константы слева #4
Цитата Сообщение от sandye51 Посмотреть сообщение
впервые об этом правиле слышу)
например
C
1
if (NULL == (file = fopen(...)))
AC-93
13 / 13 / 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
Каратель
Эксперт C++
6542 / 3962 / 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
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.12.2011, 16:41     правило Константы слева #7
int const * const i = NULL;
вполне валидно, да
тут кому как больше нравится
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.12.2011, 16:46     правило Константы слева #8
Jupiter, это понятно) просто не видел таких рекомендаций.
я вот наоборот константы всегда справа пишу)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 16:56  [ТС]     правило Константы слева #10
не должно быть варнинга.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 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
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
17.12.2011, 17:08     правило Константы слева #12
Цитата Сообщение от AC-93 Посмотреть сообщение
не должно быть варнинга.
ага, на самом деле там будет ошибка компилляции

Добавлено через 1 минуту
в си - варнинг,
в плюсах - ошибка компилляции
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.12.2011, 17:19     правило Константы слева #13
Цитата Сообщение от AC-93 Посмотреть сообщение
не должно быть варнинга.
Должен быть. Проверьте, если хотите
AC-93
13 / 13 / 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
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.12.2011, 19:08     правило Константы слева #15
AC-93, проверить не сложно.. а вот объяснение этому..)
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
17.12.2011, 19:44  [ТС]     правило Константы слева #16
Так нету варнингов!
taras atavin
Ушёл с форума.
 Аватар для 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
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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
13 / 13 / 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++
C++ Статическе константы
C++ Константы и C++

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

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

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru