Ein reinterpret_cast ist übrigens gar nicht nötig. Es ist garantiert,
dass ein beliebieger Objektzeiger verlustlos ohne Cast in einen void*
und per static_cast wieder zurück gewandelt werden kann.
Also ginge statt obigem Code auch:
1 | #include <vector>
|
2 |
|
3 | struct test
|
4 | {
|
5 | double x;
|
6 | };
|
7 |
|
8 | int main()
|
9 | {
|
10 | std::vector<test> tests{{10.0},{20.0}};
|
11 |
|
12 | void* a = &tests;
|
13 | std::vector<test>* a2 = static_cast<std::vector<test>*>(a);
|
14 | a2->push_back({30.0});
|
15 |
|
16 | void* b = &tests[0];
|
17 | test* b2 = static_cast<test*>(b);
|
18 | *b2 = {40.0};
|
19 | }
|
Ein reinterpret_cast dient ja eigentlich dazu, die Bits, aus denen ein
Objekt aufgebaut ist, als Objekt eines anderen Typ zu interpretieren.
Bei void* gibt's aber keine Bits zum interpretieren.