コンテンツにスキップ

6. 基本的なデータ型

Siv3D プログラムで使用する基本的なデータ型について学びます。

6.1 基本的な数値型

Siv3D の基本的な数値型は次のとおりです。よく使う重要なものに ★ を付けています。

型名 説明
bool ★ ブーリアン型(false または true
int8 符号付き 8-bit 整数型(-128 ~ 127)
uint8 符号無し 8-bit 整数型(0 ~ 255)
int16 符号付き 16-bit 整数型(-32,768 ~ 32,767)
uint16 符号無し 16-bit 整数型(0 ~ 65,535)
int32 ★ 符号付き 32-bit 整数型(-2,147,483,648 ~ 2,147,483,647)
uint32 符号無し 32-bit 整数型(0 ~ 4,294,967,295)
int64 符号付き 64-bit 整数型(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
uint64 符号無し 64-bit 整数型(0 ~ 18,446,744,073,709,551,615)
float 単精度浮動小数点数型
double ★ 倍精度浮動小数点数型
size_t ★ オブジェクトのサイズを表現する符号無し 64-bit 整数型(0 ~ 18,446,744,073,709,551,615)

Siv3D で整数を扱うときは、int, unsigned long long のような型名の代わりに、int32, uint64 のように明示的にサイズを表現した型名を使います。これにより、プラットフォーム間での移植性が高まり、一貫性のある読みやすいコードになります。

# include <Siv3D.hpp>

void Main()
{
	bool a = true;

	int32 b = 123;

	double c = 0.5;

	size_t d = 100;

	Print << U"a: " << a;

	Print << U"b: " << b;

	Print << U"c: " << c;

	Print << U"d: " << d;

	while (System::Update())
	{

	}
}
Siv3D で float 型を使う場面は限られる

実行環境のメモリや演算のリソースが限られるゲーム開発においては、浮動小数点数処理に float 型を使うことが一般的です。Siv3D もグラフィックスや並列処理に関連する内部処理では float 型を使うほか、シェーダの定数バッファ、行列、クォータニオン、FFT の結果など、ユーザの使う API にも float 型が登場することがあります。

一方で、Siv3D は精度が要求されるシミュレーションや科学技術計算で使われることも想定しているため、主要なクラスや関数は double 型を扱い、描画など精度が要求されない処理に関しては内部で float 型を用いるハイブリッド方式になっています。double 型は精度に関連した問題が生じにくく、コードの読みやすさも向上し、一般的なアプリケーションプログラムであれば実行速度への影響もほとんどありません。

6.2 文字と文字列の基本的な型

Siv3D の文字と文字列の基本的な型は次のとおりです。重要なものに ★ を付けています。

型名 説明
char32 ★ UTF-32 の 1 要素(char32_t の別名)
String ★ 文字列クラス。要素は char32
StringView 文字列のビュークラス
FilePath ★ ファイルパス文字列(String の別名)
FilePathView ファイルパス文字列のビュー(StringView の別名)

Siv3D の API は、文字列を UTF-32 で処理するため、std::string の代わりに String を使います。詳しくは 文字列クラス で扱います。

FilePathString の型エイリアスでどちらも同じ型ですが、プログラムでファイルパス文字列を扱う際に String の代わりに FilePath を用いることで、変数の目的を明確にできます。

# include <Siv3D.hpp>

void Main()
{
	char32 a = U'A';

	String b = U"Hello";

	FilePath c = U"example/windmill.png";

	Print << U"a: " << a;

	Print << U"b: " << b;

	Print << U"c: " << c;

	while (System::Update())
	{

	}
}

6.3 基本的なデータ構造の型

Siv3D の基本的なデータ構造の型は次のとおりです。重要なものに ★ を付けています。

型名 説明
Array<Type, Allocator> ★ 動的配列(C++ 標準ライブラリの std::vector の置き換え)
Grid<Type, Allocator> 動的な二次元配列
HashSet<Type, Hash, Eq, Alloc> ハッシュテーブルによる Set(C++ 標準ライブラリの std::unordered_set の置き換え)
HashTable<Key, Value, Hash, Eq, Alloc> ハッシュテーブルによる Map(C++ 標準ライブラリの std::unordered_map の置き換え)
Optional<Type> ★ 無効値を表現できる型(C++ 標準ライブラリの std::optional の置き換え)
std::array<Type, size_t> 固定長配列

Array は、C++ 標準ライブラリの std::vector の置き換えです。std::vector と同様に、動的に要素を追加・削除できます。処理コストは std::vector と同等です。詳しくは 動的配列 で扱います。

Optional は、値が存在するかしないかを表現できる型です。std::optional と同様に、none という無効値を表現する値を持ちます。詳しくは 無効値を表現できる型 で扱います。

# include <Siv3D.hpp>

void Main()
{
	Array<int32> a = { 10, 20, 50, 100 };

	Optional<double> b;

	Print << U"a: " << a;

	Print << U"b: " << b;

	b = 12.3;

	Print << U"b: " << b;

	while (System::Update())
	{

	}
}

振り返りチェックリスト

  • Siv3D の基本的な数値型、bool, int32, double, size_t を理解した
  • Siv3D の基本的な文字型、char32 を理解した
  • Siv3D の基本的な文字列型、String, FilePath を理解した
  • Siv3D の基本的なデータ構造型、Array, Optional を理解した