我是Rust和系统编程的绝对初学者.const
Rust 的文档说明了这一点:
常量适用于程序的整个生命周期.更具体地说,Rust中的常量在内存中没有固定地址.这是因为它们有效地内联到他们使用的每个地方.由于这个原因,对同一常量的引用不一定保证指代相同的存储器地址.
我只是const
在C++中遇到过,但从来没有内联const类型.有人可以提供一个初学者友好的解释,如何工作?
另外,我有点困惑const
.这是否意味着每次我们使用该const
类型时,堆栈中的值仅为此表达式分配,并且在表达式执行完毕后,它将被销毁?
我只是遇到了C++中的内联函数,但从未使用内联const类型.
const
在Rust中,最接近于a 的是enum
C++中的.
有人可以提供一个初学者友好的解释,如何工作?
简单的初学者的解释是:它只是工作,不要担心细节的细节.
另外,我对内存中没有固定地址感到困惑.这是否意味着每次我们使用const类型时,堆栈中的值仅为此表达式分配,并且在表达式执行完毕后,它将被销毁?
是.也许.没有.
这完全意味着它在锡上所说的内容:无法保证.这使编译器可以最大限度地自由地优化事物.
好吧,这一切都很好,但是......真的发生了什么?
在实践中,有两种情况:
什么是简单的意思?这得看情况.对于每个调用站点,编译器可以决定"是否足够简单",这是接近内联的位置.
这是否意味着每次我们使用const类型时,堆栈中的值仅为此表达式分配,并且在表达式执行完毕后,它将被销毁?
它不会被摧毁.const
变量不能具有实现的类型const
.当它不再被使用时,该值就被遗忘了.如果曾经占用了堆栈中的内存,有时候这个内存会被覆盖.
const N: i32 = 5
在 Rust 中就像#define N 5
在 C 或 C++ 中完成类型安全。
当类型匹配时,您可以将其视为文本替换,即let foo = 32 + N;
等效let foo = 32 + 5;
于您的示例。