我有一些null结构,例如:
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,但我有些疑惑......
答案 0 :(得分:7)
尝试在未定义的行为中创建空引用结果。因此,即使它似乎“有效”,也绝不是一种好的做法。
如果您确实需要为引用类型的默认参数保留值,请声明相应类型的“虚拟”对象,并将其用作引用的默认值。