Это в порядке для использования броска C-стиля для встроенных типов?

Простейшая форма:

git show --stat (hash)

Это легче запомнить, и она предоставит вам всю необходимую вам информацию.

Если вы действительно хотите только имена файлов, вы можете добавить опцию --name-only.

git show --stat --name-only (hash)

17
задан ypnos 13 February 2009 в 23:28
поделиться

7 ответов

Я не был бы по следующим причинам:

  • Броски ужасны и должны быть ужасными и выделиться в Вашем коде и быть findable использованием grep и подобными инструментами.
  • "Всегда использование броски C++" являются простым правилом, которое, намного более вероятно, будут помнить и сопровождать, чем, "Используйте C++, набирает пользовательские типы, но нормально использовать C-стиль, набирает встроенные типы".
  • броски стиля C++ предоставляют больше информации другим разработчикам о том, почему бросок необходим.
  • броски C-стиля могут позволить Вам сделать преобразования, которые Вы не предназначали - если у Вас будет интерфейс, который принимает (интервал*), и Вы использовали броски c-стиля для передачи его интервал константы*, и интерфейс изменяется для взятия в длинном*, то код с помощью бросков c-стиля продолжит работать, даже если это не будет тем, что Вы хотели.
17
ответ дан 30 November 2019 в 10:18
поделиться

Я думаю, что это может быть в порядке, учитывая контекст. Пример:

/* Convert -1..1 to -32768..32767 */
short float_to_short(float f)
{
    return (short)(max(-32768.f, min(32767.f, f * 32767.f)));
}
2
ответ дан 30 November 2019 в 10:18
поделиться

Может я использовать кастинг C-стиля для встроенных типов как длинный x = (длинный) y; или это все еще считало плохим и опасным?

не используют их, никогда. Причины против использования их применяются здесь также. В основном, после того как Вы используете их, все ставки выключены, потому что компилятор не будет больше помогать Вам. В то время как это более опасно для указателей, чем для других типов, это потенциально все еще опасно и дает плохую диагностику компилятора в случае ошибок, тогда как модернизированные броски предлагают более богатые сообщения об ошибках, так как их использование более ограничивается: Meyers приводит пример выбрасывания const мыс: использование любого броска кроме const_cast не скомпилирует, таким образом проясняя , что происходит здесь.

кроме того, некоторые другие недостатки применяются независимо от типов, а именно, синтаксических соображений: бросок C-стиля очень незаметен. Это не хорошо: броски C++ выделяются ясно в коде и указывают на потенциально опасный код. Они могут также легко разыскиваться в IDE и текстовых редакторах. Попытайтесь искать бросок C-стиля в большом коде, и Вы будете видеть, как трудно это.

, С другой стороны, броски C-стиля не предлагают преимуществ перед бросками C++, таким образом, даже нет компромисса для рассмотрения.

В более общем плане, Scott Meyers советует к “Minimize casts” в Эффективном C++ (объект 27), потому что “casts ниспровергают систему типов. ”

28
ответ дан 30 November 2019 в 10:18
поделиться

Если Вы находите, что необходимо сделать, бросок C-стиля (или reinterpret_cast) затем смотрит на очень тщательно код, на 99,99% бесспорно, что существует что-то не так с ним. И эти броски leed почти неизбежно к конкретной реализации (и очень часто неопределенный) поведение.

0
ответ дан 30 November 2019 в 10:18
поделиться

Почему Вам нужен тот конкретный бросок? Любой числовой тип может быть преобразован в длинное без броска (в возможных потерях точности), таким образом бросание не позволяет компилятору сделать что-либо, что это уже не может. Путем кастинга все, что Вы делаете, удаляют способность компилятора предупредить, если существует потенциальная проблема. Если бы Вы преобразовываете некоторый другой основной тип (как указатель) к длинному, я действительно хотел бы видеть reinterpret_cast<>, а не бросок C-типа, таким образом, я могу найти то, что продолжается легко, если там оказывается проблемой.

я не собираюсь одобрять кастинг без причины, и я, конечно, не собираюсь одобрять броски C-типа без серьезного основания. Я не вижу оснований для кастинга между большинством встроенных типов, и если существует тот, который я хочу смочь найти его легко с текстовым поиском.

0
ответ дан 30 November 2019 в 10:18
поделиться

Я могу придумать одно законное использование приведений в стиле C:

// cast away return value to shut up pedantic compiler warnings
(void)printf("foo\n");
3
ответ дан 30 November 2019 в 10:18
поделиться

На мой взгляд, приведение встроенных типов в C-Style при использовании стандартных библиотечных функций и STL - это нормально, и в результате код становится легче читать.

В компании, в которой я работаю, мы компилируем с максимальным уровнем предупреждений (уровень 4), поэтому мы получаем предупреждения о каждом небольшом приведении типа и т. Д. Поэтому я использую в них приведения в стиле c, потому что они маленькие, не такие многословные и понятные.

for (int i = 0; i < (int)myvec.size(); i++)
{
  // do something int-related with i
}
float val = (float)atof(input_string);

и т. Д.

Но если его включенный (например, библиотечный) код может измениться, то лучше использовать static_cast <> (), потому что вы можете гарантировать, что компилятор выдаст ошибку, если типы изменятся и приведение больше не будет смысл. Кроме того, невозможно искать приведения в коде, если вы используете только c-style. " static_cast (" довольно легко найти. :)

2
ответ дан 30 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: