簡體   English   中英

C++ 類型性狀,具有易失性

[英]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.

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