Как найти (и замена), весь старый тип данных C-стиля бросает в моем исходном коде C++?

Это звучит как типичная ситуация, когда правила не разрешают доступ к вашей базе данных. Проверьте правила и убедитесь, что это позволяет писать

"rules": 
{
         ".read": true,
         ".write": true,
}
23
задан durron597 20 July 2015 в 16:59
поделиться

4 ответа

У GCC есть опция -Wold-style-cast, которая предупредит вас, если найдет какие-либо приведения в стиле C.

24
ответ дан 29 November 2019 в 02:44
поделиться

К сожалению, нет В Visual C ++ нет предупреждения компилятора, которое указывает на эти приведения (по крайней мере, не одно, о котором я знаю), хотя похоже, что PC-Lint действительно предоставляет предупреждение / примечание, которое предупреждает вас, если вы используете приведение в старом стиле. Зависит от того, готовы ли вы потратить деньги на PC-Lint - на мой взгляд, это определенно стоит того, чтобы решить все проблемы, с которыми вы можете столкнуться ...

6
ответ дан 29 November 2019 в 02:44
поделиться

Я не знаю переключателя компилятора, который сообщает об этом или о чем-либо другом, встроенном в Visual Studio.

Однако вот Perl-скрипт , который выполнит поиск в вашем дереве исходных текстов и найдет все приведенные в нем типы C стиля. Он довольно хорошо работает для их отслеживания.

7
ответ дан 29 November 2019 в 02:44
поделиться

Зачем это вам? Вы хотите избавиться от них всех?

Приведение типов в стиле C для таких фундаментальных типов, как (double) , безопасно и выглядит намного лучше, чем static_cast () . Я лично предпочитаю этот стиль.

В случае полиморфных классов проблема приведения типов в стиле C сильно преувеличена imho. Это может быть проблемой, только если вы используете множественное наследование и должны выполнять перекрестное приведение. По умолчанию приведение типов в стиле C там не работает. Но в большинстве случаев () работает точно так же, как static_cast <> () , и я бы не стал тратить время на их замену. Во всяком случае, для полиморфных типов я использую приведение типов в стиле C ++, когда пишу новый код или что-то меняю.

ОБНОВЛЕНИЕ:

Ребята, похоже я не очень четко выразил свое мнение. Да, я знаю теорию: C ++ - кастинг хорош, C-cast - это зло. Это правило (и большинство других) необходимо для избавления новичков от C ++. Но это не значит, что вам всегда нужно следовать ему.

Я хочу сказать, что приведение типов в C не так уж и ужасно. Если вы напишете какую-нибудь функцию вроде

int convertFooToBar(double i_foo)

, нет причин для использования приведения в стиле C ++ в реализации. Они не безопаснее, чем (int) , но выглядят беспорядочно. Кастинг в этом случае не составляет труда. В приведении типов нет ничего плохого или сложного: иногда приведение является естественным.

О поиске: я не помню, чтобы я искал какой-либо оператор приведения за последние 10 лет, хотя я поддерживаю несколько миллионов строк из наследия Код на C ++ ежедневно. Я даже не помню серьезных проблем из-за неправильного приведения

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

Да, безопаснее, чем у C. Но это не означает, что вам нужно искать для старых в вашем коде и попробуйте избавься от них всех. На самом деле это не проблема. Только не трать время зря. Вы можете потратить их на поиск и удаление устаревшего кода. Это было бы более полезно для вашей базы кода.

-10
ответ дан 29 November 2019 в 02:44
поделиться