Sto compilando Percona (variante MySQL) sul mio Raspberry Pi, che ha un processore ARM.Utilizzo della conversione non valida da const
Ho riscontrato un problema durante la compilazione che è stato segnalato, ma nessuno è disposto a risolvere perché ARM è una piattaforma non supportata.
https://bugs.launchpad.net/percona-server/+bug/1002848
sono riuscito a risolvere il problema e con successo la compilazione, ma la mia conoscenza di C++ è un po 'carente e io non comprendere appieno se ho effettivamente rotto qualcosa o no.
Ho letto molte conversioni non valide da const char * a char * domande su SO, che è dove ho avuto l'idea di questa soluzione alternativa.
L'errore è stato il seguente:
error: invalid conversion from 'const pthread_mutex_t*' to 'pthread_mutex_t*'
(in realtà non era pthread_mutex_t
sulla mia piattaforma, ma il problema è lo stesso - tipo effettivo perso l'abisso infinito che è l'scorrimento all'indietro del buffer)
Il codice incriminato era:
uint32 count(uint index) const
{
my_atomic_rwlock_rdlock(&time_collector_lock);
l'ho cambiato a:
uint32 count(uint index) const
{
my_atomic_rwlock_t dummy = time_collector_lock;
my_atomic_rwlock_rdlock(&dummy);
time_collector_lock è definito come:
private:
my_atomic_rwlock_t time_collector_lock;
A causa del fatto che questo dovrebbe essere un mutex, ho la sensazione che probabilmente ho fatto questo non-thread-safe. O è ok?
C'è una soluzione migliore?
Perché non usare 'const_cast'? Il tuo ** intento sarà chiaro ** e non creerai una ** copia ** di pthread_mutex_t ... –
Se provi a 'const_cast' un oggetto che è stato inizialmente dichiarato come' const', il risultato è UB – SingerOfTheFall
@SingerOfTheFall Il ** solo ** scopo di const_cast è quello di eliminare il const. –