C++におけるgoto文について

これはAmusementCreators AdventCalendar14日の記事です。

C++にはC言語と違ってclassがあるため結構複雑になってる。

goto文が変数の宣言を飛び越える時

危険だし全く推奨されないのだけどgoto文で変数宣言を飛び越えることができる。 つまり以下は合法。

    goto some_label;
    int value;
some_label :

しかしこのようにgoto文で飛び越えれる自動ストレージ*1上の変数には以下のいずれかを満たさなければならない。

  • スカラー型である
  • trivialでdefaultなコンストラクタとtrivialなデストラクタを持つ
  • これらの型がCV修飾された型
  • これらの型の配列型

さらに

  • 初期化子なしで宣言されなければならない

という制限もある。

例を示すと

    goto some_label;
    int x;              // いい
    int x = 0;          // 悪い(初期化子がある)
    Pod obj1;           // いい
    NonPod obj2;        // 悪い(trivialでない)
    static NonPod obj3; // 良い(そもそも自動ストレージに確保されない)
    static NonPod obj4{};  // 良い(初期化子があっても上と同じ理由で)
some_label :

goto文で処理が巻き戻るとき

このような時は宣言を跨がれた変数は破棄される。当然デストラクタも呼ばれる。

some_label :
    SomeClass object;
    goto some_label; // ここでobjectが破棄される

まとめ

そもそもイディオム化した書き方以外でgoto文を使うのはやめよう。

*1:ぶっちゃけスタック領域の事だが規格上はコンパイラはスタック領域として実装する必要はない

AmusementCreators AdventCalendarの開催をいまここに宣言する

これはAmusementCreators AdventCalendar2015の一日目の記事です。

AmusementCreatorsの秋津早苗です。
AdventCalendar初回ということで我らAmusementCreatorsの紹介と一年を振り返っての感想を綴っていこうと思います。

Amusement Creatorsとは

AmusementCreatorsとは筑波大学公認のゲーム制作サークルです。

どんなところか

サークルができた当初は、ゲーム制作サークルというよりは元から自分の同人サークルを持っている人たちが技術を共有する場所だったそうです。
僕が入部した時は硬派な技術者集団といった感じでした(C++erですって言うと先輩に好きなBoostライブラリを聞かれて戸惑いました)が、今年の新歓でリソースを作れる人を求めていた事もあって技術者成分は薄れてきたのかなという感じがします。

活動

毎年サークル内で48時間ゲームジャムや6週間ゲームジャムを行って、その成果物を毎年夏コミと冬コミで発表しています。
今年も3日目東モ40bで参加します。 ただ実は、ここ数年時間の都合で6週間ゲームジャムは開催できてません…
来年こそはしたいですね。

Altseed

AmusementCreatorsの部員やOBなどが集まってAltseedというゲームエンジンを作っています。
C#C++など複数の言語を使ってほとんど同じ書き方で開発でき、僕らのサークルでのプログラミングの教育に使われています。将来的にJavaもサポートされそうです。
良いライブラリなので皆さんも是非使ってみてください。
詳細は http://altseed.github.io/ にて

今年を振り返って

今年は代表が多忙だったということもあり、サークルとしての活動はそれほど多くなかったと感じます。
でも、今年は部員が増えて色々と幅が広がったのでこれからどうなるか楽しみです。

僕個人の話だと、今年は作っているときは面白いと思っていたゲームが完成した数か月後には面白く感じられなくなるという現象が何回も起こったので精進しなきゃなと思います。

最後に

このAdventCalendarは纏められて今年の冬コミC89で頒布される予定です。
もし紙媒体で読みたいという稀有な方がいれば是非AmusementCreatorsのスペースにお越しください。
改めて言いますと3日目東モ40bです。

次の記事はラン君でshadertoyの話です。