【发布时间】:2016-02-18 23:28:38
【问题描述】:
我想从传递给函数的 const 参数形成一个结构。由于参数是常量,我猜结构也必须是常量。但是,它不适用于指针。
以下代码编译(MinGW 4.9.2 32bit)
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;
}
但有了指针就不行:
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;
}
为什么编译器要在这里抛弃 const? 那么如何使用 const 指针来初始化 const 结构呢?
【问题讨论】:
-
structType 有
int* b而不是const int* b -
const int和int const是同一种类型,const int*和int* const是不同的类型。 -
即使我将 b 的类型更改为 const int * const 它也不会编译。我找到的唯一解决方案是 const_cast,我想这里是完全安全的。但我想知道,为什么我需要带有指针的 const_cast 而不是整数。
标签: c++ pointers struct constants