> -- Peter Almazov писал(а):
> В Visual Studio 2008 для C# так и сделано (для остальных языков просто не знаю).

Народ, остыньте. Проблема инициализации не в том чтобы отследить факт инициализации, а в том, чтобы она была сделана не более одного раза, а это алгоритмически неразрешимо.

То что сделано в C# естьперестраховка, там из-за этого некоторые переменные приходитсяне один разинициализировать (что снижает производительность).

Пример:

Следующий код на C# не скомпилируется:

MyStruct x;
if (!TryInit1(ref x) && !TryInit2(ref x) && !TryInit3(ref x))
{
Init4(ref x);
}

Вместо него придётся написать такой:

MyStruct x;
if (!TryInit1(out x) && !TryInit2(out x) && !TryInit3(out x))
{
Init4(out x);
}

а если переменная объявлена как out то код процедур TryInit1, TryInit2, TryInit3 не скомпилируется пока в ней x не проинициализируют. Таким образом, в C# переменная x будет инициализироваться в этом случае от одного до четырёх раз.