ultoa中参数radix是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ultoa中参数radix是啥意思?相关的知识,希望对你有一定的参考价值。
参考技术A 你好!进制,10就是十进制,16就是十六进制
打字不易,采纳哦! 参考技术B ultoa中参数radix是进制的意思。
函数名:
ultoa
功
能:
进制转换函数--转换一个无符号长整型数为任意进制的字符串
用
法:
char
*ultoa(unsigned
long
value,
char
*string,
int
radix);
头文件:stdlib.h
参数value
要转换的数。String
字符串结果。Radix
value的基数。
说明:ultoa函数把
value转换成一个以空格结尾的radix进制的字符串,并存储在string中(至多33个字节),不执行上溢出检查。radix指出value的基数,radi
必须在2-36的范围内。
问号在类型参数绑定中是啥意思?
【中文标题】问号在类型参数绑定中是啥意思?【英文标题】:What does the question mark mean in a type parameter bound?问号在类型参数绑定中是什么意思? 【发布时间】:2015-05-19 18:40:41 【问题描述】:我找到了std::borrow::BorrowMut
的定义:
pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
Borrowed: ?Sized,
fn borrow_mut(&mut self) -> &mut Borrowed;
Sized
前面的问号在这个类型参数绑定中是什么意思(Borrowed: ?Sized
)?
我咨询过:
The Rust Programming Language¹ 书, The Rust Reference²,还有 What does "Sized is not implemented" mean? 堆栈溢出但没有找到解释。请在您的回答中提供参考。
¹ 尤其参见5.20 Traits 部分² 和6.1.9 Traits部分
【问题讨论】:
【参考方案1】:表示特征是可选的。当前的语法是在DST syntax RFC 中引入的。
我知道的唯一适用于?
的特征是Sized
。
在这个具体的例子中,我们可以为unsized types实现BorrowMut
,比如[T]
——注意这里没有&
!
一个内置的实现利用了它:
impl<T> BorrowMut<[T]> for Vec<T>
作为Matthieu M. adds:
这是一个加宽边界的例子;一般来说,边界会施加更多约束,但在
Sized
的情况下,除非另有说明,否则将假定通用T
为Sized
。注意相反的方法是将其标记为?Sized
(“也许Sized
”)。
【讨论】:
具体来说:这是一个加宽边界的情况;一般来说,界限会施加 更多 约束,但在Sized
的情况下,除非另有说明,否则将假定通用 T
为 Sized
并且注意它的方式是标记它?Sized
(可能是Sized
)。
@MatthieuM。所以!Sized
严格来说不是Sized
,而T
严格来说是Sized
,而?Sized
意味着两者都有?
@GuerlandoOCs:是的。【参考方案2】:
这里有一个基于示例的替代解释,它可能有助于理解这个概念,Shepmaster 和 Matthieu 已经非常准确地解释了这个概念。
假设我们想用 generic 实现这样的 trait:
pub trait MyTrait<T>
fn say_hi(&self) -> String;
impl<T> MyTrait<T> for &T
fn say_hi(&self) -> String
return "Hi!".to_string();
这将允许我们调用say_hi()
对各种类型的引用,例如:
let a = &74; // a reference to a SIZED integer
println!("a: ", a.say_hi());
let b = &[1, 2, 3]; // a reference to a SIZED array
println!("b: ", b.say_hi());
但是,如果我们这样声明一个函数:
fn be_fancy(arr: &[u16])
println!("arr: ", arr.say_hi());
,我们会得到一个编译器错误:
error[E0599]: the method `say_hi` exists for reference `&[u16]`, but its trait bounds were not satisfied
|
| println!("arr: ", arr.say_hi());
| ^^^^^^ method cannot be called on `&[u16]` due to unsatisfied trait bounds
|
note: the following trait bounds were not satisfied because of the requirements of the implementation of `MyTrait<_>` for `_`:
`[u16]: Sized`
可以看出,问题在于我们的 trait 仅针对 Sized
类型的引用实现。 Sized
是一个特殊的 marker 特征,默认为“on”。在大多数情况下这很方便,但有时我们可能希望关闭该“限制”。 ?Sized
基本上是说“类型可能会或可能不会被调整大小”(这与“未调整大小”不同)。
我们的函数be_fancy
期望引用一个未知(在编译时)大小的数组。为了解决这个问题,我们可以简单地将T
(相当于T: Sized
)替换为T: ?Sized
,如下所示:
pub trait MyTrait<T: ?Sized>
fn say_hi(&self) -> String;
impl<T: ?Sized> MyTrait<T> for &T
fn say_hi(&self) -> String
return "Hi yo!".to_string();
【讨论】:
以上是关于ultoa中参数radix是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章