Информация об изменениях

Сообщение Re[11]: Сишный каст - зло? от 28.07.2023 14:45

Изменено 28.07.2023 14:49 so5team

Re[11]: Сишный каст - зло?
Здравствуйте, Marty, Вы писали:

S>>Ну и вопрос: зачем усложнять себе жизнь?


M>Собери свой проект с /Wall /WX, удивись, сколько варнингов будет


Спасибо, но мы и так, по возможности, живем с -pedantic -Wall и даже -Weverything, а когда позволяют зависимости, но еще и с -Werror. Но зависимости далеко не всегда такую роскошь позволяют

M>в простейших битовых выражениях,


Во-первых, откуда там?

M>расставь там плюсовые касты и попробуй это прочитать


Во-вторых, если у вас C++ помоложе C++11, то можно же использовать локальные функции. Вот, из реального проекта (комментарии изъяты):
const auto ptr_cast = []( const std::byte * ptr ) -> std::uint8_t * {
        return reinterpret_cast< std::uint8_t * >(
                const_cast< std::byte * >( ptr ) );
    };

fresh_frame->buf[ 0 ] = av_buffer_create(
        ptr_cast( image_bytes ),
        total_memory_size,
        []( void *, std::uint8_t * ) -> void {},
        nullptr,
        AV_BUFFER_FLAG_READONLY );
if( !(fresh_frame->buf[ 0 ]) )
{
    throw std::runtime_error{...};
}

std::size_t plane_index = 0u;
for( const auto plane_size : data_plane_sizes )
{
    fresh_frame->data[ plane_index ] = ptr_cast( image_bytes );
    image_bytes += plane_size;
    ++plane_index;
}
Re[11]: Сишный каст - зло?
Здравствуйте, Marty, Вы писали:

S>>Ну и вопрос: зачем усложнять себе жизнь?


M>Собери свой проект с /Wall /WX, удивись, сколько варнингов будет


Спасибо, но мы и так, по возможности, живем с -pedantic -Wall и даже -Weverything, а когда позволяют зависимости, то еще и с -Werror. Но зависимости далеко не всегда такую роскошь позволяют

M>в простейших битовых выражениях,


Во-первых, откуда там?

M>расставь там плюсовые касты и попробуй это прочитать


Во-вторых, если у вас C++ помоложе C++11, то можно же использовать локальные функции. Вот, из реального проекта (комментарии изъяты):
const auto ptr_cast = []( const std::byte * ptr ) -> std::uint8_t * {
        return reinterpret_cast< std::uint8_t * >(
                const_cast< std::byte * >( ptr ) );
    };

fresh_frame->buf[ 0 ] = av_buffer_create(
        ptr_cast( image_bytes ),
        total_memory_size,
        []( void *, std::uint8_t * ) -> void {},
        nullptr,
        AV_BUFFER_FLAG_READONLY );
if( !(fresh_frame->buf[ 0 ]) )
{
    throw std::runtime_error{...};
}

std::size_t plane_index = 0u;
for( const auto plane_size : data_plane_sizes )
{
    fresh_frame->data[ plane_index ] = ptr_cast( image_bytes );
    image_bytes += plane_size;
    ++plane_index;
}