這個問題在這里已經有了答案: 顯式轉換運算子 bool (2 個回答) 4 天前關閉。
根據 cppreference.com,顯式轉換函式不能用于隱式轉換。例如,他們有這個:
struct B
{
explicit B(int) { }
explicit B(int, int) { }
explicit operator bool() const { return true; }
};
int main()
{
...
if (b2) ; // OK: B::operator bool()
...
}
我原以為'if (b2)' 是隱式轉換,因此無法使用顯式轉換函式。那么什么是不允許的隱式轉換的例子呢?
uj5u.com熱心網友回復:
背景關系轉換
在以下背景關系中,
bool如果宣告bool t(e);格式正確(即考慮顯式轉換函式,例如顯式 T::operator bool() const;),則需要型別并執行隱式轉換。據說這樣的運算式 e 被背景關系轉換為 bool。
- if、while、for的控制運算式;
- ...
uj5u.com熱心網友回復:
來自 C 17 標準(7 個標準轉換)
4 某些語言結構要求將運算式轉換為布林值。出現在這種背景關系中的運算式 e 被稱為背景關系轉換為 bool 并且是良構的當且僅當宣告 bool t(e); 對于某些發明的臨時變數 t (11.6) 來說,它是格式良好的。
宣告
bool t( b2 );
格式良好,因為使用了直接初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384808.html
