Конвертировать int64_t в двойной - PullRequest
14 голосов
/ 28 марта 2009
  int64_t a = 1234;

  double d = (double) a;

Это рекомендуемый способ?

Ответы [ 4 ]

15 голосов
/ 28 марта 2009

используйте static_cast в качестве ответов на вопросы. Я рекомендую против , используя неявное приведение (или даже приведение в стиле C в исходном коде C ++) по нескольким причинам:

  • Неявные приведения являются распространенным источником предупреждений компилятора, что означает, что вы можете добавлять шум в сборку (или сейчас, или позже, когда добавлены лучшие флаги предупреждений).
  • Следующий программист по сопровождению увидит скрытое приведение и должен знать, было ли это преднамеренным поведением или ошибкой / ошибкой. Наличие этого static_cast делает ваше намерение сразу очевидным.
  • static_cast и другие приведения в стиле C ++ просты для обработки grep.
7 голосов
/ 28 марта 2009

Вы должны использовать static_cast или полагаться на неявное приведение вместо:

int64_t a = 1234;
double d = static_cast<double>(a);
double f = a;
4 голосов
/ 28 мая 2009

Вы также можете использовать синтаксис преобразования, который эквивалентен static_cast:

int64_t a = 1234;
double d = double(a);

Это полезная синтаксическая конструкция, поскольку она позволяет одинаково обрабатывать примитивные и классовые типы в коде шаблона, выполняя static_cast для примитива или вызывая конструктор для типа класса.

4 голосов
/ 28 марта 2009

Для типов POD обе версии делают одно и то же. Выберите тот, который вы предпочитаете, и будьте последовательны.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...