1 votes

Pointeur nul vers une structure dont la taille est nulle (vide)... C'est une bonne pratique ?

J'ai quelques struct null, par exemple :

struct null_type
{
    null_type& someNonVirtualMethod()
    {
        return *this;
    }
};

Et dans certaines fonctions, je dois passer la référence à ce type. Raison :

template <typename T1 = null_type, typename T2 = null_type, ... >
class LooksLikeATupleButItsNotATuple
{
public:
    LooksLikeATupleButItsNotATuple(T1& ref1 = defParamHere, T2& ref2 = andHere..) 
        : _ref1(ref1), _ref2(ref2), ...
    {
    }

    void someCompositeFunctionHere()
    {
        _ref1.someNonVirtualMethod();
        _ref2.someNonVirtualMethod();
        ...
    }

private:
    T1& _ref1; 
    T2& _ref2; 
    ...;
};

C'est une bonne pratique d'utiliser la référence nulle comme paramètre par défaut ?

*static_cast<NullType*>(0)

Il fonctionne sur MSVC, mais j'ai quelques doutes...

7voto

AndreyT Points 139512

Toute tentative de créer une référence nulle entraîne un comportement non défini. Ce n'est donc jamais une bonne pratique, même si cela peut sembler "fonctionner".

Si vous avez vraiment besoin d'une valeur réservée pour un paramètre par défaut de type référence, déclarez un objet "factice" de type correspondant et utilisez-le comme valeur par défaut pour vos références.

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