名前空間
変種
操作

std::type_info::name

From cppreference.com
< cpp‎ | types‎ | type info
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
 
const char* name() const;
(C++11 以降 noexcept)

型の名前を含む、実装定義のヌル終端文字列を返します。保証はありません。特に、返される文字列は複数の型で同一になる可能性があり、同じプログラムの呼び出し間で変更される可能性があります。

目次

[編集] Parameters

(なし)

[編集] Return value

ヌル終端文字列。型の名前を含みます。

[編集] Notes

返されたポインタが指す配列の生存期間は指定されていませんが、実際には、与えられた型のRTTIデータ構造が存在する限り持続します。これは、動的ライブラリからロードされた場合(アンロードされる可能性がある)を除き、アプリケーションの生存期間と同じです。

一部の実装(MSVC、IBM、Oracleなど)は、人間が読める型名を生成します。その他、特にgccやclangは、Itanium C++ ABIで指定されているマングリングされた名前を返します。マングリングされた名前は、`abi::__cxa_demangle`などの実装固有のAPIを直接、または`boost::core::demangle`を介して、人間が読める形式に変換できます。また、コマンドラインユーティリティ`c++filt -t`にパイプで渡すこともできます。

[編集] Example

#include <boost/core/demangle.hpp>
#include <cstdlib>
#include <iostream>
#include <string>
#include <typeinfo>
 
struct Base { virtual ~Base() = default; };
struct Derived : Base {};
 
int main()
{
    Base b1;
    Derived d1;
 
    const Base* pb = &b1;
    std::cout << typeid(*pb).name() << '\n';
    pb = &d1;
    std::cout << typeid(*pb).name() << '\n';
 
    std::string real_name = boost::core::demangle(typeid(pb).name());
    std::cout << typeid(pb).name() << " => " << real_name << '\n';
 
    std::cout << "c++filt => " << std::flush;
    std::string s = typeid(pb).name();
    std::system(("c++filt -t " + s).data());
}

実行結果の例

// GCC/Clang:
4Base
7Derived
PK4Base => Base const*
c++filt => Base const*
 
// MSVC:
struct Base
struct Derived
struct Base const * __ptr64 => struct Base const * __ptr64

[編集] See also

(C++11)
同じ型に対して同一の値が返されます
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)