- 主题:闭包move声明后,域外的变量仍然可以访问和修改,是否闭包的规
你是问为啥基础类型自动实现Copy而字符串不实现Copy吗?
因为“传引用”,“移动所有权”这些操作在底层实现时其实是传递指针,64位程序里一个指针是8字节,基础类型大小是小于等于8字节的,所以不如直接copy了事,不会影响性能。
而字符串则没有这个特性,而且拷贝字符串可能是很影响性能的。
【 在 zhangxp024 的大作中提到: 】
: 那为什么编译器要这么做呢?而不是反过来?
: AI给我的copy trait的解释:
: 在Rust中,Copy trait 是一个标记 trait(marker trait),用于指示类型可以通过简单的位复制(bitwise copy)来复制值。当一个类型实现了 Copy trait 时,它的值在赋值、函数参数传递或返回时会自动进行拷贝,而不是移动所有权。
: ...................
--
FROM 116.237.127.*
I get it. Thanks!
【 在 RunningOn 的大作中提到: 】
: 你是问为啥基础类型自动实现Copy而字符串不实现Copy吗?
: 因为“传引用”,“移动所有权”这些操作在底层实现时其实是传递指针,64位程序里一个指针是8字节,基础类型大小是小于等于8字节的,所以不如直接copy了事,不会影响性能。
: 而字符串则没有这个特性,而且拷贝字符串可能是很影响性能的。
: ...................
--
FROM 36.7.226.*
小尺寸的PoD类型传值,这在C++里也是一样的。
只不过在C++里是码农显式指定,
而Rust里即使码农显式指定move,但因为copy traits的存在被隐式替换成了传值,确实令人困惑
--
FROM 114.254.115.*