Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
En essayant de
comprendre, il s'agit d'une variable non nommée ?
class A
{
static int a1;
public:
A();
A(int);
static int geta(void);
Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
En essayant de
comprendre, il s'agit d'une variable non nommée ?
class A
{
static int a1;
public:
A();
A(int);
static int geta(void);
Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
En essayant de
comprendre, il s'agit d'une variable non nommée ?
class A
{
static int a1;
public:
A();
A(int);
static int geta(void);
M'enfin bon, tout ça a l'air d'un beau bordel.
M'enfin bon, tout ça a l'air d'un beau bordel.
M'enfin bon, tout ça a l'air d'un beau bordel.
On Wed, 9 May 2007 18:57:39 +0200, "AG" :Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
Pour le coup, j'ai moi aussi du mal à comprendre.
J'imagine qu'il s'agit d'une variable qui a le même nom qu'une classe,
et que par miracle, il n'y a pas collusion.
En essayant de
comprendre, il s'agit d'une variable non nommée ?
À ma connaissance, ça n'existe pas en C++.
On Wed, 9 May 2007 18:57:39 +0200, "AG" <a...@tb.fr>:
Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
Pour le coup, j'ai moi aussi du mal à comprendre.
J'imagine qu'il s'agit d'une variable qui a le même nom qu'une classe,
et que par miracle, il n'y a pas collusion.
En essayant de
comprendre, il s'agit d'une variable non nommée ?
À ma connaissance, ça n'existe pas en C++.
On Wed, 9 May 2007 18:57:39 +0200, "AG" :Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
Pour le coup, j'ai moi aussi du mal à comprendre.
J'imagine qu'il s'agit d'une variable qui a le même nom qu'une classe,
et que par miracle, il n'y a pas collusion.
En essayant de
comprendre, il s'agit d'une variable non nommée ?
À ma connaissance, ça n'existe pas en C++.
Bonjour,
[beau bordel]
l'acces au membre a1 se fait par A::geta(). J'ai besoin de pouvoir
enregistrer la class dans un fichier. j'ai donc défini :
friend ostream & operator<<(ostream & o, A& m);
mais la variable crée par "A A(a);" n'est pas utilisable par ma
fonction. Pourriez vous m'expliquer pourquoi et dans quels cas on
utilise de telle variable "non nommée" ?
Bonjour,
[beau bordel]
l'acces au membre a1 se fait par A::geta(). J'ai besoin de pouvoir
enregistrer la class dans un fichier. j'ai donc défini :
friend ostream & operator<<(ostream & o, A& m);
mais la variable crée par "A A(a);" n'est pas utilisable par ma
fonction. Pourriez vous m'expliquer pourquoi et dans quels cas on
utilise de telle variable "non nommée" ?
Bonjour,
[beau bordel]
l'acces au membre a1 se fait par A::geta(). J'ai besoin de pouvoir
enregistrer la class dans un fichier. j'ai donc défini :
friend ostream & operator<<(ostream & o, A& m);
mais la variable crée par "A A(a);" n'est pas utilisable par ma
fonction. Pourriez vous m'expliquer pourquoi et dans quels cas on
utilise de telle variable "non nommée" ?
Ça s'appelle un temporaire (ou un rvalue). Mais on n'a pas
l'habitude de les considérer comme des variables.
Ça s'appelle un temporaire (ou un rvalue). Mais on n'a pas
l'habitude de les considérer comme des variables.
Ça s'appelle un temporaire (ou un rvalue). Mais on n'a pas
l'habitude de les considérer comme des variables.
On May 9, 7:20 pm, Fabien LE LEZ wrote:On Wed, 9 May 2007 18:57:39 +0200, "AG" :Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
Pour le coup, j'ai moi aussi du mal à comprendre.
J'imagine qu'il s'agit d'une variable qui a le même nom qu'une classe,
et que par miracle, il n'y a pas collusion.
Il n'y a pas de miracle. La portée de la variable ne commence
qu'à la fin du « declarator », c-à-d ici qu'au parenthèse
ouvrant. Jusque là, le A en dehors de la fonction reste
visible. Voir §3.3.1 : il y a même un exemple du même genre.
Toujours est-il que c'est le genre de chose à éviter, au moins
que tu vises l'obfuscation.En essayant de
comprendre, il s'agit d'une variable non nommée ?
À ma connaissance, ça n'existe pas en C++.
Ça s'appelle un temporaire (ou un rvalue). Mais on n'a pas
l'habitude de les considérer comme des variables.
On May 9, 7:20 pm, Fabien LE LEZ <grams...@gramster.com> wrote:
On Wed, 9 May 2007 18:57:39 +0200, "AG" <a...@tb.fr>:
Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
Pour le coup, j'ai moi aussi du mal à comprendre.
J'imagine qu'il s'agit d'une variable qui a le même nom qu'une classe,
et que par miracle, il n'y a pas collusion.
Il n'y a pas de miracle. La portée de la variable ne commence
qu'à la fin du « declarator », c-à-d ici qu'au parenthèse
ouvrant. Jusque là, le A en dehors de la fonction reste
visible. Voir §3.3.1 : il y a même un exemple du même genre.
Toujours est-il que c'est le genre de chose à éviter, au moins
que tu vises l'obfuscation.
En essayant de
comprendre, il s'agit d'une variable non nommée ?
À ma connaissance, ça n'existe pas en C++.
Ça s'appelle un temporaire (ou un rvalue). Mais on n'a pas
l'habitude de les considérer comme des variables.
On May 9, 7:20 pm, Fabien LE LEZ wrote:On Wed, 9 May 2007 18:57:39 +0200, "AG" :Je suis sur un code dans lequel il y a la déclaration suivante, dans
le main :
int a=2;
A A(a);
Pour le coup, j'ai moi aussi du mal à comprendre.
J'imagine qu'il s'agit d'une variable qui a le même nom qu'une classe,
et que par miracle, il n'y a pas collusion.
Il n'y a pas de miracle. La portée de la variable ne commence
qu'à la fin du « declarator », c-à-d ici qu'au parenthèse
ouvrant. Jusque là, le A en dehors de la fonction reste
visible. Voir §3.3.1 : il y a même un exemple du même genre.
Toujours est-il que c'est le genre de chose à éviter, au moins
que tu vises l'obfuscation.En essayant de
comprendre, il s'agit d'une variable non nommée ?
À ma connaissance, ça n'existe pas en C++.
Ça s'appelle un temporaire (ou un rvalue). Mais on n'a pas
l'habitude de les considérer comme des variables.
je vous dévoile une partie du code :
class MTRand;
class RandomNumGenerator
{
static MTRand* ptMersenneTwister;
static int StartSeed;
public:
RandomNumGenerator();
RandomNumGenerator(int seed);
~RandomNumGenerator();
static void Init();
static void Init(int seed);
static double rand();
...
};
avec
RandomNumGenerator::RandomNumGenerator(int seed)
{
if (seed == 0)
Init(); // use random without seed if the argument is zero
else
Init(seed); // otherwise use a seed
}
void RandomNumGenerator::Init(int seed)
{
cout << "RandomNumGenerator::Init(int seed)" << endl;
if(ptMersenneTwister)
delete ptMersenneTwister;
if (seed != 0)
ptMersenneTwister = new MTRand(seed);
else
ptMersenneTwister = new MTRand();
}
et dans le main :
int seed = 1234;
RandomNumGenerator RandomNumGenerator(seed);
Eviter la confusion nom/'nom de classe'.
et de temps en temps des :
RandomNumGenerator::rand() pour avoir un nombre tiré aléatoirement.
Bien sur le programme plante de temps en temps, personne ne sait
pourquoi. J'ai besoin de savoir si ce genre de pratique (qui est
utilisé largement dans le code avec d'autres class) peut causer des
problemes. Merci de me soutenir et de pas me renvoyer dans mes
pennates en me disant simplement qu'on écrit pas du code comme ça :-)
je vous dévoile une partie du code :
class MTRand;
class RandomNumGenerator
{
static MTRand* ptMersenneTwister;
static int StartSeed;
public:
RandomNumGenerator();
RandomNumGenerator(int seed);
~RandomNumGenerator();
static void Init();
static void Init(int seed);
static double rand();
...
};
avec
RandomNumGenerator::RandomNumGenerator(int seed)
{
if (seed == 0)
Init(); // use random without seed if the argument is zero
else
Init(seed); // otherwise use a seed
}
void RandomNumGenerator::Init(int seed)
{
cout << "RandomNumGenerator::Init(int seed)" << endl;
if(ptMersenneTwister)
delete ptMersenneTwister;
if (seed != 0)
ptMersenneTwister = new MTRand(seed);
else
ptMersenneTwister = new MTRand();
}
et dans le main :
int seed = 1234;
RandomNumGenerator RandomNumGenerator(seed);
Eviter la confusion nom/'nom de classe'.
et de temps en temps des :
RandomNumGenerator::rand() pour avoir un nombre tiré aléatoirement.
Bien sur le programme plante de temps en temps, personne ne sait
pourquoi. J'ai besoin de savoir si ce genre de pratique (qui est
utilisé largement dans le code avec d'autres class) peut causer des
problemes. Merci de me soutenir et de pas me renvoyer dans mes
pennates en me disant simplement qu'on écrit pas du code comme ça :-)
je vous dévoile une partie du code :
class MTRand;
class RandomNumGenerator
{
static MTRand* ptMersenneTwister;
static int StartSeed;
public:
RandomNumGenerator();
RandomNumGenerator(int seed);
~RandomNumGenerator();
static void Init();
static void Init(int seed);
static double rand();
...
};
avec
RandomNumGenerator::RandomNumGenerator(int seed)
{
if (seed == 0)
Init(); // use random without seed if the argument is zero
else
Init(seed); // otherwise use a seed
}
void RandomNumGenerator::Init(int seed)
{
cout << "RandomNumGenerator::Init(int seed)" << endl;
if(ptMersenneTwister)
delete ptMersenneTwister;
if (seed != 0)
ptMersenneTwister = new MTRand(seed);
else
ptMersenneTwister = new MTRand();
}
et dans le main :
int seed = 1234;
RandomNumGenerator RandomNumGenerator(seed);
Eviter la confusion nom/'nom de classe'.
et de temps en temps des :
RandomNumGenerator::rand() pour avoir un nombre tiré aléatoirement.
Bien sur le programme plante de temps en temps, personne ne sait
pourquoi. J'ai besoin de savoir si ce genre de pratique (qui est
utilisé largement dans le code avec d'autres class) peut causer des
problemes. Merci de me soutenir et de pas me renvoyer dans mes
pennates en me disant simplement qu'on écrit pas du code comme ça :-)
je vous dévoile une partie du code :
class MTRand;
class RandomNumGenerator
{
static MTRand* ptMersenneTwister;
static int StartSeed;
public:
RandomNumGenerator();
RandomNumGenerator(int seed);
~RandomNumGenerator();
static void Init();
static void Init(int seed);
static double rand();
et dans le main :
je vous dévoile une partie du code :
class MTRand;
class RandomNumGenerator
{
static MTRand* ptMersenneTwister;
static int StartSeed;
public:
RandomNumGenerator();
RandomNumGenerator(int seed);
~RandomNumGenerator();
static void Init();
static void Init(int seed);
static double rand();
et dans le main :
je vous dévoile une partie du code :
class MTRand;
class RandomNumGenerator
{
static MTRand* ptMersenneTwister;
static int StartSeed;
public:
RandomNumGenerator();
RandomNumGenerator(int seed);
~RandomNumGenerator();
static void Init();
static void Init(int seed);
static double rand();
et dans le main :
AG wrote on 10/05/2007 09:29:je vous dévoile une partie du code :
[code]
le défaut majeur d'avoir ces méthodes statiques et un fournisseur
MTRand* static est évidemment qu'une modification / un appel quelconque
impacte globalement le fournisseur d'aléa; on préférera sûrement pouvoir
disposer de plusieurs instances indépendantes.
AG wrote on 10/05/2007 09:29:
je vous dévoile une partie du code :
[code]
le défaut majeur d'avoir ces méthodes statiques et un fournisseur
MTRand* static est évidemment qu'une modification / un appel quelconque
impacte globalement le fournisseur d'aléa; on préférera sûrement pouvoir
disposer de plusieurs instances indépendantes.
AG wrote on 10/05/2007 09:29:je vous dévoile une partie du code :
[code]
le défaut majeur d'avoir ces méthodes statiques et un fournisseur
MTRand* static est évidemment qu'une modification / un appel quelconque
impacte globalement le fournisseur d'aléa; on préférera sûrement pouvoir
disposer de plusieurs instances indépendantes.