Quel est le c++ inline classe?
J'ai accidentellement trouvé que le compilateur Clang permet :
inline class AAA
{
};
en C++.
Qu'est-ce?
PS. J'ai signalé ce à Clang liste de diffusion [email protected]
, et maintenant en attente de réponse. Je vais mettre à jour cette question, j'en suis informé.
- fonction en ligne du sens....mais inline classe??
- "Qu'est-ce?" - Quelque chose qui n'existe pas dans la norme C++. Le
inline
spécificateur de fonctions, et non des classes. Vous avez peut-être tombé sur un bug dans le Cliquetis compilateur C++. - Ajouté
clang
tag, je ne pouvais pas trouver quoi que ce soit sur le bug tracker, il pourrait être intéressant d'en ouvrir un (vous pouvez toujours poster un mail de la cfe-dev [at] cs.uiuc.edu à l'avance si vous n'êtes pas sûr). Si ce n'est sur la 2.9 ligne, ils vont probablement vouloir le résoudre rapidement. - Cela peut être quelque chose qui indique au compilateur de ne pas générer de code orienté objet pour la classe que vous avez défini. Peut-être qu'il élargit la déclaration de la classe et de la gestion de la mémoire dans le code de l'utilisateur à faire de la vitesse plus rapidement.
- Merci les gars. J'ai signalé cela à
[email protected]
. Et je suis en attente de réponse. - Ils ont répondu que c'est un bug. Cependant, il avait déjà été fixée.
Vous devez vous connecter pour publier un commentaire.
Il est autorisé dans le cas où vous souhaitez déclarer une fonction qui retourne un objet de cette classe directement après la classe de déclaration, par exemple :
Aussi, vous devriez remarquer les erreurs du compilateur (ou mises en garde) qui apparaissent dans d'autres illégale cas, comme la déclaration d'une variable au lieu de
A()
, notez également que le compilateur indique qu'il ignore lainline
mot-clé si vous n'avez pas déclarer une fonction.Espère que c'est utile.
Edit : Pour Le commentaire de Eonil
Si vous parlez de votre code ci-dessus dans la question, alors que c'est le même cas que je vois, le compilateur va vous donner un avertissement :
'inline ' : ignored on left of 'AAA' when no variable is declared
Toutefois, si vous utilisez le code dans ma réponse, mais en remplaçant
A()
avec une variable,B
par exemple, il va générer une erreur de compilateur :'B' : 'inline' not permitted on data declarations
Nous avons trouvé que le compilateur a fait aucune erreur d'accepter de telles déclarations, que diriez-vous d'essayer d'écrire
inline double;
sur son propre? Il va générer un avertissement :'inline ' : ignored on left of 'double' when no variable is declared
Maintenant, comment au sujet de cette déclaration :
Il ne donne pas d'avertissements ou d'erreurs, c'est exactement la même chose que :
depuis la préséance de la
inline
n'est pas important du tout.Le premier code (dans l'ensemble de la réponse) est semblable à l'écriture :
qui est légal.
Et, dans d'autres, il peut être écrite comme suit :
Vous serait soulagé si vous voyez le premier code (dans l'ensemble de la réponse) s'écrit comme :
Mais ils sont les mêmes, car il n'y a pas d'importance pour l'ordre de préséance des
inline
.Espère que c'est claire et convaincante.
;
et qu'elle (la fonction) retourne un objet de cette classe (et la variable sera un objet de cette classe). Et pour cause, je n'ai pas vraiment de raison pour les fonctions, il y a peut être quelques raisons pour les variables, mais je n'ai pas l'un d'eux dans l'esprit.clang ne devrait pas permettre cela,
inline
ne peut être utilisé dans la déclaration des fonctions, de la norme ISO/IEC 14882:2003 7.1.2 [dcl.fct.spec] /1 :inline
est l'un des trois fonction spécificateurs de,virtual
etexplicit
être les autres.Comme @MatthieuM les notes, dans la prochaine version de C++ (C++0x), le
inline
mot-clé peut également être autorisé dans les définitions d'espaces de noms (avec des sémantiques différentes deinline
comme un fonction spécificateur de).J'ai obtenu une réponse de Clang liste de diffusion. C'était un bug:
http://llvm.org/bugs/show_bug.cgi?id=3941
Cependant, il semble déjà été corrigés dans la version récente.
Merci quand même 🙂
Voici la conversation:
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-March/014207.html