![](/img/trans.png)
[英]Interface designs of std::basic_fstream and std::unique_lock
[英]std::basic_fstream::put() has no effect
我有以下代碼:
#include <iostream>
#include <fstream>
int main(int argc, char *argv[]) {
if (argc != 2) {
std::cout << "Usage: basics <file>" << std::endl;
return 0;
}
std::basic_fstream<unsigned char> stream;
stream.open(argv[1], std::fstream::out);
stream.put('T');
stream.put('E');
stream.put('S');
stream.put('T');
stream.flush();
stream.close();
return 0;
}
正在創建文件,但當我在編輯器中打開它時,里面沒有任何內容。 我的編譯器是gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
。
它出什么問題了?
與格式化輸出函數不同,如果輸出失敗,此函數不會設置failbit。
即使您檢查流狀態,也不會顯示任何錯誤。 但是,如果您嘗試使用格式化的輸出操作編寫某些內容,則會拋出std::bad_cast
異常,因為在可能的原因中,沒有與該語言環境對應的方面,該操作完成后將對其進行檢查。
原始操作不關心本地化,因此它不會因為這個原因而失敗,而如果原始寫入失敗則會失敗。
例外
std :: bad_cast if std :: has_facet(loc)== false。
實際上, std::ctype
專門用於char
和wchar_t
而不是unsigned char
,你必須手動完成。 對於en_GB.utf8
, std::has_facet<std::ctype<unsigned char>>( std::locale("en_GB.utf8") ) == false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.