Namaran

Code daily. Without assist.

2026-08-22

counter.cpp

#include <iostream>

int& counter() {
    static int n = 0;
    return ++n;
}

int main() {
    std::cout << counter() << counter() << counter();
}

これは何を出力するでしょうか?

Answer

123counter()が返しているのはブロックスコープのstatic変数で、これは最初にその宣言を通過したときに一度だけ初期化され、以降の呼び出しでも同じ変数が保持されます。さらにC++17以降、<<のようなオーバーロードされた演算子は左のオペランドの評価(そこに含まれる関数呼び出しも含む)が右のオペランドより先に完了することが保証されているため、3回のcounter()呼び出しは必ず左から右の順に実行されます。