答えて
あなたはstatic_cast
を使用するか、または代わりに、暗黙のキャストに頼らなければならない:strager答えとして
int64_t a = 1234;
double d = static_cast<double>(a);
double f = a;
使用static_cast
。
- 暗黙のキャストがあなたにノイズを加えることも意味し、コンパイラの警告の共通のソースです:私はいくつかの理由のために暗黙のキャスト(またはC++のソースコードでも、Cスタイルのキャスト)を使用してに対してをお勧めしますビルド(より良い警告フラグが追加された今、またはそれ以降)。
- あなたの後ろにいるメンテナンスプログラマーは暗黙のキャストを見て、それが意図的な動作か間違い/バグかを知る必要があります。そのことを
static_cast
とすると、の意図がすぐに明らかになります。 static_cast
他のC++スタイルのキャストは、grep
が処理するのが簡単です。
"インテント":特に割り当てがdの宣言から遠い場合、static_cast
あなたはDRYに違反しているのは正しいですが、あなたが前方宣言を考えるなら、言語はどんな形でもDRYではありません。また、IIRCのtypeof(d)にはRTTIと
...あなたが正しいとはいえ、誰かが不完全なリファクタリングをした場合、DRY違反は不思議なコードを引き起こします。フロートd; d = static_cast
PODタイプの場合、両方のバージョンで同じことが行われます。好きなものを選んで一貫性を保つ。
私は入力/可読性のために前者を好む多くの人を知っていますが、私はこれに同意する傾向がありますが、私はどちらかと一緒に暮らすことができます。
「grep for grep」の引数は何度も聞いたことがありますが、PODキャストのコードベースをgrepする必要がある状況はまだありません。
+1、私はキャストのためにgrepする必要はなかった –
また、static_castに相当する、変換構文を使用することができます。
int64_t a = 1234;
double d = double(a);
これは、それがテンプレートコードに同じように扱われることを、プリミティブとクラスタイプを許可することに有用構文構造です、プリミティブに対してstatic_castを実行するか、クラス型に対してコンストラクタを呼び出します。
- 1. Convert :: ToInt64メソッドと同様のC++で64ビットdoubleをint64_tに変換する
- 2. int64_tをtime_durationに変換する
- 3. doubleをMath.PIに変換する(doubleをStringに変換する)
- 4. DStream [Double、Double]をRDDに変換する(Double、Double)
- 5. 文字列をint64_tに変換するには?
- 6. bstr_tをdoubleに変換する
- 7. NSNumberをDouble(CLLocationDegrees)に変換する
- 8. 文字列をdoubleに変換する、
- 9. intをdoubleに変換する
- 10. mailchimp doubleをシングルに変換する
- 11. C#Vector3d/Point3dをdoubleに変換する[]
- 12. DirectShow - IGraphBuilder *をdoubleに変換する(C++)
- 13. double []をEigen :: Matrix4dに変換する
- 14. TextBox.ValueをDoubleに変換してVBAに変換する(Excel 2013)
- 15. double *を配列に変換する方法<double>(6)
- 16. C++ベクトルを変換する<pair <double、double >> to double *、double *?
- 17. Matlabで複合double型からdouble型に変換する
- 18. doubleをStringに変換すると、Stringをdoubleに変換できないというエラーが発生する
- 19. Swift 2でUILabel変数をDouble変数に変換する
- 20. 精度を維持する方法int64_t = int64_t * float?
- 21. 返り値で 'double(*)[5]'を 'double'に変換できません。
- 22. は 'double(_cdecl *)()'を 'double'に変換できません
- 23. Javaエラー:doubleをdoubleに変換できません。
- 24. 引数 '1'を 'double'(double(*)[5])に変換できません。
- 25. Spark MLlibに必要なorg.apache.spark.rdd.RDD [Array [Double]]をArray [Double]に変換する方法
- 26. 文字列をDouble to Stringに変換する際にDouble ""が無効
- 27. 基礎となるバイナリを変更せずにC++型int16_tをint64_tに変換する
- 28. Double変換のByteString表現
- 29. double変数を文字列に正しく変換する
- 30. doubleをint型に変換した文字列に変換する
int64が必ずしもよくダブルにマップされるわけではありません。例えば、doubleの最大値とint64の最大値を比較します。 doubleには57ビットの整数があり、ダブルフォーマットでは表現できない整数をスキップしているよりも高いことにも注意してください。 int64は64ビットの整数を持っていますが、すべて隣の隣に1つあります。数値の範囲は非常に異なります。 –