使用this-> classname :: classname(...)调用构造函数

时间:2013-10-28 17:51:37

标签: c++ constructor

我想知道这种形式的构造函数调用在哪里记录。 这个语法显然适用于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++?

另一篇讨论此事的帖子:

Explicit constructor call in C++

2 个答案:

答案 0 :(得分:4)

假定的显式构造函数调用不是有效的C ++语法。事实上,MSVC接受此类代码is a bug

答案 1 :(得分:0)

它没有用,因为你在中间创建了一个瞬态对象,并且当范围结束时它就会死掉。对象o中包含的任何值都保持不变,所以你得到了真值