その”static”に意味はあるのか

2016年5月24日 0 投稿者: khws4v1

staticという単語をつけて変数を宣言すると、関数を抜けても値が保持される。
よくこういう説明を初心者は受けることになる。
実際にそういう説明だった。

 

しかし、偶然にもこのような使い方をしてしまっているのを発見してしまった。
お前、毎回100を代入してるから意味無いじゃん。
何故こんなことをやってしまったのかさっぱり分からないが、もしかしたら意味があるかもしれないので、考える前に手を動かすことにした。

この2つのコードを

でコンパイルして、出力された実行時間を計測した。

static non-static
1 338 367
2 346 357
3 335 371
4 332 369
5 349 390
6 359 349
7 354 356
8 315 339
9 353 335
10 353 329
平均 343.4 356.2

あまり変わらないので、とりあえず何にでもstaticをつけるのはクソということだ。
まーた間違ったことを学生に教えてるのかけしからんな。

 

また、なんかこんなことがプリントに書いてあった。
文字列を変えないのでconst char*でやれという感じだが、こちらも計測。

char[] static char[] const char* static const char*
1 1513 270 278 287
2 1573 286 279 292
3 1561 274 263 278
4 1547 268 269 277
5 1634 279 271 280
6 1551 269 273 275
7 1566 263 284 270
8 1583 265 285 272
9 1586 263 271 277
10 1583 258 160 272
平均 1569.7 269.5 263.3 278

毎回バーボンハウスのコピーが行われるchar[]は激遅だが、ポインタを使うコードとでは速度は変わらない。

そもそもstaticつけた時点で、文字列を変えると2回目以降の実行結果に影響する。
文字列の内容を変更しないのであれば、const char*で文字列リテラルへのポインタを取るのが一般的だし、なぜこんな変なことを学生に教えてるのかやっぱり分からない。