发布于 2018-11-18 19:19:38
我认为更容易的是将constant存储变量简单地放在编译代码中(就像在常规的宏或常量语言中那样),实际上每个变量的出现及其值都是预先知道的,因此在需要时可以将指令PUSH <constant-value>放入编译代码中。它将花费很少的天然气单位,3,并只有在需要!
你不必相信我,你可以尝试一个简单的例子(用混合IDE):
pragma solidity ^0.4.24;
contract C {
uint8 constant x = 137;
uint y;
constructor () public {
y = 1 + x;
}
}如果您签入已编译的代码(尤其是程序集部分),您将注意到一个PUSH 137指令(您可以更改常量的值,并看到指令相应地发生变化)。
常量状态变量(即常量!)应该在编译时知道,所以这样的例子如下:
uint8 constant x;
constructor (uint _x) public {
x = _x;
}只是不起作用(我在0.4.24节中测试了它)。
同样的例子也适用于不那么危险的例子(理论上应该有效),比如以下例子:
uint8 constant x;
constructor () public {
x = 5;
}https://ethereum.stackexchange.com/questions/62595
复制相似问题