Hi,
gibt es irgendwelche tricks objekte richtig const zu machen?
beispiel
1 | struct A{
|
2 | int a,b,c;
|
3 | }
|
4 |
|
5 | struct AListElement{
|
6 | A* data;
|
7 | ListElement* next;
|
8 | }
|
9 |
|
10 | typedef AListElement AList;
|
11 |
|
12 |
|
13 | /**
|
14 | * this function calcs something
|
15 | * and should not change the data
|
16 | */
|
17 | int calcSomething(const AList* alist)
|
18 | {
|
19 | alist->data->a = -alist->data->a;
|
20 | printf("haha - ich kanns ja doch ändern\n");
|
21 | //[...]
|
22 | }
|
Gibt es irgend eine Möglichkeit Manipulationen wie die obige zu
unterbinden?
klar, kann man consts auch wegcasten, aber ich rede davon red ich nicht.
Ich hab hier ziemlich verzweigten, komplexen Code, und würde gerne
sehen, ob nicht doch irgendwo in den Eingangsdaten rumschrieben wird,
beziehungsweise sicherstellen, dass dies nicht möglich ist.
das einzige, was mir einfallen würde, wäre alle strukturen doppelt zu
definieren, einmal mit const zeigern und einmal ohne, und dann
entsprechend die strukturen umcasten.
Also folgender maßen:
1 | struct AConstListElement{
|
2 | const A* data;
|
3 | const ListElement* next;
|
4 | }
|
5 | typedef AConstListElement AConstList;
|
6 |
|
7 | /**
|
8 | * this function calcs something
|
9 | * and should not change the data
|
10 | */
|
11 | int calcSomething(const AConstList* alist)
|
12 | {
|
13 | alist->data->a = -alist->data->a;
|
14 | printf("heul - kann nicht compiliert werden\n");
|
15 | //[...]
|
16 | }
|
17 |
|
18 |
|
19 | void someOtherFunction()
|
20 | {
|
21 | AList list;
|
22 | //[...]
|
23 | int x = calcSomething( (AConstList*)(&list) );
|
24 | }
|
Ich bewzeifel allerdings, dass dies für größere verschachtelte
Strukturen handhabbar ist, ganz zu schweigen von den zu pflegenden
Redundanzen
Gruß
Vlad