static_cast<T>(...)
はコンパイル時または実行時に行われるものですか?私は周りを探索したが、私は別の答えを得た。static_cast <T>(...)はコンパイル時または実行時ですか?
また、dynamic_cast<T>(...)
は明らかに実行時ですが、reinterpret_cast<T>(...)
はどうですか?
static_cast<T>(...)
はコンパイル時または実行時に行われるものですか?私は周りを探索したが、私は別の答えを得た。static_cast <T>(...)はコンパイル時または実行時ですか?
また、dynamic_cast<T>(...)
は明らかに実行時ですが、reinterpret_cast<T>(...)
はどうですか?
他のものにキャストしているものによって異なります。例えば。 static_cast<std::string>("Hello")
は、std::string
というコンストラクタを呼び出します。
reinterpret_cast
が実際のマシン命令を生成する必要がある場合は私の頭の上にはありません。コンパイラに伝えるだけです。このビットパターンをとり、このタイプの値であると考えてください。
ああ、面白いです。これのルールは何ですか?これは 'int 'を' float'にキャストするときに起こりますか?そして、私が 'flo'を' int'にキャストしたときは? –
コンパイル時の定数をキャストしていない限り(つまり、 'static_cast
これは '-O3'で最適化されますか?また、パフォーマンスの高い数値キャストのために私がやっていることを確信しているときに 'reinterpret_cast'を使うべきですか? –
コンパイル時間。実際、コンパイラは、結果が正しいことをチェックするランタイムコードを挿入しません。コンパイラは、変換が静的に可能であることをチェックします。例:サブクラスからスーパークラスへのキャスト変換に組み込み関数またはキャスト関数を呼び出す必要がある場合は、実行時に実行されますが、型チェックは行われません。
サブクラスからスーパークラスにキャストすると、実行時コードを生成する必要があります。前記スーパークラスが実際には仮想基本クラスであるとき@IgorTandetnik右。 –
私はタイプチェックコードを意味しました。あいまいさを修正しようとしました(または普通のエラー!:-))。 –
"静的" ...手がかりは名前にあります。 –
static_castはランタイムチェックを実行しません。 – dare
既存の答えから判断すると、ここで決定する必要があるより大きな問題は、「コンパイル時に完了する」*ということです。使用する変換はコンパイル時に選択されますが、実際の変換自体は、実行時に実行する必要がある変換コードをもたらす可能性があります(通常はそうです)。 –