PeterMemo

主にC++,OpenGL,Siv3Dのプログラミング関連の内容です.

C++ バイト先で学んだこと-1

この記事はC言語からC++に移りつつある人向けです。

今回からバイト先で学んだことを自分用兼見てくれる誰か用に書き起こしていきます。

バイトは中小企業でコーディングをしていて、現代的で実用的なC++を少しずつ教わったり勉強したりしてます。そんなわけで学んだことを箇条書きしていきます。

・変数を受けるときは auto を使う!
autoは受ける変数の型を勝手にコピーしてくれるものです。初期化が保証されるという利点があるためなるべくautoで受けたほうがいいらしいです。

MyClass obj;
auto tmp = obj;
auto mcp = std::make_shared<MyClass>();

・キャスト
C言語チックな(int)みたいな書き方しないでstatic_castを使う!

std::vector<MyClass> mvec;
double d = static_cast<double>(mvec.size());
//ほんとはここもautoの方がいい?
auto s = static_cast<double>(mvec.size());

・i++ なのか ++i なのか問題
結論から言うと++i。
これはiがただのintなら関係ないけどイテレータとかだとiter++より++iterの方が速い。そんなわけで統一感出すため?に++i

for(int i = 0; i < 5; ++i){

}

・スコープは短く!
一つの関数の中でも、できるだけ変数のスコープは短くする。
例えば単純な例だと

int Func(){
    int tmp = 0;
    int i = 1;
    tmp += i;
    return tmp;
}

よりも

int Func(){
    int tmp = 0;
    {
        int i = 1;
        tmp += i;
    }
    return tmp;
}

の方がint iが無駄に居座り続けない。

・#define NUMBER 5 みたいな書き方しない!
いろいろ問題があるので定数ならconst int 、0から順番ならenumを使う。#defineだと良くない挙動が起きたりする。マクロとかも上手く使えばいいけど下手に書くと意図しない挙動をするかも...

#define MAX(x, y) ((x) > (y) ? (x) : (y))

int a = 1;
int b = 2;
MAX(++a, --b);//->((++a) > (--b) ? (++a) : (--b))になっちゃう

こんな感じで箇条書き形式で学んだことをメモしていきます。