public member function
<locale>

std::codecvt::unshift

result unshift (state_type& state,    extern_type* to, extern_type* to_limit, extern_type*& to_next) const;
取消移位轉換狀態
將移位 state 狀態所需的字元序列寫入 to

在字元編碼轉換(例如由 codecvt::out 發起的轉換)期間,state 可能已被 shifted 移位到非預設狀態,特別是當目標範圍無法容納轉換產生的所有字元時。透過將此函式與額外的儲存一起呼叫,將返回移位狀態到預設狀態所需的剩餘序列寫入 to(最多佔用 to_limit)。

函式返回時,to_next 指向成功寫入的最後一個元素的下一個位置。

在其操作過程中,此函式僅呼叫虛擬受保護成員 codecvt::do_unshift,該成員負責執行上述操作。

在內部,此函式僅呼叫虛擬受保護成員 do_unshift,該成員預設情況下按照上述描述執行操作。

引數

state
一個 state 物件,如面例項所要求的。
通常,這是一個 mbstate_t 型別的物件,其狀態已移位到非預設值(透過呼叫 codecvt::out)。
成員型別 state_type 是面型別的狀態型別(定義為 codecvt 的第三個模板引數 stateT 的別名)。
to, to_limit
指向目標序列的起始和結束字元的指標。使用的範圍最多為 [to,to_limit),它包含 toto_limit 之間的所有字元,包括 to 指向的字元,但不包括 to_limit 指向的字元。
取消移位操作不一定需要填滿整個範圍,也可能在完成之前耗盡它。
成員型別 extern_type 是該 facet 的外部字元型別(定義為 codecvt 的第二個模板引數 externT 的別名)。
to_next
能夠指向上述範圍中某個元素的指標。函式返回後,此物件指向目標範圍內最後一個寫入元素之後的元素。

返回值

值為 codecvt_base::result 型別,具有以下可能值:
成員常量intresult
ok0轉換成功:所有取消移位狀態所需的字元都已成功寫入。
partial1部分轉換:目標序列 [to,to_limit) 不夠長。
範圍 [to,to_limit) 已被部分結果填滿。可以再次呼叫該函式並提供額外的儲存空間來獲取更多取消移位字元。
error2轉換錯誤:發生了某種未指定錯誤,例如 state 處於無效狀態。
noconv3無轉換:state 的當前狀態不需要取消移位。

資料競爭

訪問 facet 物件。
stateto_next 引數以及 [to,to_limit) 範圍內的所有字元(最多)都會被修改。

異常安全

如果丟擲異常,則 *facet 物件* 不會發生任何更改,儘管目標範圍中的字元和 to_next 可能會受到影響。

另見