117 votes

Quelle est la signification de "opérateur booléen() const" en C++

Par exemple, dans airplaysdk:

operator bool() const 
{ 
    return col!=0; 
}

col est un int. Comment est - operator bool() const travail?

181voto

James McNellis Points 193607

Fonctions de membre de la forme

operator TypeName()

sont des opérateurs de conversion. Ils permettent à des objets de la classe type à être utilisées comme si elles étaient de type TypeName et quand ils le sont, ils sont convertis en TypeName à l'aide de la fonction de conversion.

Dans ce cas particulier, operator bool() permet à un objet de la classe type à être utilisé comme s'il s'agissait d'un bool. Par exemple, si vous avez un objet de la classe type nommé obj, vous pouvez l'utiliser comme

if (obj)

Cela va lancer l' operator bool(), retourner le résultat, et utiliser le résultat que l'état de l' if.

Il convient de noter que operator bool() est Une Très Mauvaise Idée et que vous devriez ne jamais les utiliser. Pour une explication détaillée pour expliquer pourquoi il est mauvais et pour la solution du problème, voir "La Sécurité Bool Idiome."

(C++0x, la prochaine révision de la Norme C++, ajoute le support pour les opérateurs de conversion explicite. Ces éléments vont vous permettre d'écrire un coffre - explicit operator bool() qui fonctionne correctement sans avoir à sauter à travers les cerceaux de la mise en œuvre de la Sécurité Bool Idiom.)

9voto

langerra.com Points 528
operator bool() const 
{
    return col != 0;
}

Définit la façon dont la classe est convertible en une valeur booléenne, l' const après l' () est utilisé pour indiquer que cette méthode ne permet pas de muter (changer les membres de cette classe).

Vous devez généralement utiliser ces opérateurs comme suit:

airplaysdk sdkInstance;
if (sdkInstance) {
    std::cout << "Instance is active" << std::endl;
} else {
    std::cout << "Instance is in-active error!" << std::endl;
}

3voto

Nawaz Points 148870

Il est défini par l'utilisateur implicit fonction de conversion pour convertir votre classe en true ou false.

//usage
bool value = yourclassinstance; //yourclassinstance is converted into bool!

1voto

Billy ONeal Points 50631

C'est une conversion implicite en bool. I. e. partout où les conversions implicites sont autorisés, votre classe peut être converti bool par l'appel de cette méthode.

1voto

chrisaycock Points 12900

Comme les autres l'ont dit, c'est pour ce type de conversion, dans ce cas, à un bool. Par exemple:

class A {
    bool isItSafe;

public:
    operator bool() const
    {
        return isItSafe;
    }

    ...
};

Maintenant, je peux utiliser un objet de cette classe, comme si c'est un booléen:

A a;
...
if (a) {
    ....
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X