LINUX.ORG.RU

const_cast - вселенная хочет, чтобы я запутался

 , ,


0

3

http://cppstudio.com/post/5343/

const_cast — константное приведение типов данных
Операция const_cast доступна только в C++. Константное приведение используются, чтобы константную переменную преобразовать в неконстантную. При этом, константным становится возвращаемое значение операции const_cast, а не сама переменная.

Видимо, автор должен был написать «При этом, неконстантным становится возвращаемое значение», но забыл частицу «не»?

★★★★★
Ответ на: комментарий от Xintrea

Что это за разрозненные куски кода без пояснений и комментариев?

Поясняю: слово const_cast встречается на гитхабе 1.5 миллиона раз. Следовательно, это очень популярный способ отстрелить себе ногу :-)

Beewek ★★
()
Ответ на: комментарий от ox55ff

Ну mutable вполне себе полезная вещь при умелом применении (мьютексы, кеширование при первом обращении). Иначе получится как в D с его транзитивной константностью - лучше не использовать const вообще.

m0rph ★★★★★
()

const_cast нужен чтобы сказать «я хочу сделать тайпкаст, но компилятор проверь, что оба типа (исходный и новый) отличаются только в наличии/отсутствии слова const где-то в его описании»

firkax ★★★★★
()

const_cast нужен, чтобы из констатных методов или с константым обьектом вызывать старый, особенно чужой говнокод, где константость взяли да и забыли написать, хотя по смыслу там она должна быть.

нужен оч.редко, и его присутствие это некий сигнал о неблагополучии в коде.

alysnix ★★★
()
Ответ на: комментарий от alysnix

конст_каст - суров и опасен, по сути является тараном для преодоления проблем в вашем коде… я вот им вообще не пользуюсь.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Грепаешь исходники по ключевым словам goto, const_cast, mutable, volatile и сразу видишь где насрано.

Я бы убрал из списка mutable и goto — там надо по контексту смотреть, насрано или не насрано. Добавил бы dynamic_cast. Не осилил систему типов — вон из профессии! Пусть идут в танках ромба дают, в программировании их не надо.

anonymous
()
Ответ на: комментарий от ox55ff

Помню, goto в плюсах я сам употребил месяца 2 назад, для выхода из вложенного цикла. Да, можно было бы заменить его двумя break и булевским флагом, но в этом случае «насрано» было бы куда сильнее.

hobbit ★★★★★
()
Ответ на: комментарий от i-rinat

Как меня выбешивает, когда при определении класса вместо class пишут struct. Ради чего? Там настолько сложная схема доступа, что бедный C++ программист вынужден обфусцировать код, чтобы написать то, что было задумано?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Это вкусовщина, читаемость нисколько не страдает. Более того, в ранних версиях плюсов class был синонимом struct. Ну и наконец, некоторые используют struct для маркировки POD.

anonymous
()
Ответ на: комментарий от Xintrea

Как меня выбешивает, когда при определении класса вместо class пишут struct. Ради чего? Там настолько сложная схема доступа, что бедный C++ программист вынужден обфусцировать код, чтобы написать то, что было задумано?

Кстати, в стандартной библиотеке С++ некоторые классы определены как class, другие как struct. И я не знаю по какому принципу это сделано.

Вот несколько примеров:

template< class Rep >
struct duration_values;

https://en.cppreference.com/w/cpp/chrono/duration_values

template<
    class Rep,
    class Period = std::ratio<1>
> class duration;

https://en.cppreference.com/w/cpp/chrono/duration

template< class T >
struct atomic;

https://en.cppreference.com/w/cpp/atomic/atomic

class thread;

https://en.cppreference.com/w/cpp/thread/thread

fsb4000 ★★★★★
()