[英]When can I use explicit operator bool without a cast?
我的班級顯式轉換為 bool:
struct T {
explicit operator bool() const { return true; }
};
我有一個實例:
T t;
要將其分配給bool
類型的變量,我需要編寫一個強制轉換:
bool b = static_cast<bool>(t);
bool b = bool(t);
bool b(t); // converting initialiser
bool b{static_cast<bool>(t)};
我知道我可以在沒有強制轉換的條件下直接使用我的類型,盡管有explicit
限定符:
if (t)
/* statement */;
我還有什么地方可以在沒有演員的情況下將t
用作bool
?
該標准提到了值可以“根據上下文轉換為bool
”的地方。 他們分為四大類:
if (t) /* statement */;
for (;t;) /* statement */;
while (t) /* statement */;
do { /* block */ } while (t);
!t
t && t2
t || t2
t ? "true" : "false"
對於這些,操作員需要是constexpr
:
static_assert(t);
noexcept(t)
if constexpr (t)
NullablePointer T
任何地方標准需要滿足這個概念的類型(例如std::unique_ptr
的pointer
類型),它可以被上下文轉換。 此外, NullablePointer
的相等和不等運算符的返回值必須在上下文中可轉換為bool
。
std::remove_if(first, last, [&](auto){ return t; });
在任何帶有稱為Predicate
或BinaryPredicate
的模板參數的算法中, predicate 參數可以返回一個T
。
std::sort(first, last, [&](auto){ return t; });
在任何帶有名為Compare
的模板參數的算法中, Compare
器參數可以返回一個T
。請注意,const 和非常量轉換運算符的混合可能會導致混淆:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.