gpt4 book ai didi

c++ - 了解 C++ 重构语法

转载 作者:太空狗 更新时间:2023-10-29 23:23:24 25 4
gpt4 key购买 nike

我们可以在对象创建后再次调用它的构造函数吗?

#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;
}

最佳答案

你不应该像这样调用构造函数,作为成员函数调用。原因是 (n3242, 12.1/2):

A constructor is used to initialize objects of its class type. Because constructors do not have names, they are never found during name lookup; however an explicit type conversion using the functional notation (5.2.3) will cause a constructor to be called to initialize an object.

如果你真的真的想在应该是对象的东西上调用构造函数——除非在非常特殊的情况下你不应该这样做——你可以使用调用构造函数的 placement new:

new (&a) A();

关于c++ - 了解 C++ 重构语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com