可以推断大小范围吗?

问题描述 投票:0回答:1

通用类型参数是隐式调整大小的,因为这通常是您想要的,但如果您不需要它,则必须显式选择退出(通过

: ?Sized
)。编译器是否有可能(并且有意义)自动确定给定的泛型类型是否必须调整大小,而不需要手动注释?

// T is arg so Sized, also T is ret-val so Sized
fn fn_with_sized_type<T>(x: T) -> T { ... } 

// T is always behind a &, so need not be Sized
fn fn_with_unsized_type<T>(x: &T) -> &T { ... } 
rust type-inference
1个回答
0
投票

仅仅因为某些东西位于引用后面并不意味着它总是允许调整大小,请考虑以下事项:

pub fn swap<T>(x: &mut T, y: &mut T)

您无法为未调整大小的类型实现此函数,因此推断机制必须检查您是否正在执行需要

Sized
到引用后面的元素的操作。这违反了 Rust 的指导原则,即函数签名不依赖于函数体。

© www.soinside.com 2019 - 2024. All rights reserved.