История изменений
Исправление 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 фанатики, это их выбор, а не немощь компилятора.