0

int&int同じタイプですか?私が使用した場合、私はis_same<int,int&>::value得ますfalsetypeid(int).name() == typeid(int&).name()、同じですか?

int第二に、との同じ質問const int

第三intint*

実際に別のオブジェクトのアドレスを格納し、動作が異なるかどうかは理解できますがint、あるオブジェクトは別のオブジェクトの単なるエイリアスであるint*と考えていint&ました。int

これについていくつかの良い解説を得ることに熱心です。

4

3 に答える 3

4

C ++11規格の5.2.7/4項から:

typeidがtype-idに適用されると、結果はtype-idのタイプを表すstd::type_infoオブジェクトを参照します。type-idの型がcv修飾されている可能性のある型への参照である場合、typeid式の結果は、cv非修飾参照型を表すstd::type_infoオブジェクトを参照します。type-idの型がクラス型またはクラス型への参照である場合、クラスは完全に定義されている必要があります。

したがって、2つのタイプは明らかに異なりますが、とは同じ結果になりますtypeid(int)typeid(int&)同様に、型システムintint constは異なる型ですが、演算子は修飾をtypeid無視します。constC++11規格の5.2.7/5項から:

glvalue式の最上位のcv修飾子、またはtypeidのオペランドであるtype-idは常に無視されます。

最後に、intint*は型システムの異なる型であり、typeid演算子はそれらに対して異なる結果を返します。

于 2013-02-11T16:07:13.113 に答える
2

型修飾子(constおよびvolatile)は、さまざまな型を作成します。 intとは異なるタイプですconst int

参照、ポインタ、配列も同様です。例えば:

int、、、int&およびint[10]int*すべて異なるタイプです。

Tstd::remove_reference<T>::typeは参照のifとは異なるタイプTです。

<typeinfo>出力typeid(int).name()はプラットフォームに依存し、参照型と非参照型を区別する必要はありません。ただし、C ++型システムは、で発見したように、とを明確に区別します。TT&type_traits

于 2013-02-11T16:01:31.807 に答える
0

std::type_info::nameアイデンティティについては何も言いません。IDのテストにを使用することを主張する場合は、次のことを試してください。typeid

assert(typeid(T) != typeid(U));

これは、オブジェクトに対して定義された等式比較演算子type_infoを使用しています。しかし、失望に備えてください。上記の主張は、§5.2.7/ 4のために失敗します(Andyの回答を参照)T = intU = int&

于 2013-02-11T16:07:25.400 に答える