1

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

这篇文章也提到了这种语法:

我可以从 C++ 中的另一个构造函数(做构造函数链接)调用构造函数吗?

另一个帖子讨论这个问题:

C++ 中的显式构造函数调用

4

2 回答 2

4

假定的显式构造函数调用不是有效的 C++ 语法。MSVC 接受此类代码的事实是一个错误

于 2013-10-28T18:06:15.943 回答
0

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

于 2013-10-28T18:49:42.503 回答