2022年10月23日 星期日

C++20 UTF-8 的轉換

 一直都停留在使用 C++17 的標準,其中一個重要原因是 C++20 對 UTF-8 有了一個明確的型別定義,一些舊有的程式都過不了 C++20 這關,所以就一直攔著。

不過後來發現可以用強制型別指示轉換(type&)這招來破解,這招用在其他地方會很危險,因編譯器會無條件通過轉換,不會給你任何警告訊息。

C++20 對於 UTF-8 提供兩個新東西,一個 char8_t 型別,另一個是 std::u8string 類別,也只有這樣而已。最重要的 STL 完全只能用 char 和 std::string。

2022年10月4日 星期二

2022年7月31日 星期日

2022年2月13日 星期日

[轉貼] 自然常數 e 為什麼這麼重要?

 轉貼自 自然常數e為什麼這麼重要? - 知乎 (zhihu.com)

為免日後失連,所以在這裡備份一份,並轉為繁體中文。

由於原作是用一般打宇作敍述,沒法表現出數學式,所以這裡用 LaTex 幫忙修訂,但不碓定是否完全正確,所以有錯誤的地方還請不吝指正。


2021年12月10日 星期五

建置 VScode 的 C++ 開發環境

 VScode 進化非常神速,就 C++ 而言搭配 CMake 延伸模組的支援,以往那些麻煩的設定可以拋諸腦後了。

首先到 CMake 下載並安裝最新版的 CMake。

再去抓最新版的 MinGW ,我抓的是 x86_64-posix-seh,解壓到 C:\x86_64-8.1.0-release-posix-seh-rt_v6-rev0,並將 C:\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin 設定到環境變數 PATH,這點是必須的,因 VScode 會去找編譯器。

2021年10月19日 星期二

在 Windows 的 Console 顯示 utf-8

在 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;
}