【发布时间】:2020-06-21 21:00:10
【问题描述】:
class Foo
{
public:
Foo() {}
Foo(int i)
: Foo(), m_bar(0) {}
private:
int m_bar;
};
是否有使此类代码有效的解决方法?
如果我们有一个委托构造函数,有没有办法在初始化列表中拥有多个成员?为什么要限制委托构造函数是初始化列表中的唯一成员。
【问题讨论】:
-
编译器应该将
m_bar初始化成什么?从他的角度来看,这两个陈述都是冲突的,因为一个变量只能被初始化一次(例如,如果你没有看到问题,请声明m_barconst)。但是,您可以在 ctor 的主体中为m_bar分配另一个值。请注意,这样的分配将在m_bar初始化之后发生。 -
虽然当然可以为这种情况添加优先规则到语言中,但我推测它被故意遗漏了,因为这些事情增加了复杂性(从语言和用户的角度来看)确实增加了任何显着的好处。
-
@SebastianHoffmann 这怎么能与非内联 ctor 一起工作?
-
@curiousguy 好点;当两个 ctor 都在不同的翻译单元中实现时,事情变得不平凡
标签: c++ constructor initialization language-lawyer member