[英]C++ type trait with volatile
我試圖理解以下類型特征,它檢查T
是來自類型container
還是派生自這種類型。 我的問題與aux_iscontainer
及其論點有關。
為什么它需要在參數前面有 CV 限定符。?
為什么我們甚至需要傳遞一個指向類型的指針而不僅僅是類型本身?
雖然std::declval<T>
確實只允許我們使用T
的類型而不構造std::declval<T*>
在這種情況下是什么意思?
template< typename T>
std::true_type aux_iscontainer( const volatile container<T> *);
std::false_type aux_iscontainer(... ) ;
template< typename T >
struct iscontainer : public decltype( aux_iscontainer(std::declval<T*>() ) )
{};
//
template< typename T >
struct iscontainer <T&>
: public std::false_type
{};
為什么它需要在參數前面有 CV 限定符。?
標准的隱式轉換之一是將cv 限定符添加到表達式中,因此const volatile T*
可以綁定到T*
、 const T*
、 volatile T*
和const volatile T*
中的任何一個。
為什么我們甚至需要傳遞一個指向類型的指針而不僅僅是類型本身?
另一種標准的隱式轉換是從派生指針到基指針。
雖然 std::declval 只允許我們使用 T 的類型而不構造 std::declval<T*> 在這種情況下是什么意思?
同樣,它是一個T*
T*
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.