我一直在尋找的bitset C++標準庫頭的頭文件。我發現,重載操作符[] operator[](size_t ndx)
(在bitset
類中定義)返回reference
類的temproray對象。在std :: bitset :: operator []中創建的std :: bitset :: reference對象的生存期?
reference
operator[](size_t __position)
{ return reference(*this,__position); }
這個重載運算符封裝了一個位的概念。這個類的一個實例是一個實際位的代理。它可在表達式是有用的像
bitset<10> b;
b[2] = true;
的reference
類定義了重載=
操作者的成員函數,使得上面的例子可以工作:
//For b[i] = __x;
reference&
operator=(bool __x)
{
if (__x)
*_M_wp |= _Base::_S_maskbit(_M_bpos);
else
*_M_wp &= ~_Base::_S_maskbit(_M_bpos);
return *this;
}
然而,我感到困惑移到該表達式:
if (b[2]) {
//Do something
}
的b[2]
第一返回reference
類的臨時對象,然後重載operato在該返回的臨時對象上調用r(operator bool() const
)將其轉換爲bool
數據類型。
// For __x = b[i];
operator bool() const
{ return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) != 0; }
如果臨時對象(具有自動存儲類對象)上堆疊創建的,則調用一個另一個函數(operator bool() const
)不應該破壞由所述第一函數調用返回的臨時對象(由reference operator[](size_t __position)
返回reference
對象) ?
什麼是臨時對象的C和C++的壽命?
有一個例外,以你的答案 - 一個臨時可以綁定到一個名爲恆定參考變量,其壽命延長至所述變量的壽命。 – Leon
@Leon實際上,有三種情境,一生不一樣,我在這裏添加它 – Danh
@Danh您能否詳細說明更多的課程。當代#5和課程。當代#6? – abhiarora