LINUX.ORG.RU

Доводить до минимума приведение типов (minimize casting) в C++


0

0

"Правила C++ составлены так, чтобы гарантировать невозможность ошибок, связанных с типами. В теории, если программа скомпилируется без ошибок, она не попытается выполнить каких-либо небезопасных или нелепых действий над каким-либо объектом. Эта гарантия очень ценна."

>>> Статья

★★★★

Проверено: Pi ()

Ответ на: комментарий от anonymous

> В C/C++ есть замечательное условное выражение...
> 
> int cmp(const void* a,const void* b)
> {
>     int i = *(int*)a, j = *(int*)b;
>     return i == j ? 0 : i > j ? 1 : -1;
> }

а еще в C/C++ есть замечательная операция вычитания:


int cmp(const void* a,const void* b)
{
    return *(int*)a - *(int*)b;
}

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

А я видел жабский код писаный опытными лисперами. Это ещё смешнее. Эти кадры думают, что в 10-м Правиле речь идет о любой проге сложнее чем "Hello, world!", и ничтоже сумняшися следуют ему.

anonymous
()
Ответ на: комментарий от dilmah

> а еще в C/C++ есть замечательная операция вычитания:

с не менее замечательным арифметическим переполнением, которое на уровне Си определяется исключительно вручную хитроумными побитовыми операциями... И о котором многие даже не подозревают...

--

SVK

anonymous
()

Книжка уже 100 лет как есть. И уже 100 лет как Must Have для C++ програмиста. Чо к чему восхищаться кусками из нее выдраными для рекламы?

eXOR ★★★★★
()
Ответ на: комментарий от anonymous

> с не менее замечательным арифметическим переполнением

может современные процы очень умны, но в PDP-11 сравнение двух целых делается командой CMP (с последующим бранчем). Так вот инструкция CMP это то же самое что SUB, только результат вычитания никуда не пишется (то есть эффект только на флаги). Поэтому если будет переполнение в SUB, то оно будет и в CMP.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> Так вот инструкция CMP это то же самое что SUB, только результат вычитания никуда не пишется (то есть эффект только на флаги). Поэтому если будет переполнение в SUB, то оно будет и в CMP.

После команды CMP делается ветвление, в разных ветках которого по флагам выставляется "0" дли "1" в качестве результата. А в случае вычитания в приведенном примере возвращается напрямую его результат. Насколько я помню, есть (и в 86-м и в PDP-11) команды перехода, учитывающие флаг переполнения. То есть, получается, что при использовании сравнения переполнение будет учтено, в отличие от. Впрочем, на практике не проверял, поэтому могу и ошибиться.

--

SVK

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.