Que signifie «class:» en C ++?

Je ne l’ai jamais vu auparavant. Je pensais que c’était une faute de frappe pour “:: sample”, mais quand j’ai vu cela comstack, j’étais très confus. Quelqu’un peut-il m’aider à découvrir s’il vous plaît? Je ne pense pas que ce soit un label goto .

 void f() { class: sample { // there were some members declared here } x; } 

C’est une classe sans nom, et les deux-points signifient qu’il hérite en privé de l’ sample . Voir comme

 class Foo : private sample { // ... }; Foo x; 

Je pense que cela définit une classe sans nom dérivée de l’ sample . Et x est une variable de cette classe sans nom.

 struct sample{ int i;}; sample f() { struct : sample { // there were some members declared here } x; xi = 10; return x; } int main() { sample s = f(); cout << si << endl; return 0; } 

Exemple de code sur ideone: http://www.ideone.com/6Mj8x

PS: j'ai changé de class en struct pour des raisons d'accessibilité!

C’est une classe sans nom.

Vous pouvez les utiliser, par exemple, pour remplacer les fonctions locales en pré-C ++ 11:

 int main() { struct { int operator() (int i) const { return 42; } } nice; nice(0xbeef); } 

Les deux-points suivis d’un sample signifient simplement dériver de l’ sample utilisant l’inheritance par défaut . (pour structs: public, pour les classes: private)