LINUX.ORG.RU
 
Selecter

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


0

0

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

>>> Статья

**** ()
Проверено: Pi (19.07.2005 10:32:52)

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

> В 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;
}

***** ()

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

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

anonymous ()

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

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

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

--

SVK

anonymous ()
[#]  
eXOR

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

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

***** ()

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

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

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

***** ()

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

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

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

--

SVK

anonymous ()