Const корректность в C ++ при использовании библиотеки C

В настоящее время я работаю над приложением на C ++, которое хочу быть правильным. Это означает использование const для параметров везде, где это возможно, и тому подобное. Тем не менее, это приложение C ++ использует библиотеку C, которая не использует const часто. Проблема, с которой я сталкиваюсь, заключается в том, что при отправке параметров функциям в библиотеке C параметры не могут быть константными, поэтому я вынужден выполнить приведение.

Использование const cast как бы умаляет всю правильность const, над которой я работал. Когда вы работаете с библиотеками C, которые не являются правильными, вы просто следите за процессом, а также не используете const правильность, чтобы легко использовать эти библиотеки? Или есть лучший способ, которого я не вижу? Обратите внимание, что это довольно маленькая программа, поэтому изолировать часть, использующую библиотеку, и сделать ее не правильной, на самом деле не вариант.

2

Решение

Лично я предпочитаю использовать приведение на границе библиотеки, что не является правильным. Плюсом этого подхода является то, что вы позволяете своему коду получать преимущества от правильного использования const. Недостатком является то, что если библиотека изменяет объект, даже «временно», который вы отбросили на const, ваша программа может выйти из строя.

Например, я видел библиотеки C, которые принимают char * параметры, которые они не изменяют логически. Однако их синтаксический анализатор может временно заменить разделители в строке нулями для использования strcpy чтобы извлечь их. Если вы отбрасываете const, чтобы позволить функции C ++ принимать const char *и кто-то передает указатель на объект, который на самом деле является константой, «временная» замена разделителя на ноль вызовет ошибку.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]