< 返回版块

cybertheye 发表于 2024-03-23 14:06

Tags:rust,struct

struct A;          // Concrete type `A`.
struct S(A);       // Concrete type `S`.
struct SGen<T>(T); // Generic type `SGen`.

fn reg_fn(_s: S) {}

fn gen_spec_t(_s: SGen<A>) {}

fn gen_spec_i32(_s: SGen<i32>) {}

fn generic<T>(_s: SGen<T>) {}

fn main() {
    // Using the non-generic functions
    reg_fn(S(A));          // Concrete type.
    gen_spec_t(SGen(A));   // Implicitly specified type parameter `A`.
    gen_spec_i32(SGen(6)); // Implicitly specified type parameter `i32`.

    // Explicitly specified type parameter `char` to `generic()`.
    generic::<char>(SGen('a'));

    // Implicitly specified type parameter `char` to `generic()`.
    generic(SGen('c'));
}

这段代码里面main函数中的reg_fn(S(A))中的S(A) 是一个值?当作实参传入?

A是一个单元结构体,是可以直接当值用的是吗?

也就是

let a = A;
let b = S(a);

let b = S(A);

是一样的是吧?

let a1 = A;
let a2 = A;

a1,a2应该是一样的吧

评论区

写评论
asuper 2024-03-25 16:51
let a1 = A;
let a2 = A;

从内容的角度,你可以认为他们“相等”,但在内存上,他们是栈上两个不同位置的变量,不是同一个

liusen-adalab 2024-03-25 10:25

let a = A; 可以写成 let a = A {}; 这样就好理解了

作者 cybertheye 2024-03-23 17:54

A unit-like struct is a struct without any fields, defined by leaving off the list of fields entirely. Such a struct implicitly defines a constant of its type with the same name

--
👇
dakai-chen: 类型怎么声明就怎么创建,单元结构体类型名就可以直接创建出一个变量。

作者 cybertheye 2024-03-23 14:39

也就是类型名可以直接当值用是这个意思吧

--
👇
dakai-chen: 类型怎么声明就怎么创建,单元结构体类型名就可以直接创建出一个变量。

dakai-chen 2024-03-23 14:27

类型怎么声明就怎么创建,单元结构体类型名就可以直接创建出一个变量。

1 共 5 条评论, 1 页