变量修饰符在编译时固定为每个变量。你可能不得不解释你想要做的事情的背景,但也许这会满足你的需求?
struct s
{
int* const B_ID;
};
int main (void) {
int n = 5;
s d = {&n};
int* value = d.B_ID; // ok
// d.B_ID = &n; // error
return 0;
}
由于您使用C++,我会建议:
class s {
public:
int* const B_ID;
s (int* id) :
B_ID (id) {
}
};
void main (void) {
int n = 5;
s my_s_variable = s(&n);
int* value = my_s_variable.B_ID; // ok
//my_s_variable.B_ID = &n; // error
return 0;
}
Ramiz Toma
:以及我需要的方式使用s.B_ID =东西
在C/C做++型修饰符(如const)在运行时为给定类型声明,并且在运行时不能更改。这意味着如果一个变量被声明为const
它永远不能被分配给使用赋值操作符。它只会在构建时被分配一个值。
然而,这不是一个问题,因为你可以通过适当的设计来解决这个问题。
如果你说你需要使用赋值,我认为这是因为你在知道变量的值是什么之前创建结构。如果是这种情况,那么你只需要将结构声明移到知道该值之后。
例如
s d; //variable declaration
//calculate B_ID
//...
int* n = 5;
//...
d.B_ID = &n;
这是行不通的,因为如果你想b.D_ID是“未分配”,它会永远是这样。您将需要类似的重构代码到:
//calculate B_ID
//...
int* n = 5;
//...
s d (&n);
//good
如果您想了解一下您尝试实现的目标,那将会有所帮助。你有几个答案可以回答你关于结构的const成员的原始问题,但实际上并没有用,因为我们不知道你想在switch语句中使用它。 http://catb.org/esr/faqs/smart-questions.html#goal – Peter 2010-08-17 23:38:20