Warum kann der folgende Code nicht kompilieren?const_cast zu "void pointer" von "const T pointer" schlägt fehl
CFDictionaryRef dictionary;
CFDictionaryApplyFunction (dict, Set, const_cast < void *> (Wörterbuch));
error: const_cast from 'CFDictionaryRef' (aka 'const __CFDictionary *') to 'void *' is not allowed
CFDictionaryApplyFunction(scoped, setDictionary, const_cast<void *>(dictionary));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wenn ich gesetzt c-style type Guss void * es funktioniert gut
CFDictionaryApplyFunction (dict, Set, (void *) Wörterbuch);
Weil 'const_cast' nur die' const'ness eines Typs *** umwandelt. Wenn Sie zwischen einem "const" -Zeiger eines Typs und einem veränderbaren Zeiger eines anderen Typs umwandeln möchten, müssen Sie zuerst die 'const'-Ness mit' const_cast' und anschließend 'reininterpret_cast' mit dem Befehl" cast "umsetzen . Die Tatsache, dass zwei Abgüsse notwendig sind, ist eine hupende rote Flagge, dass etwas grundsätzlich mit dem Code, der dies tun muss, überhaupt nicht stimmt. Richtig entworfener und geschriebener Code muss das nie tun. Was immer dein wirkliches Problem ist, ist es nicht. –
Ein 'const_cast' und' static_cast' würden tun. – aschepler
Was sind die Argumenttypen für die CFDictionaryApplyFunction-Methode? – Garland