使用const指针初始化const结构

时间:2015-11-17 14:34:34

标签: c++ pointers struct const

我想从传递给函数的const参数形成一个struct。由于参数是const,我猜结构也必须是const。但是,它不适用于指针。

以下代码编译(MinGW 4.9.2 32位)

struct structType_t {
    int* b;
};

void func1(const int* b) {
    const structType_t s={b};  // invalid conversion from 'const int*' to 'int*' [-fpermissive]

    // do something with s;
}

但是指针不是:

sheet_B

为什么编译器试图抛弃const? 那么如何使用const指针初始化const结构呢?

2 个答案:

答案 0 :(得分:2)

如果您更改结构以容纳const int*,则可以使用它来存储传递给该函数的const int*,无论您的s是否为const

struct structType_t {
    const int* b;
};

void func1(const int* b) {
     const structType_t s={b};
     // or 
     structType_t s2={b};

    // do something with s or s2 ...
}

答案 1 :(得分:0)

在第一种情况下,您要创建一个int的副本。 const int的副本不必是const,因此它可以工作。 在第二种情况下,您正在创建指向const int的指针的副本,并将其指定给指向int的指针 - 这是不允许的,这就是它不能编译的原因。