2023年8月5日 (土曜日)

09:23:10 # Life C++の文字列定数について。なんか結構不思議な挙動をするのに気づいた。 constexpr char buf1[]はなんとわざわざ文字列をスタックにコピーしてくれるらしい。そういう挙動を期待していなかったのでちょっとおどろいた。 staticつけたら期待した定数的な動きをしてくれたのでまぁそれでよいんだが。constexprで生成した文字列のコピーはスタックに存在して変更可能、ということなんだと思うけど コンパイラの挙動を見る限りではアドレスはあってそれを書き換えられるけどなんかその値を参照していないように見える。

  	  constexpr char kBuf[] = "in .rodata";
	  func() {
  	    constexpr char buf1[] = "copied to stack";
  	    static constexpr char buf2[] = "in .rodata";
	  }
	
Junichi Uekawa