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]——注意这里没有&amp;

一个内置的实现利用了它:

impl<T> BorrowMut<[T]> for Vec<T>

作为Matthieu M. adds:

这是一个加宽边界的例子;一般来说,边界会施加更多约束,但在Sized 的情况下,除非另有说明,否则将假定通用TSized。注意相反的方法是将其标记为?Sized(“也许Sized”)。

【讨论】:

具体来说:这是一个加宽边界的情况;一般来说,界限会施加 更多 约束,但在 Sized 的情况下,除非另有说明,否则将假定通用 TSized 并且注意它的方式是标记它?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是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 插件中传递参数是啥意思?

模板参数中的“typename =”是啥意思?

“输入参数过多”是啥意思?

在 Python 类参数中添加一个点是啥意思?

params 是啥意思,c#里

$var?中bash变量参数扩展中的问号是啥意思?