http://en.cppreference.com/w/cpp/memory/pointer_traitsおよび関連部位(ブースト介入によるブースト実施も示す)に見られるように、pointer_traits
はT*const
に特化していない。何故ですか?pointer_traitsが "T * const"に対して定義されていないのはなぜですか?
答えて
これはT* const
ためpointer_traits<>
の専門が存在する必要があることを指定するに強い意欲としての資格はありませんが、私はそれが含まれていなかった理由の説明がpointer_traits<>
はほとんどどこコンテキストで使用されることを意図されている可能性があり推測テンプレート引数の控除(特にタイプ控除)が行われます。
型推論は、トップレベルのCV-資格を無視しているので、T* const
またはT* volatile
またはT* const volatile
のための専門は、おそらく不要と判断された:もちろん
#include <type_traits>
template<typename T>
void foo(T)
{
static_assert(std::is_same<T, int*>::value, "Error"); // Does not fire!
// ^^^^
}
int main()
{
int x = 0;
int* const p = &x;
foo(p);
}
をこれはT* cv
のために専門を持つことで害することを意味するものではありませんこのシナリオでは、なぜこれらのスペシャライゼーションが欠落しているのかを説明することを意味しました。
同様に、iterator_traits<>
の特化は、T* cv
に対して提供されていません。
私は 'foo(T&)'型の関数テンプレートを持っていて、それは起動します:( –
@Johannes:そうです、トップレベルのcv修飾子が無視されない状況です。 (なぜなら、実際には 'shared_ptr <>'のために実装されているように思われます) –
'foo(T&)' a修飾子'T'はトップレベルではなく、'& 'はトップレベルであり、任意のcv修飾子は「1レベル下」です。 –
- 1. はなぜ定義されていないのですか?
- 2. jqGrid:グリッドに対して定義したイベントが発射編集されないのはなぜですか?
- 3. ライブサーバでmysqli_fetch_all()が定義されていないのはなぜですか?
- 4. ControlItemでSubItemsが定義されていないのはなぜですか?
- 5. アプリケーションで「url_for」が定義されていないのはなぜですか?
- 6. limits.hでARG_MAXが定義されていないのはなぜですか?
- 7. ReactJSコードでthis.propsが定義されていないのはなぜですか?
- 8. PageMethodsオブジェクトが定義されていないのはなぜですか?
- 9. 関数名が定義されていないのはなぜですか?
- 10. JavaScript関数 "a"が定義されていないのはなぜですか?
- 11. "total"変数が定義されていないのはなぜですか?
- 12. ReactReduxが定義されていないのはなぜですか?
- 13. ブール値が定義されていないのはなぜですか?
- 14. chrome.browserAction.onClickedが定義されていないのはなぜですか?
- 15. Lazy_high_chart:options.xaxが定義されていないのはなぜですか?
- 16. デバッグ時に相対パスが設定されていない、なぜですか?
- 17. ObjectでequalsとhashCodeが定義されているのはなぜですか?
- 18. jQueryが定義されていないというエラーが表示されるのはなぜですか?
- 19. 継承を使用して、私のテストクラスでgoPee()が定義されていないのはなぜですか?
- 20. なぜテンプレートが再定義されないのですか?それはすべてヘッダファイルに書かれているのはなぜですか?
- 21. 致命的なエラー:定義されていない関数 - なぜですか?
- 22. なぜassertは(void)0と定義されていますか?
- 23. contentPlaceHolderで定義されているスクリプトタグが追加されないのはなぜですか?
- 24. FFはなぜwindow.eventが定義されていないと言っているのですか?
- 25. モデルが定義されていない
- 26. なぜphpにデータを受け取っていないのですか?定義されていないインデックス
- 27. mvc httppostが定義されていると、jqueryのロードが機能しないのはなぜですか?
- 28. Oracleは、この問合せに対して「ORA-00918:列があいまいに定義されました」をなぜ呼び出さないのですか?
- 29. なぜ '宣言'は 'T &&'ではなく、 'add_rvalue_reference <T> :: type'で指定されていますか?
- 30. なぜ "const T *"が "operator delete"のtrivially "void *"に変換されるのですか?
これは、ポインタを格納する変数に適用され、論理ポインタのエンティティ自体には適用されないためです。それはあなたがそれをどのように格納するかについてのポインタの特性/特性については本当に重要ではありません。 – PlasmaHH