Bonjour je ne comprends pas trés bien à quoi sert "const" dans une
déclaration de fonction de ce genre :
foo(const matrice &m);
la fonction foo prends comme argument une variable de type matrice qu'on
passe par référence, mais le const signifie quoi exactement ? qu'on modifie
la matrice m mais à la fin de la fonction foo, les modifications sont
oubliées ?
C'est equivalent à foo(matrice m) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alexandre
bonjour,
"BuG" a écrit dans le message de news:c8c9cu$t6s$
Bonjour je ne comprends pas trés bien à quoi sert "const" dans une déclaration de fonction de ce genre :
foo(const matrice &m);
la fonction foo prends comme argument une variable de type matrice qu'on passe par référence, mais le const signifie quoi exactement ? qu'on modifie
la matrice m mais à la fin de la fonction foo, les modifications sont oubliées ? C'est equivalent à foo(matrice m) ?
le const sert à préciser que m ne sera pas modifié. Une modification de m à l'intérieur de la fonction ne compilera pas. Donc tu t'assures que m ne changera pas. Ce qui permet d'appeler la fonction avec des instances constantes. Par exemple :
foo(matrice& m){....} // pas de const mais foo ne modifie pas m
const matrice MC; foo(MC); // ne compile pas alors que m ne changeant pas dans foo, ce n'est pas grave
foo(const matrice& m){...} const matrice MC; foo(MC); // ici pas de pb
la référence constante n'est pas strictement équivalente à une valeur (const matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre dans le 1er cas, mais en pratique ça revient au ^même
bonjour,
"BuG" <bug@asrun.org> a écrit dans le message de
news:c8c9cu$t6s$1@news-reader3.wanadoo.fr...
Bonjour je ne comprends pas trés bien à quoi sert "const" dans une
déclaration de fonction de ce genre :
foo(const matrice &m);
la fonction foo prends comme argument une variable de type matrice qu'on
passe par référence, mais le const signifie quoi exactement ? qu'on
modifie
la matrice m mais à la fin de la fonction foo, les modifications sont
oubliées ?
C'est equivalent à foo(matrice m) ?
le const sert à préciser que m ne sera pas modifié. Une modification de m à
l'intérieur de la fonction ne compilera pas. Donc tu t'assures que m ne
changera pas. Ce qui permet d'appeler la fonction avec des instances
constantes. Par exemple :
foo(matrice& m){....} // pas de const mais foo ne modifie pas m
const matrice MC;
foo(MC); // ne compile pas alors que m ne changeant pas dans foo, ce
n'est pas grave
foo(const matrice& m){...}
const matrice MC;
foo(MC); // ici pas de pb
la référence constante n'est pas strictement équivalente à une valeur (const
matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre
dans le 1er cas, mais en pratique ça revient au ^même
Bonjour je ne comprends pas trés bien à quoi sert "const" dans une déclaration de fonction de ce genre :
foo(const matrice &m);
la fonction foo prends comme argument une variable de type matrice qu'on passe par référence, mais le const signifie quoi exactement ? qu'on modifie
la matrice m mais à la fin de la fonction foo, les modifications sont oubliées ? C'est equivalent à foo(matrice m) ?
le const sert à préciser que m ne sera pas modifié. Une modification de m à l'intérieur de la fonction ne compilera pas. Donc tu t'assures que m ne changera pas. Ce qui permet d'appeler la fonction avec des instances constantes. Par exemple :
foo(matrice& m){....} // pas de const mais foo ne modifie pas m
const matrice MC; foo(MC); // ne compile pas alors que m ne changeant pas dans foo, ce n'est pas grave
foo(const matrice& m){...} const matrice MC; foo(MC); // ici pas de pb
la référence constante n'est pas strictement équivalente à une valeur (const matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre dans le 1er cas, mais en pratique ça revient au ^même
Jean-Marc Bourguet
"Alexandre" writes:
la référence constante n'est pas strictement équivalente à une valeur (const matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre dans le 1er cas, mais en pratique ça revient au ^même
int global;
void bar() { global = 42; }
int foo(int const& x) { bar(); return x; }
... global = 0; assert(foo(global) == 42);
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Alexandre" <alex.g@netcourrier.com> writes:
la référence constante n'est pas strictement équivalente à une valeur (const
matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre
dans le 1er cas, mais en pratique ça revient au ^même
int global;
void bar() {
global = 42;
}
int foo(int const& x) {
bar();
return x;
}
...
global = 0;
assert(foo(global) == 42);
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
la référence constante n'est pas strictement équivalente à une valeur (const matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre dans le 1er cas, mais en pratique ça revient au ^même
int global;
void bar() { global = 42; }
int foo(int const& x) { bar(); return x; }
... global = 0; assert(foo(global) == 42);
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On 18 May 2004 20:54:38 +0200, Jean-Marc Bourguet wrote:
"Alexandre" writes:
dans le 1er cas, mais en pratique ça revient au ^même
[snip le contre-exemple]
Euh... j'espère qu'"en pratique", i.e. dans du vrai code (de production), tu ne vois pas ce genre de truc ;-)
-- ;-) FLL, Epagneul Breton
On 18 May 2004 20:54:38 +0200, Jean-Marc Bourguet <jm@bourguet.org>
wrote:
"Alexandre" <alex.g@netcourrier.com> writes:
dans le 1er cas, mais en pratique ça revient au ^même
[snip le contre-exemple]
Euh... j'espère qu'"en pratique", i.e. dans du vrai code (de
production), tu ne vois pas ce genre de truc ;-)
On 18 May 2004 20:54:38 +0200, Jean-Marc Bourguet wrote:
"Alexandre" writes:
dans le 1er cas, mais en pratique ça revient au ^même
[snip le contre-exemple]
Euh... j'espère qu'"en pratique", i.e. dans du vrai code (de production), tu ne vois pas ce genre de truc ;-)
-- ;-) FLL, Epagneul Breton
drkm
Jean-Marc Bourguet writes:
"Alexandre" writes:
la référence constante n'est pas strictement équivalente à une valeur (const matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre dans le 1er cas, mais en pratique ça revient au ^même
int global;
void bar() { global = 42; }
int foo(int const& x) { bar(); return x; }
... global = 0; assert(foo(global) == 42);
Heu, je ne vois pas vraiment où tu veux en venir.
--drkm
Jean-Marc Bourguet <jm@bourguet.org> writes:
"Alexandre" <alex.g@netcourrier.com> writes:
la référence constante n'est pas strictement équivalente à une valeur (const
matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre
dans le 1er cas, mais en pratique ça revient au ^même
la référence constante n'est pas strictement équivalente à une valeur (const matrice& != matrice) car il n'y a aucune copie de l'objet passé en paramètre dans le 1er cas, mais en pratique ça revient au ^même
int global;
void bar() { global = 42; }
int foo(int const& x) { bar(); return x; }
... global = 0; assert(foo(global) == 42);
Heu, je ne vois pas vraiment où tu veux en venir.
--drkm
Fabien LE LEZ
On Wed, 19 May 2004 01:55:39 +0200, drkm wrote:
Heu, je ne vois pas vraiment où tu veux en venir.
Le résultat serait différent s'il avait écrit
int foo (int const x)
-- ;-) FLL, Epagneul Breton
On Wed, 19 May 2004 01:55:39 +0200, drkm <usenet.fclcxx@fgeorges.org>
wrote:
On 18 May 2004 20:54:38 +0200, Jean-Marc Bourguet wrote:
"Alexandre" writes:
dans le 1er cas, mais en pratique ça revient au ^même
[snip le contre-exemple]
Euh... j'espère qu'"en pratique", i.e. dans du vrai code (de production), tu ne vois pas ce genre de truc ;-)
En pratique, je vois des problemes d'alias (plutot d'ailleurs avec des pointeurs que des references -- surtout que que je viens de passer sur une partie du projet ecrite en C, mais qui compilera en C++ dans la version qui suit celle qui va partir en production bientot avec pour objectif d'utiliser du C++, ah travailler sur des fichiers modifie la derniere fois en 94 ...). Malheureusement souvent mieux cache que celui que j'ai montre.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ <gramster@gramster.com> writes:
On 18 May 2004 20:54:38 +0200, Jean-Marc Bourguet <jm@bourguet.org>
wrote:
"Alexandre" <alex.g@netcourrier.com> writes:
dans le 1er cas, mais en pratique ça revient au ^même
[snip le contre-exemple]
Euh... j'espère qu'"en pratique", i.e. dans du vrai code (de
production), tu ne vois pas ce genre de truc ;-)
En pratique, je vois des problemes d'alias (plutot d'ailleurs avec des
pointeurs que des references -- surtout que que je viens de passer sur
une partie du projet ecrite en C, mais qui compilera en C++ dans la
version qui suit celle qui va partir en production bientot avec pour
objectif d'utiliser du C++, ah travailler sur des fichiers modifie la
derniere fois en 94 ...). Malheureusement souvent mieux cache que
celui que j'ai montre.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
On 18 May 2004 20:54:38 +0200, Jean-Marc Bourguet wrote:
"Alexandre" writes:
dans le 1er cas, mais en pratique ça revient au ^même
[snip le contre-exemple]
Euh... j'espère qu'"en pratique", i.e. dans du vrai code (de production), tu ne vois pas ce genre de truc ;-)
En pratique, je vois des problemes d'alias (plutot d'ailleurs avec des pointeurs que des references -- surtout que que je viens de passer sur une partie du projet ecrite en C, mais qui compilera en C++ dans la version qui suit celle qui va partir en production bientot avec pour objectif d'utiliser du C++, ah travailler sur des fichiers modifie la derniere fois en 94 ...). Malheureusement souvent mieux cache que celui que j'ai montre.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
drkm
Fabien LE LEZ writes:
On Wed, 19 May 2004 01:55:39 +0200, drkm ^^^^^^^^
wrote:
Heu, je ne vois pas vraiment où tu veux en venir.
Le résultat serait différent s'il avait écrit
int foo (int const x)
Il était encore tôt pourtant ;-(. Merci.
--drkm
Fabien LE LEZ <gramster@gramster.com> writes:
On Wed, 19 May 2004 01:55:39 +0200, drkm <usenet.fclcxx@fgeorges.org>
^^^^^^^^