FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- : スポンサー広告 :

《086》type_infoクラス


 type_infoクラス

 type_infoクラスは、型情報を格納した型であり、<typeinfo>ヘッダによって提供されます。

 typeid演算子によってのみ生成される type_infoオブジェクトには、型名文字列へのポインター その他の型情報が格納されています。
( typeid演算子が生成するのは、const std::type_info型の左辺値です。typeid演算子の結果は、その参照になります。)

 typeid演算子に型 あるいは オブジェクトを渡すことにより生成される type_infoオブジェクトは、その型 あるいは オブジェクト の実行時型情報 RTTI です。


 type_infoクラスの定義は、概略としては、以下のようになっています。
   class type_info {
   public:
     virtual ~type_info();
     bool operator==(const type_info&) const;
     bool operator!=(const type_info&) const;
     const char* name() const;
     ・・・
    private:
     type_info(const type_info&);
     type_info& operator=(const type_info&);
   };


メンバ関数 name は、処理系定義の NTBS を返却します。
 ( NTBS … Null-Terminated Byte String のことで、末尾がナル文字になっている C言語形式の文字列です。)
type_info コピーコンストラクターは private であるため、type_infoクラスのオブジェクトを直接インスタンス化することはできません。
 ( type_info オブジェクトの生成は、typeid 演算子によってのみ可能です。)
代入演算子「 = 」も private です。したがって、type_infoオブジェクトのコピーや代入を行うことはできません。
コピーコンストラクタと代入演算子を private: で宣言することで、オブジェクトのコピーを抑止することができます。

#include <typeinfo>
#include <iostream>

int main() {
    std::cout << typeid(int).name() << '\n';

    const type_info& ref = typeid(unsigned);
    std::cout << ref.name() << '\n';

    const type_info* ptr = &typeid(double);
    std::cout << ptr->name() << "\n\n";

    // operator==
    std::cout << std::boolalpha
        << (typeid(int) == typeid(5)) << '\n';

    // operator!=
    std::cout
        << (typeid(int) != typeid(5)) << '\n';
}

fca05_0010.png

2018-04-14 00:27 : 未分類 : コメント : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

検索フォーム

こうすけ kousuke_cpp@outlook.jp

スポンサーリンク

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2018/3/24 23:58時点)




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。