реклама на сайте
подробности

 
 
> C++ доступ к членам класса через this->, чем чревато злоуотребление?
sigmaN
сообщение May 14 2018, 07:23
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Один мой товарищ( как говорится, не к ночи будет помянут сей язык, бывший PHPшник) в C++ коде для AVR8 везде лепит this->

Вот пример его кода https://pastebin.com/hqyYcQYh

Аргументирует он это тем, что так якобы понятнее, что это член класса.
Хотя, конечно-же, это решается нэймингом.

В общем-то на C++ так никто не пишет, но хотелось бы привести весомые аргументы почему именно.

Первый аргумент, который я привел: this это указатель. Используя его мы подрезаем ноги оптимизатору, который, как я понимаю, на много аккуратнее относится к оптимизации indirect access
И может быть в каких-то простых случаях он этот this и упразднит, но тем не менее.

Может быть у кого-то еще есть аргументы? Мне даже самому стало интересно. Уже который год эта тема у нас с ним регулярно поднимается. Прям холливар Сишника и бывшего ПХПшника biggrin.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
tabr
сообщение May 14 2018, 09:50
Сообщение #2





Группа: Участник
Сообщений: 8
Регистрация: 4-08-11
Пользователь №: 66 568



Объясню, почему я так делаю...
Код:
Код
class ClassA
{
public:
void Set(uint8_t some_var)
{
//some actions
}
}
class ClassB
{
public:
void Set(uint8_t some_var)
{
//some actions
}
void BlaBlaBla(*ClassA var, uint8_t some_var)
{
if (/*something*/)
{
var->Set(some_var);
this->Set(some_var);//вот тут правильнее в целом смотрится именно this, а не "Set(some_var);"
}
}
}

Так же если в методе я буду всё-таки вынужден использовать this для доступа к членам текущего класса, то комбинация
Код
void SomeFunction(void)
{
//some code
}
class SomeClass
{
void SomeFunction(void)
{
//some another code
}
void SomemethodA(void)
{
}
void SomemethodB(void)
{
}
void SomemethodC(void)
{
this->SomeFunction();
SomemethodA();
SomemethodB();
SomeFunction();//чё происходит?
}
}

выглядит не очень. Как-то не читаемо, т.к. оно означает что где-то (НАВЕРНОЕ) есть функция с таким же названием, но это не точно.
Такая ситуация может возникнуть, если оспользуешь какие-нить сишные либы, к примеру (мне неизвестные), и имя твоего метода ВНЕЗАПНО совпало с именем... ну вы поняли...
ИМХО чем использовать ИНОГДА this (что я и делал сначала), я принял волевое xD решение использовать его ВСЕГДА - именно для повышения удобочитаемости кода.

Сообщение отредактировал tabr - May 14 2018, 10:08
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sigmaN   C++ доступ к членам класса через this->   May 14 2018, 07:23
- - AlexRayne   Цитата(sigmaN @ May 14 2018, 10:23) Может...   May 14 2018, 07:45
- - novikovfb   ИМХО, ставить везде this-> равносильно избыточн...   May 14 2018, 07:47
- - Сергей Борщ   Согласен со всеми - с одной стороны защищает от со...   May 14 2018, 08:09
- - Kabdim   расскажите ему о (*this).something .   May 14 2018, 09:10
- - k155la3   Видать человек при переходе на С(++) походил по с...   May 14 2018, 09:17
|- - k155la3   Цитата(tabr @ May 14 2018, 12:50) Код: . ...   May 14 2018, 17:33
|- - Forger   Если не ошибаюсь, то локальные методы/поля имеют п...   May 14 2018, 19:35
|- - jcxz   Цитата(Forger @ May 14 2018, 22:35) Если ...   May 15 2018, 05:28
|- - Forger   Цитата(jcxz @ May 15 2018, 08:28) Очень о...   May 15 2018, 05:35
|- - AlexandrY   Цитата(jcxz @ May 15 2018, 08:28) Очень о...   May 15 2018, 05:42
- - Forger   © "Масло масляное" В крайне редких случ...   May 14 2018, 10:49
- - esaulenka   Цитата(sigmaN @ May 14 2018, 10:23) Может...   May 14 2018, 11:50
- - Nixon   Да какие аргументы, в первой же строчке написано п...   May 14 2018, 14:02
- - jcxz   Цитата(sigmaN @ May 14 2018, 10:23) Первы...   May 14 2018, 14:06
- - Сергей Борщ   QUOTE (jcxz @ May 15 2018, 08:28) Стараюс...   May 15 2018, 07:51
|- - Forger   Цитата(Сергей Борщ @ May 15 2018, 10:51) ...   May 15 2018, 10:00
|- - Сергей Борщ   QUOTE (Forger @ May 15 2018, 13:00) Судя ...   May 15 2018, 11:08
|- - Forger   Цитата(Сергей Борщ @ May 15 2018, 14:08) ...   May 15 2018, 11:19
- - k155la3   Эт не мы. Все с англичан началось, с ихним This_IS   May 15 2018, 11:07
|- - Сергей Борщ   QUOTE (k155la3 @ May 15 2018, 14:07) Эт н...   May 15 2018, 21:28
- - sigmaN   Никакого троллинга и холливара У меня с другом сос...   May 15 2018, 15:42
- - Forger   Цитата(sigmaN @ May 15 2018, 18:42) Никак...   May 15 2018, 16:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016