1

Тема: Чому в сирцях stl кожен return має додаткові дужки - ()

Звернув увагу, що в stl кожен return виглядає якось так

return (*this);

Чого б це?

2

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

А чому ні?
Повернення об'єкту у якісті самого себе.

3

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Просто угода щодо оформлення.
До речі, сирці STL - це не фіксована річ, ви кажете про якийсь конкретний компілятор (gcc?). Там ще мають бути guideline-и.

4

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Я дивився в сирці для MS VS 2013.

А чого в них така угода? Що вона їм дає, чи може це запобігти якомусь багу, чи ще щось?

5 Востаннє редагувалося reverse2500 (29.01.2016 12:03:48)

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

return (*this);

бо то адрес, навіть фукцію беруть в дужки коли вона вказує адрес, попрограмуйте, зрозумієте

6

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

reverse2500 написав:

навіть фукцію беруть в дужки коли вона вказує адрес

чого? можна шмат коду?

7

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Покажчики на функції

8

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

reverse2500 написав:

Покажчики на функції

Ви це маєте на увазі?

  int (*p)(const char *, const char *);
               /* покажчик на функцію */

Тут дужки потрібні, щоб вказати яка операція виконуватиметься першою, адже пріоритет у оператору виклику функції вищий ніж у розіменування.

Та якщо б я хотів повернути такий покажчик із функції, то я б не писав

return (p);

А stl пише, от про що я запитую.

9

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Ще раз: це просто угода про стиль, не більше того. Звісно, працюватиме і без цих дужок. Я, наприклад, булеві значення намаюся в дужках давати, на кшталт:

bool equal = ( a == b );

Звісно, працюватиме і без дужок, але з дужками підкреслюється, що це присвоєння булевого значення. А в MS-івському STL домовилися додавати дужки return-у, щоб не заплутатися в складних випадках.

Подякували: Yola1

10

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

koala написав:

щоб не заплутатися в складних випадках.

Та мене ці дужки навпаки заплутують більше, от наприклад

return (((const _Myt *)this)->begin());

Та на цьому можна вже й зупинитись :)

11

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Yola написав:
koala написав:

щоб не заплутатися в складних випадках.

Та мене ці дужки навпаки заплутують більше, от наприклад

return (((const _Myt *)this)->begin());

Та на цьому можна вже й зупинитись :)

Спробуйте освоїти LISP :D

12

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Yola написав:
koala написав:

щоб не заплутатися в складних випадках.

Та мене ці дужки навпаки заплутують більше, от наприклад

return (((const _Myt *)this)->begin());

Та на цьому можна вже й зупинитись :)

Краще перетворення робити окремим рядком, з перевіркою:

_Myt *smth = dynamic_cast<_Myt *>( this );
if(!smth){
  return ( error_value );//чи throw, чи що там треба в такому разі
} else {
  return ( smth->begin() );
}

13 Востаннє редагувалося -=ЮрА=- (30.01.2016 11:13:55)

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

вернув увагу, що в stl кожен return виглядає якось так
return (*this);
Чого б це?

- бо розіменування поінтера і оператор множення мають ідентичний синтаксичний вид, саме у цьому випадку автор коду намагався підкеслити, що працює з поінтером(повертається ссилка на класс чи його копія - точніше не скажу бо нема заголовку методу).

14

Re: Чому в сирцях stl кожен return має додаткові дужки - ()

Краще перетворення робити окремим рядком, з перевіркою:
_Myt *smth = dynamic_cast<_Myt *>(this);
if(!smth){
  return (error_value);//чи throw, чи що там треба в такому разі
} else {
  return ( smth->begin() );
}

- цілком згоден, тільки треба додати що потрібно "увімкнути" суппорт RTTI, бо без цього будемо падати на кожному такому касті.