История изменений
Исправление byko3y, (текущая версия) :
Если вы хотите сами сделать транзитивную константность, то вам никто не помешает
Ну в STL по итогу сделали «через раз». Я уже выше писал, что на самом деле они просто сделали ее там. где им было удобно, и предпочли не делать там, где это неудобно сделать. Что есть вполне логично.
Но ты сам же приводишь антипаттерны, как не нужно использовать const в C++
С этого места поподробнее
Я ошибся с тем примерном «const char *», но вот твой пример с
struct app_context_t {
logger_t & m_logger;
const app_args_t & m_args;
...
}
это чистое попадание. Ссылкам (по крайней мере вернего уровня) в полях объектов вообще нечего ловить.
В общем случае const_cast – это UB
А вот я утверждаю, что в моих сорцах везде const_cast будет использоваться только корректно, я его не буду использоваться в случаях, приводящих к UB.
Комментарии не проверяются ни компилятором, ни анализаторами кода
Анализаторы кода проверяют время жизни объекта — а ведь я время жизни нигде явно не объявлял. А я утверждаю, что проверка константности в C++ настолько дырява, настолько ненадежна, что по const-комментариям производится только крайне ограниченная проверка, без которой, в общем-то, можно жить, даже несмотря на то, что все компиляторы эту проверку выполняют.
Исходная версия byko3y, :
Если вы хотите сами сделать транзитивную константность, то вам никто не помешает
Ну в STL по итогу сделали «через раз». Я уже выше писал, что на самом деле они просто сделали ее там. где им было удобно, и предпочли не делать там, где это неудобно сделать. Что есть вполне логично.
Но ты сам же приводишь антипаттерны, как не нужно использовать const в C++
С этого места поподробнее
Я ошибся с тем примерном «const char *», но вот твой пример с >struct app_context_t {
logger_t & m_logger;
const app_args_t & m_args;
...
}
это чистое попадание. Ссылкам (по крайней мере вернего уровня) в полях объектов вообще нечего ловить.
В общем случае const_cast – это UB
А вот я утверждаю, что в моих сорцах везде const_cast будет использоваться только корректно, я его не буду использоваться в случаях, приводящих к UB.
Комментарии не проверяются ни компилятором, ни анализаторами кода
Анализаторы кода проверяют время жизни объекта — а ведь я время жизни нигде явно не объявлял. А я утверждаю, что проверка константности в C++ настолько дырява, настолько ненадежна, что по const-комментариям производится только крайне ограниченная проверка, без которой, в общем-то, можно жить, даже несмотря на то, что все компиляторы эту проверку выполняют.