為了能修訂 CxxlMan2 程式庫在 Linux 適用性,所以在 VMware 16.2.4 裝了一套 ubuntu-22.04.1-desktop-amd64 來用,但卻不能在 Host 與 Guest 之間複製檔案,上網找了一堆奇形怪招也沒用,浪費不少精神和時間。
後來無意間發現可以把一個 .txt 檔複製進去,才發現原來會阻擋副檔名為 .zip 的複製動作,還真是鳥屎^@#!&
為了能修訂 CxxlMan2 程式庫在 Linux 適用性,所以在 VMware 16.2.4 裝了一套 ubuntu-22.04.1-desktop-amd64 來用,但卻不能在 Host 與 Guest 之間複製檔案,上網找了一堆奇形怪招也沒用,浪費不少精神和時間。
後來無意間發現可以把一個 .txt 檔複製進去,才發現原來會阻擋副檔名為 .zip 的複製動作,還真是鳥屎^@#!&
一直都停留在使用 C++17 的標準,其中一個重要原因是 C++20 對 UTF-8 有了一個明確的型別定義,一些舊有的程式都過不了 C++20 這關,所以就一直攔著。
不過後來發現可以用強制型別指示轉換(type&)這招來破解,這招用在其他地方會很危險,因編譯器會無條件通過轉換,不會給你任何警告訊息。
C++20 對於 UTF-8 提供兩個新東西,一個 char8_t 型別,另一個是 std::u8string 類別,也只有這樣而已。最重要的 STL 完全只能用 char 和 std::string。
轉貼自 自然常數e為什麼這麼重要? - 知乎 (zhihu.com)
為免日後失連,所以在這裡備份一份,並轉為繁體中文。
由於原作是用一般打宇作敍述,沒法表現出數學式,所以這裡用 LaTex 幫忙修訂,但不碓定是否完全正確,所以有錯誤的地方還請不吝指正。
在 C++ 程式編譯之字串 一文中提到在 Console 顯示 wchar_t 字串的方法,但在 Windows 11 + MinGw 8.1.0 已經行不通了。不過現在比較流行用 UTF-8,若有在 Windows 的 Console 顯示 UTF-8 的須求,以下的方法很容易就能逹成
#include <iostream> #include <Windows.h> using namespace std; int main(int, char**) { // Set console code page to UTF-8 so console known how to interpret string data SetConsoleOutputCP(CP_UTF8); // Enable buffering to prevent VS from chopping up UTF-8 byte sequences setvbuf(stdout, nullptr, _IOFBF, 1000); const char *str = u8"你好 こんにちは 안녕하십니까"; cout << "str = " << str << endl; return 0; }