【发布时间】:2012-07-07 21:00:34
【问题描述】:
对象创建后可以再次调用它的构造函数吗?
#include <iostream>
struct A
{
A ( ) { std::cout << "A::A" << std::endl; }
~A ( ) { std::cout << "A::~A" << std::endl; }
};
int main( )
{
A a;
a.~A(); // OK
a.A::A(); // OK in Visual Studio 2005, 2008, 2010
return 0;
}
【问题讨论】:
-
最后一次通话怎么会没问题? oO
-
在每个人开始将他们的赞成票转换为反对票之前。如果没有最后一次通话,问题仍然存在。
-
@ThomasMcLeod 不在 g++ 4.6.3 上,它没有。你用的是哪个编译器?
-
@ThomasMcLeod:不,这不是共识,因为我们还没有检查所有编译器。共识似乎是它不应该在任何标准兼容的编译器上工作。然而,非正式地,我们都同意 VC 很可能是此类错误的候选者。
-
在
a.A()中,A将结构类型命名为A。如果你说a.A::A(),最后一个A命名构造函数(这是根据标准规则)。然而,标准禁止直接调用构造函数(实际上除了一些关于构造函数的类似声明的事情之外,几乎所有事情都是不允许的)。
标签: c++ syntax constructor scope language-lawyer