Contrairement à la croyance populaire, l'initialisation d'une intégrale const statique dans la définition de classe n'est pas suffisante pour générer la définition nécessaire requise par un autre code. Comme en témoigne l'erreur de compilation signalée par le code fourni, une définition distincte est toujours obligatoire :
#include <algorithm> #include <iostream> class test { public: static const int N = 10; }; int main() { std::cout << test::N << "\n"; std::min(9, test::N); // Error: Undefined reference to `test::N' }
Ce problème provient du mécanisme de prise de paramètres de std::min : il capture les valeurs par référence const. Si cela était pris par valeur, aucune définition distincte ne serait nécessaire.
Bien que définir le membre const statique en dehors de la classe résout le problème, il existe une meilleure solution : utiliser le mot-clé constexpr. Cela élimine le besoin d'une définition distincte et gère d'autres cas extrêmes.
class test { public: static constexpr int N = 10; };
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!