C++ の暗黙的な型変換とは何ですか?

青灯夜游
リリース: 2020-07-24 11:01:28
オリジナル
3483 人が閲覧しました

C における暗黙的な型変換とは、コンパイラによる「コンストラクター パラメーターの型」から「クラス型」への自動変換を指します。暗黙的なクラス型変換にはリスクが伴います。暗黙的な変換の結果、クラスの一時変数が生成され、操作が完了すると消滅します。テスト完了後に破棄されるオブジェクトを構築しました。

C++ の暗黙的な型変換とは何ですか?

#C の暗黙的なクラス型変換

「C 入門」で言及:

#「単一パラメータで呼び出すことができるコンストラクタは、パラメータ型からクラス型への暗黙的な変換を定義します。」

これは次のようになります。ここで、「単一の仮パラメータで呼び出すことができる」とは、コンストラクタが 1 つの仮パラメータのみを持つことができるという意味ではなく、複数の仮パラメータを持つことができるが、それらの仮パラメータにはデフォルトの実パラメータがあることを意味することに注意してください。

それでは、「暗黙的な変換」とは何でしょうか?上の文にもあるように、

はコンパイラーによるコンストラクターのパラメーター型からクラス型への自動変換です。

コードを見てみましょう:

#include "stdafx.h" #include  #include  using namespace std ; class BOOK //定义了一个书类 { private: string _bookISBN ; //书的ISBN号 float _price ; //书的价格 public: //定义了一个成员函数,这个函数即是那个“期待一个实参为类类型的函数” //这个函数用于比较两本书的ISBN号是否相同 bool isSameISBN(const BOOK & other ){ return other._bookISBN==_bookISBN; } //类的构造函数,即那个“能够用一个参数进行调用的构造函数”(虽然它有两个形参,但其中一个有默认实参,只用一个参数也能进行调用) BOOK(string ISBN,float price=0.0f):_bookISBN(ISBN),_price(price){} }; int main() { BOOK A("A-A-A"); BOOK B("B-B-B"); cout<BOOK类型,借助BOOK的构造函数进行转换,以满足isSameISBN函数的参数期待。 cout<
        
ログイン後にコピー

コードでわかるように、isSameISBN 関数は BOOK クラス型パラメーターを予期していますが、文字列型 Give を渡しています。それは、これはそれが望んでいることではありません!幸いなことに、BOOK クラスには文字列型の実パラメータで呼び出されるコンストラクタがあり、コンパイラはこのコンストラクタを呼び出し、文字列型を暗黙的に BOOK 型に変換し (BOOK 一時オブジェクトを構築し)、それを渡します。 isSameISBN 関数。

暗黙的なクラス型変換には依然としてリスクが伴います。上でマークしたように、暗黙的な変換はクラスの一時変数を取得し、操作の完了後に消えます。テストの完了後に破棄されるオブジェクトを構築します。

明示的な宣言によってこの変換を抑制できます:

explicit BOOK(string ISBN,float price=0.0f):_bookISBN(ISBN),_price(price){}
ログイン後にコピー

明示的なキーワードは、クラス内のコンストラクター宣言にのみ使用できます。この方法では、BOOK クラスのコンストラクターはオブジェクトであるため、使用できません。が暗黙的に作成される場合、上記のコードをコンパイルすると、次のプロンプトが表示されます。

C++ の暗黙的な型変換とは何ですか?

これで、ユーザーは表示タイプの変換を実行し、一時オブジェクトを明示的に作成することのみが可能になります。

要約すると:

  • は 1 つの実パラメータで呼び出すことができますが、これはコンストラクタが 1 つの仮パラメータしか持てないという意味ではありません。

  • 暗黙的なクラス型変換はエラーを引き起こしやすいため、暗黙的なクラス型変換を使用する明確な理由がない限り、1 つの引数で呼び出せるすべてのコンストラクターを明示的に宣言してください。 。

  • explicit は、クラス内のコンストラクターの宣言にのみ使用できます。暗黙的な型変換によって引き起こされる問題は回避できますが、ユーザーは一時オブジェクトを明示的に作成する必要があります (ユーザーに要件が課せられます)。

推奨: 「

C チュートリアル

以上がC++ の暗黙的な型変換とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!