[解決済み] キャスト演算子を明示的に使用することはできますか?
2023-04-28 16:51:05
質問
コンストラクタに関して、キーワード
explicit
を追加することで、熱心なコンパイラがプログラマの最初の意図とは異なるオブジェクトを作成することを防ぎます。そのようなメカニズムは、キャスト演算子にも利用可能ですか?
struct Foo
{
operator std::string() const;
};
ここでは、例えば、キャストするために
Foo
を
std::string
に変換することができますが、このようなキャストは暗黙のうちに行われないようにしたいものです。
どのように解決するのですか?
はい、いいえ。
C++のどのバージョンを使用しているかによります。
-
C++98 と C++03 では
explicit
型変換演算子 - しかし、C++11 ではそうなっています。
例です。
struct A
{
//implicit conversion to int
operator int() { return 100; }
//explicit conversion to std::string
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a; //ok - implicit conversion
std::string s = a; //error - requires explicit conversion
}
でコンパイルします。
g++ -std=c++0x
でコンパイルすると、このようなエラーになります。
prog.cpp:13:20: error: 'A' から非スカラー型 'std::string' への変換が要求されました。
オンラインデモ: http://ideone.com/DJut1
でも、書いたとたんに
std::string s = static_cast<std::string>(a); //ok - explicit conversion
エラーが消える : http://ideone.com/LhuFd
ちなみに、C++11 では、明示的な変換演算子は contextual conversion operator" と呼ばれています。 と呼ばれ、もしそれが ブール型 . また、暗黙的および明示的な変換についてもっと知りたい場合は、このトピックを読んでください。
お役に立てれば幸いです。
関連
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] ダイレクトキャスト vs 'as'演算子?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] explicit キーワードの意味は?