一千萬個為什麽

搜索

空指針指向大小為零的結構(空)...這是一個好習慣嗎?

我有一些null結構,例如:

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

在某些功能中,我需要傳遞對此類型的引用。 原因:

template 
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(0)

它適用於MSVC,但我有些疑惑......

最佳答案

任何嘗試在未定義的行為中創建空引用結果。因此,即使它似乎“有效”,它也絕不是一種好的做法。

如果確實需要為引用類型的默認參數保留值,請聲明相應類型的“虛擬”對象,並將其用作引用的默認值。

轉載註明原文: 空指針指向大小為零的結構(空)...這是一個好習慣嗎?