より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

C++のメンバ初期化子リスト

Effective C++ 第3版を読んでいたのですが、なかなか味わいのある本です。オススメです。

www.maruzen-publishing.co.jp

ただ、C++に語っているだけではなく、プログラミングについて考えさせられる内容になっています。

一度でもC++を齧ったことのある方には是非オススメしたい本です。

この本を読んでいて、こんなことができたのかーと知ったのが初期化リストです。

例えば以下のソース。

#include <iostream>

class test {
private:
    int a;
    int b;
public:
    void message() {
        std::cout << "a = " << a << ", b = " << b << std::endl;
    }

    test() {
        a = 1;
        b = 2;
    }
};


int main() {
    test* t = new test();
    t->message();
    return 0;
}

のうちの

    test() {
        a = 0;
        b = 0;
    }

のお話です。

C++にはC++11以降では、初期化リストというのがあり、これを用いて初期化するのが望ましいそうです。

#include <iostream>

class test {
private:
    int a;
    int b;
public:
    void message() {
        std::cout << "a = " << a << ", b = " << b << std::endl;
    }

    test() {
        a = int(1);
        b = int(2);
    }
};


int main() {
    test* t = new test();
    t->message();
    return 0;
}

それだけでなく、こんな記法もできるようです。

#include <iostream>

class test {
private:
    int a;
    int b;
public:
    void message() {
        std::cout << "a = " << a << ", b = " << b << std::endl;
    }

    test():a(4),b(5) {
    }
};


int main() {
    test* t = new test();
    t->message();
    return 0;
}

f:id:rimever:20190721220433p:plain

へー。

参考サイト

vivi.dyndns.org

marycore.jp