You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity中构造函数赋值无法传递给其他变量的原因咨询

Solidity合约变量初始化问题解析

你的问题核心在于Solidity的状态变量初始化顺序规则,具体逻辑拆解如下:

  1. Solidity中,合约的状态变量会严格按照代码里声明的先后顺序完成初始化,这个过程发生在构造函数执行之前。
  2. 你的合约里,publicM是第一个声明的状态变量,初始化时会被赋予uint类型的默认值0。
  3. 紧接着初始化remPublic,此时构造函数还没执行,publicM仍为默认的0,所以remPublic会被设为0。
  4. 最后才会运行构造函数里的publicM = 10,此时publicM被更新为10,但remPublic已经完成初始化,不会再同步这个新值。

如果想让remPublic拿到构造函数赋值后的publicM值,最简单的修正方式是把remPublic的赋值逻辑移到构造函数内:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

contract MAth{
    uint public publicM;
    uint public remPublic;
    
    constructor()  {
        publicM = 10;
        remPublic = publicM;
    }
}

内容的提问来源于stack exchange,提问作者Zeeshan Nawaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:36:43