LINUX.ORG.RU

История изменений

Исправление 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-комментариям производится только крайне ограниченная проверка, без которой, в общем-то, можно жить, даже несмотря на то, что все компиляторы эту проверку выполняют.