Partager via


Erreur du compilateur C3446

'classe' : un initialiseur de membre par défaut n’est pas autorisé pour un membre d’une classe value

Dans Visual Studio 2015 et antérieur, le compilateur autorisait (mais ignorait) un initialiseur de membre par défaut pour un membre d’une classe value. L’initialisation par défaut d’une classe value initialise systématiquement les membres à zéro ; un constructeur par défaut n’est pas autorisé. Dans Visual Studio 2017, les initialiseurs de membres par défaut déclenchent une erreur de compilateur, comme illustré dans cet exemple :

Exemple

L’exemple suivant génère l’erreur C3446 dans Visual Studio 2017 et versions ultérieures :

// C3446.cpp
value struct V
{
       int i = 0; // error C3446: 'V::i': a default member initializer
                  // is not allowed for a member of a value class
       int j {0}; // C3446
};

Pour corriger l’erreur, supprimez l’initialiseur :

// C3446b.cpp
value struct V
{
       int i;
       int j;
};