20/11/19 18:08:19.31 fvT6uEqW0.net
>>675
C#のstringはBStrというoffset0にlength、offset4からcharの配列、そのoffset4へのポインタがstringとなる
末尾がnull文字じゃなくても問題ないが基本は末尾にnull文字が入ってるためconst wchar_t*としても扱える
そんなことはどうでもよくてマネージド内で上記の内部バイナリを書き換える方法は一切無いからわざわざアンセーフstringラッパーを作ったんだよ
一見書き換えられてるように見えるstring操作は全て新stringとして生成されてるだけだからな
+連結は長さが変わるから想像できるだろうけど、Substringすらも切り取り参照をしている訳ではなく新たにstringを生成してる(それを解決しうるマネージドな手段としてReadOnlySpanというのも一応あるが)