Je compile Percona (variante MySQL) sur mon Raspberry Pi, qui a un processeur ARM.Travailler autour de conversion invalide de const
J'ai rencontré un problème lors de la compilation qui a été signalé, mais personne n'est prêt à corriger car ARM est une plate-forme non prise en charge.
https://bugs.launchpad.net/percona-server/+bug/1002848
J'ai réussi à contourner le problème et de compiler avec succès, mais ma connaissance de C++ est un peu manque et je ne comprends pas bien si je l'ai fait cassé quelque chose ou non. J'ai lu beaucoup de la conversion invalide de const char * à char * questions sur SO, qui est l'endroit où j'ai eu l'idée de cette solution de contournement.
L'erreur était comme suit:
error: invalid conversion from 'const pthread_mutex_t*' to 'pthread_mutex_t*'
(il était en fait pas pthread_mutex_t
sur ma plate-forme, mais la question est la même - type réel perdu à l'abîme infini qui est le tampon de scrollback)
Le code incriminé était:
uint32 count(uint index) const
{
my_atomic_rwlock_rdlock(&time_collector_lock);
Je changé cela:
uint32 count(uint index) const
{
my_atomic_rwlock_t dummy = time_collector_lock;
my_atomic_rwlock_rdlock(&dummy);
time_collector_lock est défini comme:
private:
my_atomic_rwlock_t time_collector_lock;
En raison du fait cela est censé être un mutex, j'ai un sentiment que j'ai probablement fait ce non-thread-safe. Ou est-ce correct?
Existe-t-il une meilleure solution?
Pourquoi ne pas utiliser 'const_cast'? Vous allez rendre votre ** intention ** claire et vous ne créerez pas une ** copie ** de pthread_mutex_t ... –
Si vous essayez de 'const_cast' un objet initialement déclaré comme' const', le résultat est UB – SingerOfTheFall
@SingerOfTheFall Le but de ** only ** de const_cast est de supprimer le const. –