В следующем примере я считаю, что при вызове функции Struct::new
ее тело будет встроено (скопировано) на сайт вызова из-за атрибута #[inline]
. Это приведет к увеличению объема генерируемого кода и уменьшению времени компиляции, но улучшит производительность во время выполнения из-за исключенного вызова функции.
impl Struct {
#[inline]
pub fn new() -> Self {
// initialization code
}
}
В настоящее время const fn
стабильны в Rust. Когда кто-то объявляет функцию как const
, он должен позволить компилятору оценить ее во время компиляции.
impl Struct {
pub const fn new() -> Self {
// initialization code
}
}
Означает ли объявление функции как const
и пропуск атрибута #[inline]
те же компромиссы, что и код в предыдущем примере (поскольку функция оценивается во время компиляции и ее результат "встроен" в колл-сайт)? Должны ли мы заменить все атрибуты #[inline]
на const
? Если они не одинаковы, в чем различия?