初始化结构体的 Const 变量

Initialize Const variable of struct

查看了其他几个问题和答案,但我似乎无法弄清楚如何将其应用于我的情况。

这是我的设置:

typdef struct sensor {
    const unsigned char pin;

    //otherVariables
}Sensor;

Sensor *left = new Sensor();

void initStruct() {
    left->pin = 1; //illegal initialization
}

根据我一直在阅读的内容,我的以下代码似乎是一个可能的解决方案,但我不在我的编译器附近,所以我无法测试。看起来对吗?有错的可以给个解决办法吗?

void initStruct() {
    left->pin = malloc(sizeOf char);
    left->pin = 1;
}

不,该代码没有意义。

  1. pin 成员是 const 所以你不能给它赋值,除非在初始化器中。

  2. pin 成员不是指针,因此将 malloc() 分配给它不会正确编译。

我认为您需要从 struct 字段中删除 const,这根本没有任何意义。如果要防止意外修改它,请创建 struct 实例 const,而不是成员。

除非有什么奇怪的事情发生,否则这里不需要动态分配。如果类型是一个聚合,那么你可以简单地在声明中初始化它:

Sensor left = {1 /*, other variables */};

如果它不是聚合,则 const 成员必须在构造函数中初始化:

struct Sensor {
    const unsigned char pin;
    //otherVariables

    Sensor(unsigned char pin) : pin(pin)
        //, other variables
    {}
};

(我冒昧地删除了奇怪的 C 风格 typedef。在 C++ 中,那只是毫无意义的噪音。)