Maison > développement back-end > C++ > Pourquoi les membres entiers statiques const nécessitent-ils des définitions distinctes en C ?

Pourquoi les membres entiers statiques const nécessitent-ils des définitions distinctes en C ?

Susan Sarandon
Libérer: 2024-12-10 07:12:10
original
788 Les gens l'ont consulté

Why Do Static Const Integer Members Require Separate Definitions in C  ?

Définition de membres entiers const statiques dans la définition de classe

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'
}
Copier après la connexion

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.

Solution de contournement

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;
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal