Тема: Чому в сирцях stl кожен return має додаткові дужки - ()
Звернув увагу, що в stl кожен return виглядає якось так
return (*this);
Чого б це?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Чому в сирцях stl кожен return має додаткові дужки - ()
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Звернув увагу, що в stl кожен return виглядає якось так
return (*this);
Чого б це?
А чому ні?
Повернення об'єкту у якісті самого себе.
Просто угода щодо оформлення.
До речі, сирці STL - це не фіксована річ, ви кажете про якийсь конкретний компілятор (gcc?). Там ще мають бути guideline-и.
Я дивився в сирці для MS VS 2013.
А чого в них така угода? Що вона їм дає, чи може це запобігти якомусь багу, чи ще щось?
return (*this);
бо то адрес, навіть фукцію беруть в дужки коли вона вказує адрес, попрограмуйте, зрозумієте
навіть фукцію беруть в дужки коли вона вказує адрес
чого? можна шмат коду?
Ви це маєте на увазі?
int (*p)(const char *, const char *);
/* покажчик на функцію */
Тут дужки потрібні, щоб вказати яка операція виконуватиметься першою, адже пріоритет у оператору виклику функції вищий ніж у розіменування.
Та якщо б я хотів повернути такий покажчик із функції, то я б не писав
return (p);
А stl пише, от про що я запитую.
Ще раз: це просто угода про стиль, не більше того. Звісно, працюватиме і без цих дужок. Я, наприклад, булеві значення намаюся в дужках давати, на кшталт:
bool equal = ( a == b );
Звісно, працюватиме і без дужок, але з дужками підкреслюється, що це присвоєння булевого значення. А в MS-івському STL домовилися додавати дужки return-у, щоб не заплутатися в складних випадках.
щоб не заплутатися в складних випадках.
Та мене ці дужки навпаки заплутують більше, от наприклад
return (((const _Myt *)this)->begin());
Та на цьому можна вже й зупинитись
koala написав:щоб не заплутатися в складних випадках.
Та мене ці дужки навпаки заплутують більше, от наприклад
return (((const _Myt *)this)->begin());
Та на цьому можна вже й зупинитись
Спробуйте освоїти LISP
koala написав:щоб не заплутатися в складних випадках.
Та мене ці дужки навпаки заплутують більше, от наприклад
return (((const _Myt *)this)->begin());
Та на цьому можна вже й зупинитись
Краще перетворення робити окремим рядком, з перевіркою:
_Myt *smth = dynamic_cast<_Myt *>( this );
if(!smth){
return ( error_value );//чи throw, чи що там треба в такому разі
} else {
return ( smth->begin() );
}
вернув увагу, що в stl кожен return виглядає якось так
return (*this);
Чого б це?
- бо розіменування поінтера і оператор множення мають ідентичний синтаксичний вид, саме у цьому випадку автор коду намагався підкеслити, що працює з поінтером(повертається ссилка на класс чи його копія - точніше не скажу бо нема заголовку методу).
Краще перетворення робити окремим рядком, з перевіркою:
_Myt *smth = dynamic_cast<_Myt *>(this);
if(!smth){
return (error_value);//чи throw, чи що там треба в такому разі
} else {
return ( smth->begin() );
}
- цілком згоден, тільки треба додати що потрібно "увімкнути" суппорт RTTI, бо без цього будемо падати на кожному такому касті.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися