Solidity中this和address(this)的区别

709 阅读1分钟

在Solidity中,this和address(this)都用于引用当前合约的地址,但它们有一些区别。

this关键字引用当前合约实例的地址,它只能用于非payable或view函数中。例如:

contract MyContract {
    function getContractAddress() public view returns (address) {
        return address(this);
    }
}

address(this)则是将this转换为一个地址。可以用于任何函数中,包括payable函数,例如:

contract MyContract {
    function getContractAddress() public payable returns (address) {
        return address(this);
    }
}

另一个区别是,使用this在某些情况下可能会导致更高的燃气费用。因为this在Solidity中只是一个指针,所以在访问它时需要转换为地址。因此,使用address(this)可能会更有效率,因为它只需要执行一次转换。

总之,this关键字和address(this)都可以用于引用当前合约的地址,但在具体使用时需要根据实际情况加以选择。