为引用成员变量提供默认值

Jja*_*ang 0 c++ constructor reference class object-lifetime

所以我在c ++中创建了一个有2个引用类型成员的类:

class Edge{
private:
const Node& base;
const Node& target;

public:
    Edge(const Node& new1, const Node& new2);
Run Code Online (Sandbox Code Playgroud)

我想在C'tor中给出base和target的默认值.意思就是:

Edge()
Run Code Online (Sandbox Code Playgroud)

不会出错,但会创建一个Edge对象.我怎么做?

编辑:我也想做:

Edge::Edge(const Node& newBase, const Node& newTarg)
{
    m_base=newBase;
    m_target=newTarg;
}
Run Code Online (Sandbox Code Playgroud)

但它不会让我,它说没有运营商"="匹配这些运营商.但我确实为节点做了一个"="运算符并检查它是否有效.......

Fle*_*exo 5

您可以像任何其他参数一样给出new1new2默认值.诀窍在于,因为它们是通过引用传递的,并且(大概)你正在使用它们进行设置,base并且target它们需要足够长的时间才能使它有意义.您可以通过将静态"虚拟" Node用作未指定的默认值来实现,例如:

class Node {};

class Edge{
private:
static const Node none;
const Node& base;
const Node& target;

public:
    Edge(const Node& new1=none, const Node& new2=none) : base(new1), target(new2) {}
};

const Node Edge::none;

int main() {
  Edge e;
}
Run Code Online (Sandbox Code Playgroud)

如果这是好的设计或不是另一个问题.对于您尝试解决的潜在问题,可能会有一个更智能的解决方案.

  • +1注意到这可能是糟糕的设计 (2认同)