C ++: Ist es sicher, den Zeiger auf int und später wieder auf pointer zu setzen?

Ist es sicher, den Zeiger auf int und später wieder auf pointer zu setzen?

Wie kommt es, wenn wir wissen, ob der Zeiger 32 Bit lang und int 32 Bit lang ist?

long* juggle(long* p) {
    static_assert(sizeof(long*) == sizeof(int));
    int v = reinterpret_cast<int>(p); // or if sizeof(*)==8 choose long here
    do_some_math(v); // prevent compiler from optimizing
    return reinterpret_cast<long*>(v);
}

int main() {
    long* stuff = new long(42);
    long* ffuts = juggle(stuff); 
    std::cout << "Is this always 42? " << *ffuts << std::endl;
}

Wird dies vom Standard abgedeckt?

Antworten auf die Frage(24)

Ihre Antwort auf die Frage