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)
但它不会让我,它说没有运营商"="匹配这些运营商.但我确实为节点做了一个"="运算符并检查它是否有效.......
您可以像任何其他参数一样给出new1和new2默认值.诀窍在于,因为它们是通过引用传递的,并且(大概)你正在使用它们进行设置,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)
如果这是好的设计或不是另一个问题.对于您尝试解决的潜在问题,可能会有一个更智能的解决方案.