16

C++ キャストstatic_cast, const_cast, にreinterpret_castは、テンプレートのような構文があります。

long foo = 3; 
int bar = static_cast<int>(foo);

私は標準を見てきましたが、キャストは式であり、私が思っていたテンプレート関数ではないと言っています。

内部的には、これらのキャストは特権ステータスを持つテンプレートにすぎないのでしょうか、それともテンプレート構文をたまたま借用したキーワードなのでしょうか?

4

1 に答える 1

16

それらはたまたまテンプレート構文を借用したキーワードですか?

これ。キャストは、使用されるコンテキストに応じて異なる方法で実装されます。一般に、キャストは関数として実装できません。たとえばstatic_cast、コンパイル時の操作のみである場合があり、そのためのコードは発行されません。ただし、それ以外の場合 (特に、コンストラクターの呼び出し、型階層でのキャスト、またはレイアウトと互換性のないプリミティブ型間の変換の場合) には、ランタイム操作が必要です。

つまり、標準のキャスト構文にた独自の関数を実装できます (boost::lexical_castそうします)。

于 2012-07-17T19:38:04.707 に答える