Tho*_*eod 2 c++ syntax constructor scope language-lawyer
我们可以在创建对象的构造函数后再次调用它吗?
#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;
}
Run Code Online (Sandbox Code Playgroud)
jpa*_*cek 11
你不应该像这样调用构造函数作为成员函数调用.原因是(n3242,12.1/2):
构造函数用于初始化其类类型的对象.因为构造函数没有名称,所以在名称查找期间永远不会找到它们; 但是,使用函数表示法(5.2.3)的显式类型转换将导致调用构造函数来初始化对象.
如果你真的真的想在一些应该是对象的东西上调用构造函数 - 除非在非常特殊的情况下你不应该这样做 - 你可以使用调用构造函数的placement new:
new (&a) A();
Run Code Online (Sandbox Code Playgroud)
好吧,a.A()无法编译,因为你根本无法在C++中调用构造函数.(你可以通过几种方式间接调用它.)出于同样的原因,我认为a.A::A() 不应该编译.