Нулевой указатель на структуру, которая имеет нулевой размер (пустой) ... Это хорошая практика? - PullRequest
1 голос
/ 17 апреля 2010

У меня есть некоторая нулевая структура, например:

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

И в какой-то функции мне нужно передать ссылку на этот тип. Причина:

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; 
    ...;
};

Рекомендуется использовать нулевую ссылку в качестве параметра по умолчанию?:

*static_cast<NullType*>(0)

Он работает на MSVC, но у меня есть некоторые сомнения ...

1 Ответ

7 голосов
/ 17 апреля 2010

Любые попытки создать нулевую ссылку приводят к неопределенному поведению. Таким образом, это никогда не является хорошей практикой, даже если может показаться, что это «работает».

Если вам действительно необходимо иметь зарезервированное значение для параметра по умолчанию ссылочного типа, объявите «фиктивный» объект соответствующего типа и используйте его в качестве значения по умолчанию для ваших ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...