Модификаторы переменных фиксируются во время компиляции для каждой переменной.Возможно, вам придется объяснить контекст того, что вы пытаетесь сделать, но, возможно, это подойдет вашим потребностям?
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
, она никогда не может быть присвоена с помощью оператора присваивания.Ему будет присвоено значение только тогда, когда оно будет построено.
Однако это не проблема, поскольку вы всегда можете обойти это путем правильного проектирования.
Если вы говорите, что вам нужно использовать присваивание,Я предполагаю, что это потому, что вы создаете структуру до того, как знаете значение переменной.Если это так, то вам просто нужно переместить объявление struct до тех пор, пока вы не узнаете значение.
Например,
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