データ型

スポンサーリンク

bool 型

C++ では論理型である bool 型が導入されました。
bool 型のリテラルは,真を表す true と,偽を表す false です。

int main()
{
    bool b = true;
    if (b) { ... }

    int c = 1;
    if (c) { ... }

    return 0;
}

C と同様に,値が 0 であるか否かによって真偽を表現することもできます。

string 型

文字列を便利に扱うためのラッパーとして,string 型が導入されました。
string 型を利用する際は,ヘッダファイル string をインクルードする必要があります。

#include <iostream>
#include <string>

int main()
{
    std::string s("abc");
    std::string t("def");

    std::cout << s << std::endl;           // 出力: abc
    std::cout << s + t << std::endl;       // 出力: abcdef
    std::cout << s[2] << std::endl;        // 出力: c
    std::cout << s.length() << std::endl;  // 出力: 3

    return 0;
}

string 型には,次の演算子が定義されています。

[]  +  ==  !=  >  <  >=  <=  =  +=

従来からの文字列型 const char* と string 型との間に互換性はありません。
文字列リテラルは const char* 型であるため,"abc" + "def" のような式は無効です。

構造体の型名

C で構造体を struct Hoge { ... }; と定義したとき,この構造体の型名は struct Hoge でした。
C++ で同様の構造体を定義したとき,struct Hoge の他に,単なる Hoge がこの構造体の型名として利用できます。

const 修飾子

const 修飾された型の変数は,代入による値の変更が禁止されます。

const int n = 123;
n = 456;            // 不可

C++ では const 値はコンパイル時定数として扱われるため,const 整数は配列の要素数指定に使えます。
(クラスのメンバ変数の場合は static const とすることでコンパイル時定数扱いになります。)

const int size = 32;
double arr[size];

参照

引数を参照渡しする際,C ではポインタを利用していましたが,C++ では参照 (reference) という機能が利用できます。

次のプログラムは,参照を用いて swap 関数を定義した例です。

void swap(int& a, int& b)
{
    int temp = a;
    a = b;
    b = temp;
}

int main()
{
    int a = 2;
    int b = 3;
    swap(a, b);
    return 0;
}

参照型の型名は,被参照型名 & と書かれます。
参照を利用するに当たって,アドレス演算子 & や間接参照演算子 * は必要ありません。
構造体等のメンバアクセスも,p->x と書く必要はなく,単に r.x と書けます。

参照の割当ては初期化時のみに行われ,参照の割当てを変更する手段はありません。

int& r = a;  // r は a を参照する
int& s;      // 不可 (初期化子がない)

実行時型情報

typeid 演算子は,オペランドのデータ型をプログラム実行時に判別し,その型情報 (RTTI, runtime type information) を提供します。
評価結果は const& type_info 型なので,ヘッダ typeinfo のインクルードが必要です。

#include <typeinfo>

int main()
{
    std::cout << (typeid(1234) == typeid(int)) << std::endl;  // 出力: 1
    std::cout << (typeid(3.14) == typeid(int)) << std::endl;  // 出力: 0
    return 0;
}
スポンサーリンク