Преобразовать int64_t в double

  int64_t a = 1234;

  double d = (double) a;

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

Ответ 1

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

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

Ответ 2

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

int64_t a = 1234;
double d = static_cast<double>(a);
double f = a;

Ответ 3

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

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

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

Ответ 4

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

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

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