1樓:cqwrteur
用我的fast_io庫
C++ 流淘汰了, OOP淘汰了。fmt,charconv,C++23網路一類的都是淘汰貨。現在流行fast_io和C with Concepts!!!
記住。C++所有與流和locale相關的都是執行緒不安全的。locale有害。
#include
"../../include/fast_io_locale/iconv.h"
#include
"../../include/fast_io.h"
intmain
(int
argc
,char
**argv
)try
autot0;
std::
size_t
transmitted
{};println(u8
"UTF8 => GB18030 code cvt (with POSIX iconv system) success!
\nTransmitted:"
,transmitted,u8
" bytes
\nElapsed Time:"
,std
::chrono
::high_resolution_clock
::now()-
t0);
}catch
(std
::exception
const&e
)過段時間我會專門寫乙個GBK和UTF互轉的東西。現在只有用iconv了。不過UTF8-UTF16,UTF32都是用的SSE指令+自動機。
2樓:王扶之
幾個派生類棄用了,但std::codecvt 本身還可以用。
既然是 gbk,預設使用 Windows,總結一下幾類標準方法。(mingw w64 就不要想了, locale 只支援 "", "POSIX", "C"。)
首先 C 的 wcsrtombs, mbsrtowcs 這類方法表現不正常,而且動全域性 locale 影響較大,建議不要使用。
std:codecvt的特化,std::codecvt跟std::codecvt_byname都可以用,當然直接轉沒辦法,需要用寬字符集中轉一下。
首先轉 wchar_t,有兩種辦法
codecvt 析構函式沒法訪問,繼承之後再用,如
template
CodecvtFacet >struct valid_codecvt :CodecvtFacet ~valid_codecvt (){} };valid_codecvt codecvt_byname >converter ;char gbk_str ="......" ;std ::mbstate_t mb{}; wchar_t wstr [buf_size ];const char *from_next ;wchar_t *to_next ;converter.in (mb,gbk ,gbk +src_size ,from_next ,wstr ,wstr +buf_size ,to_next);* to_next=L '\0' ;2. imbuess. imbue (std ::locale(ss .getloc (),new std:: codecvt_byname ,char ,std ::mbstate_t >("zh_CN.gbk" ))); 然後 wchar_t 轉 utf8,同樣的方法使用std::codecvt,linux 第乙個模板形參用 char32_t,C++20 第二個模板形參用 char8_t。 另外,C++ 17 有乙個歪門邪道 usingfs= filesystem ;string gbk_str;fs ::path path ;u8string utf_str =path .u8string(); 3樓:XZiar 用ICU,跨平台的。 site.icu-project.org/windows現在都自帶ICU了。 或者如果你不想依賴第三方庫的話,把那幾個deprecated的warning給關掉咯。 (實在想不開的,自己寫乙份質量更差的) 不知道為啥這麼多人反對。雖然。有些複雜不直觀。而且功能不強大,還完全可以通過其他方式代替,同時其他方式的實現還可以完成更多的功能。但是至少這種方法寫起來稍微。短那麼一些。 原子筆 C 標準委員會,只需引入乙個別的指令碼語言,放預處理後編譯期前去解釋執行,就可以簡單解決這些各種問題 巨集的功能太弱,但... 努力保持清醒的 最近一向有關TIOBE 程式設計言語排行榜,C 好像不進反退,不知為什麼會是這樣呢。話說C 寫起來感覺很不錯嘛,不知我們什麼感覺。turbo c 是老古董了,是DOS時代的C言語編譯器。Visual c 主要是用來編譯c 的,當然對c言語也是相容的。不過個人主張不要用Visual c... nouness 我猜上面說asio效能爛的都是使用姿勢問題 如果你是單個io service配合多執行緒使用的,那恭喜你,效能和併發上不去是正常的,io service裡有個鎖,是這個東東導致單個io service併發無法隨著執行緒增加而增加 高併發的使用姿勢是多個io service配合多執行緒...如何評價C 17中的新特性fold expression?
C 17 有哪些值得注意的新特性?
怎麼看待 C 17 眾多功能的流產?