めのん@ひとりプログラミング同好会

このブログはすべてフィクションであり、実在の人物、団体とは一切関係ありません

OpenSiv3Dで使う文字型

こんばんは、めのんです!

ここのところOpenSiv3Dの話題が続いていますが、今回もやはりOpenSiv3Dについてです。

最初にOpenSiv3Dに触れたとき、Visual Studio 2019のプロジェクト テンプレートが自動生成したコードと最小限まで削減したHello, World!のコードの2つを掲載しました。

menonfled.hateblo.jp

そのどちらにも文字列リテラルが登場します。 私はCは以前から結構使い込んでいますので、この文字列リテラルの意味がわかりましたが、多くの場合は所見殺しになるんじゃないかな? と心配しました。

OpenSiv3Dで使う文字列リテラルには

U"Hello, World!"

のように、Uという接頭辞が付いています。 これはchar32_t型の文字列リテラルだということを表しています。

Cのchar32_t型は単なるtypedef名なんですけど、C++のchar32_t型は基本データ型なんですね。 wchar_t型もCではtypedef名ですがC++では基本データ型なので、それと同じですね。

規格上はchar32_t型はUTF-32とは限らないようですけど、実質的にはUTF-32だと考えていいでしょうね。

ちなみに小文字のuで始まる文字列リテラルはchar16_t型の文字列であることを表します。

UTF-32なら、日本語を扱う場合でもほとんどのケースで1文字1要素で表現できますから便利ですよね。 絵文字なんかもBMPに収まっていないものも多いと思いますけど、UTF-32なら問題ありません。

「ほとんどのケース」に当てはまらないのは異体字セレクターを使う場合なんかがそうですね。 顔文字はそれで1文字だというのであれば、それも該当すると思います。

char32_t型を使う場合は標準ライブラリのサポートもいまいちだった気がするので、補完するためのライブラリ関数を自分で実装する必要があるのかもしれませんね。

今回はこれぐらいにしておきたいと思います。

それでは!!