PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.cplus > Use const_cast to modify member variable?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Use const_cast to modify member variable?

Réponse
 
LinkBack Outils de la discussion
Vieux 01/07/2008, 15h11   #1
Immortal Nephi
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Use const_cast to modify member variable?

How can I modify member variable inside class if member function has
const like mem_Func(void) const. Please do not offer the keyword --
mutable. I want to know if keyword -- const_cast can be done.

If mutable is only the solution, I will follow not to use const_cast.
  Réponse avec citation
Vieux 01/07/2008, 15h39   #2
Kai-Uwe Bux
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Use const_cast to modify member variable?

Immortal Nephi wrote:

> How can I modify member variable inside class if member function has
> const like mem_Func(void) const. Please do not offer the keyword --
> mutable.


Why not? It's meant to be used for member variables that do not affect
logical constness. If the member variable you are modifying better not be
declared mutable, you probably shouldn't be modifying it in a const member
function.

> I want to know if keyword -- const_cast can be done.


Yes it can be used to cast away constness, but it will produce undefined
behavior if you use it on an object declared const.

> If mutable is only the solution, I will follow not to use const_cast.


What is the underlying problem that you are trying to solve? I looks as
though you might be headed the wrong direction, and in order to give better
advice some additional information about the background would be good.


Best

Kai-Uwe Bux
  Réponse avec citation
Vieux 01/07/2008, 15h57   #3
Eric Pruneau
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Use const_cast to modify member variable?


"Immortal Nephi" <Immortal_Nephi@satx.rr.com> a écrit dans le message de
news: 1db02a01-0b82-4fb7-b701-ca2a5b183f8a...oglegroups.com...
> How can I modify member variable inside class if member function has
> const like mem_Func(void) const. Please do not offer the keyword --
> mutable. I want to know if keyword -- const_cast can be done.
>
> If mutable is only the solution, I will follow not to use const_cast.


Ok it is Evil but you can do it.

struct EvilClass
{
void EvilFunct() const;
int _a;
};

void EvilClass::EvilFunct() const
{
int& tmp = const_cast<int&>(_a);
tmp = 5; // now _a == 5
}


You can also define a template function if you have many variables like
that.

struct EvilClass
{
void EvilFunct() const;

template<typename T>
void EvilSet(T const& val, T const& NewVal) const;

int _a;
};

void EvilClass::EvilFunct() const
{
EvilSet(_a, 5); // much cleaner but maybe also much evil
}

template<typename T>
void EvilClass::EvilSet(T const& val, T const& NewVal) const
{
T& tmp = const_cast<T&>(val);
tmp = NewVal;
}

------------------------

Eric Pruneau


  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 03h33.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,10284 seconds with 11 queries