C++ で数値型を変換するときにどの方法が良いのでしょうか?
定数表現について: T
を double
などとして、コンパイル時に a
が決まるとき、(T) a
と static_cast<T>(a)
と T(a)
と T{a}
でどう違ってどれが良いのか?
変数表現について: T
を double
などとして、コンパイル時に x
が決まらないとき、(T) x
と static_cast<T>(x)
と T(x)
と T{x}
でどう違ってどれが良いのか?
T()とT{}は初期化式です
キャストに当たるのは(T)とdynamic_cast<T>()ですが、dynamic_castはこちらにある通り(https://www.ibm.com/docs/ja/i/7.3?topic=expressions-dynamic-cast-operator-c-only)オブジェクトのキャストを対象としたクラスです
よって数値型を変換するだけであれば(T)を選択することになります
いいえ。 型変換で正しいです。
https://timsong-cpp.github.io/cppwp/n3337/expr.type.conv
Google翻訳では同等と訳されますね
原文のニュアンスは分かりませんが、翻訳側のニュアンスが少し曖昧なのは、{}がキャストの対象であるためと考えられます
いずれにしてもT()では全ての型変換には対応できないので、整数型以外のキャストも想定する場合ば(T)としておくのが無難と思われます
尚質問内容を読み違えていた部分がありますが、static_cast<T>についてはこちらのリンクではdynamic_castの方が安全であると案内されています(https://learn.microsoft.com/ja-jp/cpp/cpp/static-cast-operator?view=msvc-170)
もしstatic_castを用いる場合は、dynamic_castの検討をおすすめします
本件は数値型の変換に関する話なので,dynamic_cast は使えません.
ちょっと分かりにくいですが
> dynamic_castはこちらにある通り~ オブジェクトのキャストを対象としたクラスです
と最初にあるので、たぶんその部分は補足ではないでしょうか
回答2件
あなたの回答
tips
プレビュー