使用另一个 uint 类型调用函数
Call function with another uint type
我想知道当我调用一个通常使用 uint256
作为参数但使用另一个 uint
类型的函数时,幕后发生了什么,例如 uint8
.
我的印象是没有错误。
例如:
function sqrt(uint256 y) public pure returns (uint256) {
if (y > 3) {
uint256 z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
return z;
} else if (y != 0) {
return 1;
} else {
return 0;
}
}
function sqrtTest(uint8 y) public pure returns (uint256) {
return sqrt(y);
}
在这里,当我用 4 调用 sqrtTest
时,它起作用了。
为什么我应该避免这种类型的操作?
当您将输入 uint256
参数类型替换为更小的参数类型时,该函数将只接受该类型的最大值。
示例:
function sqrt(uint8 y) public pure returns (uint256) {
uint8
的最大值是255
。
当您尝试传递 256
时,函数调用会抛出 out-of-bounds
异常。由于未处理此异常,调用将恢复。
我想知道当我调用一个通常使用 uint256
作为参数但使用另一个 uint
类型的函数时,幕后发生了什么,例如 uint8
.
我的印象是没有错误。
例如:
function sqrt(uint256 y) public pure returns (uint256) {
if (y > 3) {
uint256 z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
return z;
} else if (y != 0) {
return 1;
} else {
return 0;
}
}
function sqrtTest(uint8 y) public pure returns (uint256) {
return sqrt(y);
}
在这里,当我用 4 调用 sqrtTest
时,它起作用了。
为什么我应该避免这种类型的操作?
当您将输入 uint256
参数类型替换为更小的参数类型时,该函数将只接受该类型的最大值。
示例:
function sqrt(uint8 y) public pure returns (uint256) {
uint8
的最大值是255
。
当您尝试传递 256
时,函数调用会抛出 out-of-bounds
异常。由于未处理此异常,调用将恢复。