- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace nonopt
{
class Program
{
static void Main(string[] args)
{
string h = "h";
string e = "e";
string l1 = "l";
string l2 = "l";
string o1 = "o";
string he = h + e;
string ll = l1 + l2;
string hell = he + ll;
string hello = hell + o1;
string w = "w";
string o2 = "o";
string r = "r";
string l3 = "l";
string d = "d";
string wo = w + o2;
string rl = r + l3;
string worl = wo + rl;
string world = worl + d;
string empty = " ";
Console.WriteLine(hello + empty + world);
Console.ReadKey();
}
}
}
Fike 10.01.2015 20:40 # 0
bormand 10.01.2015 20:41 # +6
Привет, пустой мир.
pewppy 10.01.2015 20:41 # +1
pushistayapodmyshka 10.01.2015 20:50 # +6
pushistayapodmyshka 10.01.2015 20:59 # +4
gost 11.01.2015 19:10 # +1
DesmondHume 10.01.2015 21:02 # +3
Qwertiy 11.01.2015 03:52 # +6
Декомпилируем:
Тот случай, когда декомпилированный код понятнее :D
1024-- 11.01.2015 13:12 # 0
или сразу подстановка в Console.WriteLine.
Или в дебаг-версии важен порядок вычисления и заполнения строками каких-нибудь кэшей?
bormand 11.01.2015 13:15 # +2
Qwertiy 11.01.2015 13:22 # 0
Я вообще-то тоже такого ожидал, но тут всё-таки переменные складываются, а не константы.
Как вариант, компилятор заводит по переменной на строку в любом случае, а декомпилятор даже не мог подумать, что это можно сделать намеренно.
По крайней мере, сложение константных строк в VB.NET точно сворачивается в одну строку. В шарпе бы тоже должно.
UPDATE: Хотя нет, в итоговом коде операции сложения идут не в том порядке, в каком в оригинальном. Где-то тут какая-то магия.
> Или в дебаг-версии важен порядок вычисления и заполнения строками каких-нибудь кэшей?
Возможно. Вообще, я хотел не debug, но сейчас вижу, что я передал фигню /debug /debug-, так что не знаю, как это обработалось. В любом случае, оптимизации включены следующим флагом (они независимы).