Ok j'ai donc une fonction au sein d'une classe nommée vector_refPasser la référence const mène au paradoxe dans le code ..?
class vector_ref {
public:
int* data() const { return m_data }
void retarget(std::vector<int> const& _t)
{ m_data = _t.data();
m_count = _t.size() }
private:
int* m_data;
size_t m_count;
}
Je suis en train de recibler un objet vector_ref à un objet vectoriel existant nommé v qui est peuplée par ints et les données appelez().
vector_ref<int> tmp;
tmp.retarget(const_cast<std::vector<int> const&>(v));
tmp.data(); // error here
Le passage à recibler compiles, mais appelant des données() donne l'erreur:
invalid conversion from const int* to int* { m_data = v.data() ... }
Cela me semble logique, comme la variable membre m_data
n'est pas const
, mais étant donné cette définition de classe comment puis-je jamais retarget
à un existant vector
. Si je dois passer par const
référence à retarget()
, qui définit la variable membre const
m_data
, comment puis-je jamais espérer compiler avec succès le code retargets avec succès l'instance vector_ref
?
Quelle est votre intention? En prenant un paramètre comme 'const &', vous déclarez que vous ne le changerez pas, mais vous voudrez alors prendre un pointeur mutable, indiquant que vous pouvez le changer à travers ce pointeur. – Justin
Je lis le code du projet de quelqu'un d'autre, essayant de comprendre pourquoi ils l'ont écrit de cette façon. – jojeyh