首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能使用calldata作为构造函数参数的数据位置的原因

我不能使用calldata作为构造函数参数的数据位置的原因
EN

Ethereum用户
提问于 2022-03-31 00:51:37
回答 1查看 524关注 0票数 3

我知道内存和呼叫数据之间有什么区别。但看到我问了这个问题,我似乎还不太明白。

当我使用“calldata”作为构造函数输入参数的数据位置时,我遇到了如下错误消息。

代码语言:javascript
复制
"Data location must be "storage" or "memory" for constructor parameter, but "calldata" was given."

但是,在构造函数中,我只读取要分配存储的值,而不做任何更改。

就像下面的例子

代码语言:javascript
复制
pragma solidity 0.8.10;

contract Example {
   address theFirst;
   
   constructor(address[] calldata _addressList) {
      theFirst = _addressList[0];
   }
}
EN

回答 1

Ethereum用户

发布于 2022-08-17 14:43:06

这是因为构造函数是一种特殊的函数,它是如何被调用的。

契约被写入链表,后面紧跟构造函数参数数据。然后,构造函数通过查找参数值的偏移量来读取参数值。

因此,构造函数参数不是calldata类型的。

票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/125100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档