Здравствуйте, tapatoon, Вы писали:
S>>Нет поддержки деревьев выражений компилятором, как в C# — а это очень удобно.
T>Компиляторы начались на 3-м курсе, а весь 3й курс мы пробухали, поэтому тут сказать не имею)
И правильно, все-равно этого вам не рассказывали. Вот простой пример возможностей C#:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
// Компилятор автоматически преобразует лямбда-выражение в дерево выражений
Expression<Func<int, int, int>> expression = (x, y) => x * y + 10;
// Анализируем дерево
Console.WriteLine("Структура дерева выражений:");
Console.WriteLine(expression);
// Компилируем дерево в делегат
var compiled = expression.Compile();
// Выполняем компилированное выражение
int result = compiled(3, 4); // 3 * 4 + 10 = 22
Console.WriteLine($"Результат выполнения: {result}");
}
}
На C++ вы никогда ничего подобного не сделаете. Это позволяет писать выражения на C# любой сложности (в т.ч. вызов функций и т.д.) с проверкой компил-тайм, а затем оптимизированно преобразовывать их, к примеру, в SQL-код (с множеством оптимизаций, а не плоско).