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
Fabien LE LEZ
On 2 Apr 2007 15:03:19 -0700, "bylybob" :
Salut a tous, j'ai jamais vraiment compris qd je devais prefixer les noms de classes par ::
Quand il y a une ambiguïté.
class lala : private ::boost::noncopyable {};
Ce n'est utile que s'il y a plusieurs "boost", dans plusieurs namespaces différents.
Si tu écris :
namespace MonEspace { class boost;
class lala: ... }
il y a une ambiguïté entre ::boost (le "boost" du namespace global) et MonEspace::boost. Si tu écris "boost" quelque part (dans ton "private boost::..." par exemple), sans précision, le compilateur va croire que tu parles du "boost" local, i.e. MonEspace::boost.
En l'occurence, "boost" est un nom très connu, et il y a peu de chances pour que tu aies l'idée saugrenue d'appeler une de tes classes ou un de tes namespaces de cette manière ; aussi, la précision (le "::" au début) est rarement utile.
On 2 Apr 2007 15:03:19 -0700, "bylybob" <bylybob@gmail.com>:
Salut a tous, j'ai jamais vraiment compris qd je devais prefixer les
noms de classes par ::
Quand il y a une ambiguïté.
class lala : private ::boost::noncopyable {};
Ce n'est utile que s'il y a plusieurs "boost", dans plusieurs
namespaces différents.
Si tu écris :
namespace MonEspace
{
class boost;
class lala: ...
}
il y a une ambiguïté entre ::boost (le "boost" du namespace global) et
MonEspace::boost. Si tu écris "boost" quelque part (dans ton
"private boost::..." par exemple), sans précision, le compilateur va
croire que tu parles du "boost" local, i.e. MonEspace::boost.
En l'occurence, "boost" est un nom très connu, et il y a peu de
chances pour que tu aies l'idée saugrenue d'appeler une de tes classes
ou un de tes namespaces de cette manière ; aussi, la précision (le
"::" au début) est rarement utile.
Salut a tous, j'ai jamais vraiment compris qd je devais prefixer les noms de classes par ::
Quand il y a une ambiguïté.
class lala : private ::boost::noncopyable {};
Ce n'est utile que s'il y a plusieurs "boost", dans plusieurs namespaces différents.
Si tu écris :
namespace MonEspace { class boost;
class lala: ... }
il y a une ambiguïté entre ::boost (le "boost" du namespace global) et MonEspace::boost. Si tu écris "boost" quelque part (dans ton "private boost::..." par exemple), sans précision, le compilateur va croire que tu parles du "boost" local, i.e. MonEspace::boost.
En l'occurence, "boost" est un nom très connu, et il y a peu de chances pour que tu aies l'idée saugrenue d'appeler une de tes classes ou un de tes namespaces de cette manière ; aussi, la précision (le "::" au début) est rarement utile.
bylybob
On Apr 2, 3:10 pm, Fabien LE LEZ wrote:
On 2 Apr 2007 15:03:19 -0700, "bylybob" :
Salut a tous, j'ai jamais vraiment compris qd je devais prefixer les noms de classes par ::
Quand il y a une ambiguïté.
class lala : private ::boost::noncopyable {};
Ce n'est utile que s'il y a plusieurs "boost", dans plusieurs namespaces différents.
Si tu écris :
namespace MonEspace { class boost;
class lala: ...
}
il y a une ambiguïté entre ::boost (le "boost" du namespace global) et MonEspace::boost. Si tu écris "boost" quelque part (dans ton "private boost::..." par exemple), sans précision, le compilateur va croire que tu parles du "boost" local, i.e. MonEspace::boost.
En l'occurence, "boost" est un nom très connu, et il y a peu de chances pour que tu aies l'idée saugrenue d'appeler une de tes classes ou un de tes namespaces de cette manière ; aussi, la précision (le "::" au début) est rarement utile.
OK, tres clair. Merci.
Donc j'en tire la "guideline" generale suivant (1) ne pas specifier le namespace global en prefixant par :: (2) si ambiguïté il y a (le compilateur rale), lever l'ambiguïté en prefixant par :: pour le scope global.
On Apr 2, 3:10 pm, Fabien LE LEZ <grams...@gramster.com> wrote:
On 2 Apr 2007 15:03:19 -0700, "bylybob" <byly...@gmail.com>:
Salut a tous, j'ai jamais vraiment compris qd je devais prefixer les
noms de classes par ::
Quand il y a une ambiguïté.
class lala : private ::boost::noncopyable {};
Ce n'est utile que s'il y a plusieurs "boost", dans plusieurs
namespaces différents.
Si tu écris :
namespace MonEspace
{
class boost;
class lala: ...
}
il y a une ambiguïté entre ::boost (le "boost" du namespace global) et
MonEspace::boost. Si tu écris "boost" quelque part (dans ton
"private boost::..." par exemple), sans précision, le compilateur va
croire que tu parles du "boost" local, i.e. MonEspace::boost.
En l'occurence, "boost" est un nom très connu, et il y a peu de
chances pour que tu aies l'idée saugrenue d'appeler une de tes classes
ou un de tes namespaces de cette manière ; aussi, la précision (le
"::" au début) est rarement utile.
OK, tres clair. Merci.
Donc j'en tire la "guideline" generale suivant (1) ne pas specifier le
namespace global en prefixant par :: (2) si ambiguïté il y a (le
compilateur rale), lever l'ambiguïté en prefixant par :: pour le scope
global.
Salut a tous, j'ai jamais vraiment compris qd je devais prefixer les noms de classes par ::
Quand il y a une ambiguïté.
class lala : private ::boost::noncopyable {};
Ce n'est utile que s'il y a plusieurs "boost", dans plusieurs namespaces différents.
Si tu écris :
namespace MonEspace { class boost;
class lala: ...
}
il y a une ambiguïté entre ::boost (le "boost" du namespace global) et MonEspace::boost. Si tu écris "boost" quelque part (dans ton "private boost::..." par exemple), sans précision, le compilateur va croire que tu parles du "boost" local, i.e. MonEspace::boost.
En l'occurence, "boost" est un nom très connu, et il y a peu de chances pour que tu aies l'idée saugrenue d'appeler une de tes classes ou un de tes namespaces de cette manière ; aussi, la précision (le "::" au début) est rarement utile.
OK, tres clair. Merci.
Donc j'en tire la "guideline" generale suivant (1) ne pas specifier le namespace global en prefixant par :: (2) si ambiguïté il y a (le compilateur rale), lever l'ambiguïté en prefixant par :: pour le scope global.
Fabien LE LEZ
On 2 Apr 2007 15:33:49 -0700, "bylybob" :
(2) si ambiguïté il y a (le compilateur rale)
Généralement, le compilateur ne râle pas (ou du moins, n'affiche pas un message très clair) ; il choisit le namespace le plus local.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
On 2 Apr 2007 15:33:49 -0700, "bylybob" <bylybob@gmail.com>:
(2) si ambiguïté il y a (le
compilateur rale)
Généralement, le compilateur ne râle pas (ou du moins, n'affiche pas
un message très clair) ; il choisit le namespace le plus local.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
Généralement, le compilateur ne râle pas (ou du moins, n'affiche pas un message très clair) ; il choisit le namespace le plus local.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
Sylvain
Fabien LE LEZ wrote on 03/04/2007 01:12:
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
question de gout, en pratique, je préfixe toujours les fonctions du CRT par un "::" pour justement éviter une surcharge d'un nom (de fonction, pas de namespace) très connu.
Sylvain.
Fabien LE LEZ wrote on 03/04/2007 01:12:
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
question de gout, en pratique, je préfixe toujours les fonctions du CRT
par un "::" pour justement éviter une surcharge d'un nom (de fonction,
pas de namespace) très connu.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
question de gout, en pratique, je préfixe toujours les fonctions du CRT par un "::" pour justement éviter une surcharge d'un nom (de fonction, pas de namespace) très connu.
Sylvain.
James Kanze
On Apr 3, 1:12 am, Fabien LE LEZ wrote:
On 2 Apr 2007 15:33:49 -0700, "bylybob" :
(2) si ambiguïté il y a (le compilateur rale)
Généralement, le compilateur ne râle pas (ou du moins, n'affiche pas un message très clair) ; il choisit le namespace le plus local.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
Sauf, peut-être, si on écrit une bibliothèque à l'utilisation générale. Où tu ne sais pas quels noms de classe ou de namespace tu risques de trouver dans tes en-têtes. Mais ce n'est pas toujours nécessaire non plus : si tu es dans le namespace X, et qu'il y une class Y dans ce namespace, c'est bien elle que le compilateur va trouver si tu écris Y tout court.
Autrefois, on l'utiliser les :: assez systèmatiquement dans les templates, quand on voulait une fonction globale, et non une de la classe de base. (Aujourd'hui, c'est l'inverse. « f() » tout court signifie une fonction globale, et il faut écrire « this->f() » pour dire au compilateur de chercher dans la classe de base.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Apr 3, 1:12 am, Fabien LE LEZ <grams...@gramster.com> wrote:
On 2 Apr 2007 15:33:49 -0700, "bylybob" <byly...@gmail.com>:
(2) si ambiguïté il y a (le
compilateur rale)
Généralement, le compilateur ne râle pas (ou du moins, n'affiche pas
un message très clair) ; il choisit le namespace le plus local.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
Sauf, peut-être, si on écrit une bibliothèque à l'utilisation
générale. Où tu ne sais pas quels noms de classe ou de namespace
tu risques de trouver dans tes en-têtes. Mais ce n'est pas
toujours nécessaire non plus : si tu es dans le namespace X, et
qu'il y une class Y dans ce namespace, c'est bien elle que le
compilateur va trouver si tu écris Y tout court.
Autrefois, on l'utiliser les :: assez systèmatiquement dans les
templates, quand on voulait une fonction globale, et non une de
la classe de base. (Aujourd'hui, c'est l'inverse. « f() »
tout court signifie une fonction globale, et il faut écrire
« this->f() » pour dire au compilateur de chercher dans la
classe de base.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Généralement, le compilateur ne râle pas (ou du moins, n'affiche pas un message très clair) ; il choisit le namespace le plus local.
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
Sauf, peut-être, si on écrit une bibliothèque à l'utilisation générale. Où tu ne sais pas quels noms de classe ou de namespace tu risques de trouver dans tes en-têtes. Mais ce n'est pas toujours nécessaire non plus : si tu es dans le namespace X, et qu'il y une class Y dans ce namespace, c'est bien elle que le compilateur va trouver si tu écris Y tout court.
Autrefois, on l'utiliser les :: assez systèmatiquement dans les templates, quand on voulait une fonction globale, et non une de la classe de base. (Aujourd'hui, c'est l'inverse. « f() » tout court signifie une fonction globale, et il faut écrire « this->f() » pour dire au compilateur de chercher dans la classe de base.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
James Kanze
On Apr 3, 1:53 am, Sylvain wrote:
Fabien LE LEZ wrote on 03/04/2007 01:12:
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
question de gout, en pratique, je préfixe toujours les fonctions du CRT par un "::" pour justement éviter une surcharge d'un nom (de fonction, pas de namespace) très connu.
Pas seulement de goût. Si tu implémentes quelque chose du genre std::filebuf::close(), il vaut mieux que tu écris ::close() dedans pour accéder à l'API du système, plutôt que simplement close(). Ensuite, par souci d'orthogonalité...
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Apr 3, 1:53 am, Sylvain <noS...@mail.net> wrote:
Fabien LE LEZ wrote on 03/04/2007 01:12:
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
question de gout, en pratique, je préfixe toujours les fonctions du CRT
par un "::" pour justement éviter une surcharge d'un nom (de fonction,
pas de namespace) très connu.
Pas seulement de goût. Si tu implémentes quelque chose du genre
std::filebuf::close(), il vaut mieux que tu écris ::close()
dedans pour accéder à l'API du système, plutôt que simplement
close(). Ensuite, par souci d'orthogonalité...
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Mais en pratique, il est assez rare d'utiliser l'écriture en question.
question de gout, en pratique, je préfixe toujours les fonctions du CRT par un "::" pour justement éviter une surcharge d'un nom (de fonction, pas de namespace) très connu.
Pas seulement de goût. Si tu implémentes quelque chose du genre std::filebuf::close(), il vaut mieux que tu écris ::close() dedans pour accéder à l'API du système, plutôt que simplement close(). Ensuite, par souci d'orthogonalité...
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34