我想知道这种形式的构造函数调用在哪里记录。 这个语法显然适用于Visual Studio 6.0版(我知道它不能使用G ++编译)。
请注意,我不是在寻找替代方案,而是我不需要知道它的好坏。
class Foo
{
public:
int m_value;
Foo() : m_value(0) {}
};
Foo o;
o.m_value = 5;
o.Foo::Foo(); // Explicit constructor call!
EXPECT_EQ(0, o.m_value); // True!
我首先发现了这篇文章:
http://www.dreamincode.net/forums/topic/160032-finite-state-machines/
这篇文章也引用了这个语法:
Can I call a constructor from another constructor (do constructor chaining) in C++?
另一篇讨论此事的帖子:
答案 0 :(得分:4)
假定的显式构造函数调用不是有效的C ++语法。事实上,MSVC接受此类代码is a bug。
答案 1 :(得分:0)
它没有用,因为你在中间创建了一个瞬态对象,并且当范围结束时它就会死掉。对象o中包含的任何值都保持不变,所以你得到了真值