読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

発掘 volatile メンバ関数

プログラム C++

昨日自分のデスクトップPCを漁ってたら、昔作ったテストプログラムが出てきたので載せてみる。
一風変わったサンプルになってると思います。


C++メンバ関数は通常のインスタンス用の他にconstオブジェクト用のメンバ関数を作ることができる。

実はconst以外にもvolatileとconst volatileも専用のメンバ関数を作ることができる。


サンプルソース
#使用は自己責任で!

#include <iostream>

struct Test
{
    // 通常のメンバ関数
    void func()
    {
        std::cout << "void Test::func()" << std::endl;
    }

    // constメンバ関数
    void func() const
    {
        std::cout << "void Test::func() const" << std::endl;
    }

    // volatileメンバ関数
    void func() volatile
    {
        std::cout << "void Test::func() volatile" << std::endl;
    }

    // const volatileメンバ関数
    void func() const volatile
    {
        std::cout << "void Test::func() const volatile" << std::endl;
    }
};

void main()
{
    Test t1;
    t1.func();

    const Test t2;
    t2.func();

    volatile Test t3;
    t3.func();

    const volatile Test t4;
    t4.func();
}
// EOF


出力例

void Test::func()
void Test::func() const
void Test::func() volatile
void Test::func() const volatile


オブジェクトの種類によって呼び出されるメンバ関数が変わってくる。

変わってくるが、volatileのオブジェクトを作るパターンがそうそう無いと思うので参考までに。。。
volatileはともかくconst volatileなんで、外部で書き換わる可能性のある読み込み専用オブジェクトでしょ?
CPUの読み込み専用ポートとかじゃないと使わないんじゃないのって思います^^;