@R'nin bu cevabı. Martinho Fernandes , güvenli bool deyiminin görünüşte C ++ 11'de kullanımdan kaldırıldığını, çünkü basit bir
explicit operator bool() const;
cevap standart alıntı göre §4 [conv] p3:
Bir ifade e, ancak icat edilen bazı geçici değişkenler için
Tve ancak deklarasyonT t=e;iyi oluşturulmuşsa örtülü olarak bir türe dönüştürülebilirt(§8.5). Bazı dil yapıları, bir ifadenin Boole değerine dönüştürülmesini gerektirir. Bir ifadeeBöyle bir bağlamda ortaya olduğu söylenen , içeriğe dönüştürülen içinboolve iyi oluşturulmuş ise ve bu bildiri, yalnızcabool t(e);iyi oluşturulur bazı icat geçici değişken t (§8.5) dir.
Vurgulanan kısım açıkça "örtük açık döküm" (standartta "bağlamsal dönüşüm" olarak adlandırılır) @R olarak açıkça gösterilir. Martinho koydu.
"Örtük açık döküm" gerektiren "belirli dil yapıları" aşağıdaki gibi görünür:
if,while,for(§6.4 [stmt.select] p4)- ikili mantıksal işleçler
&&ve||(§5.14 [expr.log.and/or] p1her ikisi için) - mantıksal olumsuzlama operatörü
!(§5.3.1 [expr.unary.op] p9) - koşullu işleç
?:(§5.14 [expr.cond] p1) static_assert(§7 [dcl.dcl] p4)noexcept(§15.4 [except.spec] p2)
Başlıktaki varsayımımız doğru mu? Umarım olası bir dezavantajı görmezden gelmedik.
operator bool. Örneğin, shared_ptrp adlı bir üyem varsa ve bu yöntemi varsa:, operator bool() const { return p; }derlemek başarısız olur. Bu aptal IMO.