オブジェクトが C++11 なしで const かどうかを確認するにはどうすればよいstd::is_const
ですか? 私の知る限り、constと宣言されconst_cast
たオブジェクトを ingすべきではありません
質問する
831 次
1 に答える
12
C++11 の実装例is_const
はcppreferenceにあり、次のようになります。
template<class T> struct is_const : false_type {};
template<class T> struct is_const<const T> : true_type {};
この定義を C++03 コードに入れると、とis_const
の定義を追加すれば、そこでも使用できます (不足しているとを指摘してくれた mfonantini に感謝します)。次のように定義すると、C++11 で使用される定義に非常に近くなります。false_type
true_type
true_type
false_type
struct true_type {
static const bool value = true;
typedef bool value_type;
typedef true_type type;
operator value_type() const { return value; }
};
struct false_type {
static const bool value = false;
typedef bool value_type;
typedef false_type type;
operator value_type() const { return value; }
};
唯一の違いは、 staticvalue
は単なるconst
であり、 ではありませんがconstexpr
、それでも定数式であり、テンプレート引数として使用できることに注意してください。したがって、すべての実用的な目的のために、上記の定義は C++03 でも機能するはずです。
あなたの質問の最後の部分について:実際には、非 const 型を const にキャストしても問題はありません。(ただし、ポインタへのポインタまたはポインタへの参照では、不正な状況が発生する可能性があります。たとえば、T**
にキャストできませんconst T**
。)
于 2012-11-20T03:33:19.143 に答える