LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

В какой половине, ты о чём?

Там точно также как в С++ с выводом типов у функций:

auto deduce_int(bool cond) // внезапно компилятор вывел int
{
    if (cond)
    {
        return 1;
    }
    else
    {
        return deduce_int(!cond);
    }
}

Просто вначале компилятор присваивает тип T, потом идёт вниз, если на какой-то строчке он видит что требуется конкретный тип, а не тип T, то тогда компилятор запоминает конкретный тип, а затем идёт дальше вниз по функции и если где-то видит, что требуется другой тип то кидает ошибку компиляции.

В С++ такой же вывод типов. В этих других языках, его расширили для контейнеров просто потому что там нет неявных преобразований.

В С++ можно сделать всё тоже самое компилятор позволяет, просто решили что не нужно ломать неявные преобразования типов.

Как говорят Rust фанатики, это их выбор, а не немощь компилятора.

Исправление fsb4000, :

В какой половине, ты о чём?

Там точно также как в С++ с выводом типов у функций:

auto auto_cant_deduce(bool cond) // внезапно компилятор вывел int
{
    if (cond)
    {
        return 1;
    }
    else
    {
        return auto_cant_deduce(!cond);
    }
}

Просто вначале компилятор присваивает тип T, потом идёт вниз, если на какой-то строчке он видит что требуется конкретный тип, а не тип T, то тогда компилятор запоминает конкретный тип, а затем идёт дальше вниз по функции и если где-то видит, что требуется другой тип то кидает ошибку компиляции.

В С++ такой же вывод типов. В этих других языках, его расширили для контейнеров просто потому что там нет неявных преобразований.

В С++ можно сделать всё тоже самое компилятор позволяет, просто решили что не нужно ломать неявные преобразования типов.

Как говорят Rust фанатики, это их выбор, а не немощь компилятора.

Исходная версия fsb4000, :

В какой половине, ты о чём?

Там точно также как в С++ с выводом типов у функций:

auto auto_cant_deduce(bool cond) // внезапно компилятор вывел int
{
    if (cond)
    {
        return 1;
    }
    else
    {
        return auto_cant_deduce(!cond);
    }
}

Просто вначале компилятор присваивает тип T, потом идёт вниз, если на какой-то строчке он видит что требуется конкретный тип, а не тип С, то тогда компилятор запоминает конкретный тип, а затем идёт дальше вниз по функции и если где-то видит, что требуется другой тип то кидает ошибку компиляции.

В С++ такой же вывод типов. В этих других языках, его расширили для контейнеров просто потому что там нет неявных преобразований.

В С++ можно сделать всё тоже самое компилятор позволяет, просто решили что не нужно ломать неявные преобразования типов.

Как говорят Rust фанатики, это их выбор, а не немощь компилятора.