簡體   English   中英

為什么沒有為“T * const”定義pointer_traits?

[英]Why is pointer_traits not defined for “T* const”?

正如在http://en.cppreference.com/w/cpp/memory/pointer_traits和相關網站上看到的那樣(也是通過boost侵入的boost實現), pointer_traits並不專門用於T*const 這是為什么?

雖然這不符合強烈的動機反對指定應該存在針對T* constpointer_traits<>的特化,但我想解釋為什么它不包括在內的原因可能是pointer_traits<>主要用於在上下文中使用發生模板參數推導(特別是類型推導)。

由於類型推導忽略了頂級cv資格,因此可能認為T* constT* volatileT* 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進行專業化會造成傷害,我只是想提供一個可能解釋為什么缺少這些專業化的原因。

同樣,沒有為T* cv提供iterator_traits<>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM