Сообщение Re: Сишный каст - зло? от 28.07.2023 15:09
Изменено 28.07.2023 15:13 DiPaolo
Re: Сишный каст - зло?
Сначала отсылка к уважаемым в плюсовом мире людям, Страуструпу и Саттеру:
— ES.48: Avoid casts
— ES.49: If you must use a cast, use a named cast
— ES.50: Don’t cast away const
Советую пройти почитать по ссылкам — там расписано, почему так стоит делать или не делать.
Далее мои мысли. Вот привел so5team привет выше (http://rsdn.org/forum/cpp/8570018.1):
Моя первая мысль "не, ну так конечно нельзя". А кто-то менее опытный этого не заметит. Это раз. Два — когда у тебя в коде тут сишные касты, там плюсовые — то это уже бардак. Нет единого подхода. Любой новый человек в проекте, либо же новичок будет путаться. Так лучше пусть он будет видеть, что везде плюсовые касты, и будет применять его, более безопасный подход.
Еще одна мысль: сишные касты — это как топор. Ты им можешь что угодно отрубить, покромсать, оттяпать и так далее. А плюсовые касты — это набор разных специализированных инструментов, каждый под свою задачу. Используя касты ты даешь понять читателю, что ты хотел сделать этой конструкцией. Например, что вот тут ты просто убираешь const, а вот тут преобразуешь к наследуемому типу. Это делает код более читаемым и ясным -> снижает вероятность ошибки.
Ну и см. ссылки выше: самый главный аргумент все же тот самый type safety.
— ES.48: Avoid casts
— ES.49: If you must use a cast, use a named cast
— ES.50: Don’t cast away const
Советую пройти почитать по ссылкам — там расписано, почему так стоит делать или не делать.
Далее мои мысли. Вот привел so5team привет выше (http://rsdn.org/forum/cpp/8570018.1):
Автор: so5team
Дата: 28.07.23
Дата: 28.07.23
#include <iostream>
using namespace std;
class Base
{};
class Derived: private Base
{
// Inherited private/protected
// not public
};
// Driver code
int main()
{
Derived d1;
// C-style cast allowed
Base* b1 = (Base*)(&d1);
// static_cast not allowed
Base* b2 = static_cast<Base*>(&d1);
return 0;
}
Моя первая мысль "не, ну так конечно нельзя". А кто-то менее опытный этого не заметит. Это раз. Два — когда у тебя в коде тут сишные касты, там плюсовые — то это уже бардак. Нет единого подхода. Любой новый человек в проекте, либо же новичок будет путаться. Так лучше пусть он будет видеть, что везде плюсовые касты, и будет применять его, более безопасный подход.
Еще одна мысль: сишные касты — это как топор. Ты им можешь что угодно отрубить, покромсать, оттяпать и так далее. А плюсовые касты — это набор разных специализированных инструментов, каждый под свою задачу. Используя касты ты даешь понять читателю, что ты хотел сделать этой конструкцией. Например, что вот тут ты просто убираешь const, а вот тут преобразуешь к наследуемому типу. Это делает код более читаемым и ясным -> снижает вероятность ошибки.
Ну и см. ссылки выше: самый главный аргумент все же тот самый type safety.
Re: Сишный каст - зло?
Сначала отсылка к уважаемым в плюсовом мире людям, Страуструпу и Саттеру:
— ES.48: Avoid casts
— ES.49: If you must use a cast, use a named cast
— ES.50: Don’t cast away const
Советую пройти почитать по ссылкам — там расписано, почему так стоит делать или не делать.
Далее мои мысли. Вот привел so5team привет выше (http://rsdn.org/forum/cpp/8570018.1):
Моя первая мысль "не, ну так конечно нельзя". А кто-то менее опытный этого не заметит. Это раз. Два — когда у тебя в коде тут сишные касты, там плюсовые — то это уже бардак. Нет единого подхода. Любой новый человек в проекте, либо же новичок будет путаться. Так лучше пусть он будет видеть, что везде плюсовые касты, и будет применять его, более безопасный подход.
Еще одна мысль: сишные касты — это как топор. Ты им можешь что угодно отрубить, покромсать, оттяпать и так далее. А плюсовые касты — это набор разных специализированных инструментов, каждый под свою задачу. Используя касты ты даешь понять читателю, что ты хотел сделать этой конструкцией. Например, что вот тут ты просто убираешь const, а вот тут преобразуешь к наследуемому типу. Это делает код более читаемым и ясным -> снижает вероятность ошибки.
Ну и см. ссылки выше: самый главный аргумент все же тот самый type safety.
— ES.48: Avoid casts
— ES.49: If you must use a cast, use a named cast
— ES.50: Don’t cast away const
Советую пройти почитать по ссылкам — там расписано, почему так стоит делать или не делать.
Далее мои мысли. Вот привел so5team привет выше (http://rsdn.org/forum/cpp/8570018.1):
Автор: so5team
Дата: 28.07.23
Дата: 28.07.23
#include <iostream>
using namespace std;
class Base
{};
class Derived: private Base
{
// Inherited private/protected
// not public
};
// Driver code
int main()
{
Derived d1;
// C-style cast allowed
Base* b1 = (Base*)(&d1);
// static_cast not allowed
Base* b2 = static_cast<Base*>(&d1);
return 0;
}
Моя первая мысль "не, ну так конечно нельзя". А кто-то менее опытный этого не заметит. Это раз. Два — когда у тебя в коде тут сишные касты, там плюсовые — то это уже бардак. Нет единого подхода. Любой новый человек в проекте, либо же новичок будет путаться. Так лучше пусть он будет видеть, что везде плюсовые касты, и будет применять его, более безопасный подход.
Еще одна мысль: сишные касты — это как топор. Ты им можешь что угодно отрубить, покромсать, оттяпать и так далее. А плюсовые касты — это набор разных специализированных инструментов, каждый под свою задачу. Используя касты ты даешь понять читателю, что ты хотел сделать этой конструкцией. Например, что вот тут ты просто убираешь const, а вот тут преобразуешь к наследуемому типу. Это делает код более читаемым и ясным -> снижает вероятность ошибки.
Ну и см. ссылки выше: самый главный аргумент все же тот самый type safety.