Pourquoi pas une fonction membre statique avoir un cv-qualificatif?
C'est l'erreur:
error: static member function ‘static void myClass::myfunct()’ cannot have cv-qualifier
Quelqu'un peut-il expliquer cette erreur, et pourquoi const ne peut pas être utilisé.
#include<iostream>
class myClass{
static void myfunct() const
{
//do something
}
};
int main()
{
//some code
return 0;
}
- Qu'essayez-vous de le faire avec le mot
const
? - double possible de Pourquoi il n'y a pas de notion de "const-correctness" pour la classe des fonctions de membre statique?
- const statique, la fonction pourrait être utilisé pour prévenir la statique de la fonction de modification de l'état de la classe. Alors pourquoi le message d'erreur ou si la norme?
- Vous semblez être en train de changer à votre question. Tout d'abord vous demander "est-Ce que cela signifie?" Maintenant, vous vous demandez "Pourquoi ne pas dire ce que je veux dire?" Des Questions sur les raisons d'un langage est conçu d'une certaine manière n'est pas vraiment adapté à ce site, car ils ne sont pas pratiques. (Si la langue est conçue comme vous le souhaitez, n'altère pas le fait que vous avez de programme pour la langue, pas la langue que vous aimeriez avoir.) En tout cas, il y a une discussion de la justification dans les liens en double.
Vous devez vous connecter pour publier un commentaire.
Intéressant de mentionner la norme ici
9.4.1 fonctions membres Statiques
static
fonctions n'ont pas dethis
paramètre. Ils n'ont pas besoin de cv-qualificatifs.Voir cette réponse par James McNellis
const
lorsqu'il est appliqué à une fonction. Le sens de la prise de fonctionconst
est de changer le type dethis
deT*
àT const*
. Cette signification peut clairement s'appliquent uniquement pour les membres non statiques, c'est pourquoi le comité a choisi ce qu'il a fait. Pour avoir les choses autrement, vous'ld avoir à changer la définition de ce qu'const
sur une fonction.this
pointeur, mais c'est loin d'expliquer quoi que ce soit.Un
static
fonction de membre n'est pas lié à une instance de sa classe, de sorte qu'il ne fait pas de sens pour lui d'êtreconst
et/ouvolatile
(c'est à dire "cv-qualifiés"), car il n'existe aucune instance à laquelleconst
ouvolatile
peut être appliquée à l'appel de cette fonction.Il ne fait pas de sens d'écrire
const
là, parce que la fonction eststatic
et, par conséquent, il n'existe aucune instance de la classe sur laquelle insuffler unconst
contexte. Ainsi, il est traité comme une erreur.Qualificateur const dans un membre de la déclaration de la fonction est appliquée à l'pointeur vers l'objet de cette classe. Comme les fonctions statiques ne sont pas liés à des objets de la classe, ils n'ont pas de paramètre implicite de cette. Ainsi, le qualificatif const n'a pas de sens pour ces fonctions.
Const qualificatif pour les fonctions de membres signifie que la fonction ne changera pas l'objet de l'instance et peut être appelée sur les objets const. Fonctions membres statiques ne sont pas liés à une quelconque instance de l'objet et, par conséquent, il ne fait pas de sens pour eux d'être const, puisque vous n'avez pas appeler la fonction membre statique sur un objet quelconque. C'est pourquoi la norme de l'interdit.