std::has_unique_object_representations
提供: cppreference.com
ヘッダ <type_traits> で定義 | ||
template<class T > struct has_unique_object_representations; | (C++17以上) | |
T
が TriviallyCopyable な型であり、同じ値を持つ任意の2つの T
型オブジェクトが同じオブジェクト表現を持つ場合、 true に等しいメンバ定数 value
が提供されます。 それ以外の型に対しては、 value
は false です。
この特性の目的において、2つの配列の要素が同じ値を持つならば、その2つの配列は同じ値を持ち、2つの共用体でないクラスの直接のサブオブジェクトが同じ値を持つならば、その2つのクラスは同じ値を持ち、2つの共用体が同じアクティブメンバを持ちそのメンバの値が同じならば、その2つの共用体は同じ値を持ちます。
スカラー型がこの特性を満たすかどうかは処理系定義ですが、パディングビットを持たない符号なし(C++20未満)整数型は一意なオブジェクト表現を持つことが保証されています。
T
が不完全型であり、 void でなく、サイズ不明な配列でなく、それらの cv 修飾された型でもない場合、動作は未定義です。
has_unique_object_representations
または has_unique_object_representations_v
に対して特殊化を追加するプログラムは未定義です。
目次 |
[編集]テンプレート引数
T | - | 調べる型 |
[編集] ヘルパー変数テンプレート
template<class T > inlineconstexprbool has_unique_object_representations_v = has_unique_object_representations<T>::value; | (C++17以上) | |
std::integral_constant から継承
メンバ定数
value [静的] | T が一意なオブジェクト表現を持つならば true、そうでなければ false(パブリック静的メンバ定数) |
メンバ関数
operator bool | オブジェクトを bool に変換します。 value を返します (パブリックメンバ関数) |
operator() (C++14) | value を返します (パブリックメンバ関数) |
メンバ型
型 | 定義 |
value_type | bool |
type | std::integral_constant<bool, value> |
[編集]ノート
この特性はオブジェクト表現をバイト列としてハッシュすることによってその型を正しくハッシュできるかどうか判定できるようにするために導入されました。
[編集]例
Run this code
#include <iostream>#include <type_traits> struct foo {char c;float f;short st;int i;}; struct bar {int a;int b;}; int main(){std::cout<<std::boolalpha<<"Does foo have unique object representations? "<< std::has_unique_object_representations_v<foo><<'\n'<<"Does bar have unique object representations? "<< std::has_unique_object_representations_v<bar><<'\n';}
出力例:
Does foo have unique object representations? false Does bar have unique object representations? true
[編集]関連項目
(C++11) | 型が標準レイアウト型かどうか調べます (クラステンプレート) |
(C++11) | ハッシュ関数オブジェクト (クラステンプレート) |