一些代码:
constexpr int sum(int a, int b) {
return a + b;
}
int main() {
int a = sum(4, 5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用编译此代码,clang-9但int a在编译时不评估main函数的值。如果我使用constexpr int aclang在编译时对其进行评估,但我无法在运行时更改此变量。
但是在编译时gcc-7.1评估的值int a。
为什么会这样呢?如何解决?
示例代码:
fn main() {
let mut y = &5; // 1
println!("{:p}", y);
{
let x = &2; // 2
println!("{:p}", x);
y = x;
}
y = &3; // 3
println!("{:p}", y);
}
Run Code Online (Sandbox Code Playgroud)
如果第三次分配包含&3代码输出:
0x558e7da926a0
0x558e7da926a4
0x558e7da926a8
Run Code Online (Sandbox Code Playgroud)
如果第三个分配包含&2(与第二个分配相同的值),则代码输出:
0x558e7da926a0
0x558e7da926a4
0x558e7da926a4
Run Code Online (Sandbox Code Playgroud)
如果第三个分配包含&5(与第一个分配相同的值),则代码输出:
0x558e7da926a0
0x558e7da926a4
0x558e7da926a0
Run Code Online (Sandbox Code Playgroud)
如果赋值相同,为什么生锈不释放内存而是重新使用它,否则分配新的内存块?