お金が欲しいと思う今日この頃皆さんいかがお過ごしでしょうか。
肩の荷が少し下りた人です。
明日使える・・・かは解らないC++の小ネタを紹介しようと思います。
知識として頭の片隅にでも置いといてもらえればと思います。
今回はexplicitについてやろうと思います。
簡単に言うとクラスへの暗黙的型変換を防ぐ事ができます。
実際に使うか?と言われると怪しいですが
「それでも私は一向に構わん!」
という方はどうぞ
[0回]
[Main.cpp]
#include <stdio.h>
class C0 {
public:
C0( int _n ){ m_n = _n; }
void Show(){ printf( "%d\n", m_n ); }
private:
int m_n;
};
void Test( C0 _c0 ){ _c0.Show(); }
int main(){
Test( 10 );
return 0;
}
[EOF]
上のコードは実行可能です。
注目するのはmainで読んでいるTest関数です。
C0型を引数に取るのに実際に書かれているのは数値(int)ですので
C0型に暗黙の型変換が行われていることになります。
ここで引数を絶対に明示的に書いて欲しい時にexplicitを使用します。
使用方法はコンストラクタの前にexplicitを書くだけです。
explicit C0( int _n ){ ~~~ }
これでコンパイルするとエラーが返ってくる様になります。
これを実行できるようにするにはTest関数を呼んでいる所で
Test( C0( 10 ) );
のようにすると実行できるようになります。
explicitについては以上です。有り難う御座いました。
PR
COMMENT