Après quelques recherche et de remplacement refactoring J'ai fini avec ce petit bijou:Que signifie "classe const"?
const class A
{
};
Que signifie « classe const »? Il semble compiler ok.
Après quelques recherche et de remplacement refactoring J'ai fini avec ce petit bijou:Que signifie "classe const"?
const class A
{
};
Que signifie « classe const »? Il semble compiler ok.
Que signifie "const class"? Il semble compiler ok.
Pas pour moi ce n'est pas le cas. Je pense que votre compilateur est juste poli et l'ignore.
Édition: Oui, VC++ ignore silencieusement la const, se plaint GCC.
Si vous aviez ceci:
alors cela signifierait clairement que 'a' est const. Sinon, je pense que C++ est probablement invalide.
Bonnes vieilles caractéristiques oubliées de C++! Je me souviens avoir fait des trucs comme ça en C il y a longtemps. –
Le const
n'a pas de sens dans cet exemple, et votre compilateur devrait vous donner une erreur, mais si vous l'utilisez pour déclarer des variables de cette catégorie entre la fermeture }
et le ;
, puis qui définit les cas comme const
, par exemple:
const class A
{
public:
int x, y;
} anInstance = {3, 4};
// The above is equivalent to:
const A anInstance = {3, 4};
Je ne trouve pas de justification pour faire de cette erreur une erreur. Les compilateurs peuvent émettre des avertissements à volonté, mais seul le standard détermine ce qui compte comme une erreur. – MSalters
Parce que vous déclarez quelque chose comme const qui ne l'est pas. C'est quelque chose qui n'est jamais ce que vous voulez faire, et devrait donc être une erreur. La norme devrait déterminer ce qui est correct. définir toutes les mauvaises choses serait trop de travail. – Bernard
Je pense que le terme utilisé dans la norme est "illformed". La norme ne dit pas ce qui n'est pas autorisé, seulement ce qui est. Cette syntaxe C++ n'est pas valide, elle n'est donc pas autorisée. – KeithB
Il n'a pas de sens, sauf si vous déclarez une instance de la classe après, comme cet exemple:
const // It is a const object...
class nullptr_t
{
public:
template<class T>
operator T*() const // convertible to any type of null non-member pointer...
{ return 0; }
template<class C, class T>
operator T C::*() const // or any type of null member pointer...
{ return 0; }
private:
void operator&() const; // Can't take address of nullptr
} nullptr = {};
unintermédiaireimplémentation si vous attendez C++ 0x.
Je vais dire qu'il ressemble à un cas de bord que VC++ se trompe –
On dirait; le 'const' n'affecte pas ce que je peux trouver. –
VC++ digère vraiment beaucoup de code mal formé (j'utilise 2013 maintenant). Il semble qu'ils l'ont testé juste pour des chemins heureux. – ubik