中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

Stringの+はちょっと賢い

string a = "A" + "B";

ってどうなると思います?

ildasmでMSILにすると

string a = "AB";

になっています。

コンパイラもちょっとは賢いですね。(^^

だから、Staticな文字列を連結するだけなら、StringBuilderは不要ってこってす。

ご自身でご確認を・・・

投稿日時 : 2004年12月15日 22:11

コメントを追加

# re: Stringの+はちょっと賢い 2004/12/15 23:19 石坂@日本ベーレー

文字列だけではなく、たいていの数値型も同様です。
まぁあたりまえですけど。
この辺は最適化オプション云々以前のようですね。

# re: Stringの+はちょっと賢い 2004/12/15 23:25 中 博俊

なんでしょうねぇ。(^^;;;
今までのアセンブリコードだとここまで検証しなかったし。
MSILだからみてるってかんじですね。(^^

# re: Stringの+はちょっと賢い 2004/12/16 10:12 tatsugoro

これ、ちょっと気になってました。
ためになりました。

# re: Stringの+はちょっと賢い 2004/12/16 10:14 青柳 臣一

> 今までのアセンブリコードだとここまで検証しなかったし。

C++ でも見てあげてくださいよぉ(笑)
結構がんばってるんですからw

たとえばこんなの。
C++ template はコンパイル時解決なので、
template<int N> struct SUM {
enum { X = N + SUM<N - 1>::X };
};
template<> struct SUM<0> {
enum { X = 0 };
};
int _tmain(int argc, _TCHAR* argv[])
{
int sum = SUM<5>::X;
return 0;
}
なんてのも、たとえ最適化無しのデバッグビルドでも
mov dword ptr [sum],0Fh
だけになっちゃいます。
( SUM<5>::X を展開すると 5+4+3+2+1+0 になりますから当然といえば当然ですが)

# re: Stringの+はちょっと賢い 2004/12/16 11:01 じゃんぬねっと

なるぽど、奥が深いなぁ...。
そういうところまで、頭が回るようにします。

# re: Stringの+はちょっと賢い 2004/12/17 14:57 ya

これ確かCぐらいから仕様じゃなかったかな?(計算できる式は結合)
仕様じゃないと

BYTE buf[ 640*480 ];

みたいなのが許可されなくなってしまうので。C#では確かに気にする必要のない(なくなった)ことなんだけど。

# re: Stringの+はちょっと賢い 2004/12/17 15:00 中 博俊

数字はわかるけど、文字列もしてたんですねぇ。
C#では仕様だかどうだかは不明です。暇なら調べます。

# re: Stringの+はちょっと賢い 2004/12/17 15:05 ya

わ。上の
private const string Bar = "aaa" + "bbb" + "ccc";
です。

タイトル
名前
URL
コメント