我有以下示例
#include <cstdint>
class FooC
{
public:
FooC(uint16_t iPort, uint16_t iPin)
: PORT(iPort)
, PIN(iPin)
{
};
~FooC() = default;
FooC() = delete;
FooC(const FooC&) = delete;
FooC(FooC&&) = delete;
private:
const uint16_t PORT;
const uint16_t PIN;
};
int main()
{
FooC array[2] = {
FooC(1,2),
FooC(3,4)
};
}
而且我不想调用默认的,移动和复制构造函数。因此,我删除了功能。不幸的是,这导致以下错误(与C++ 11一起编译)
在此示例中是否可以强制使用参数调用构造函数,并且仍然删除默认值,移动并复制构造函数?
最佳答案
在C++ 11和C++ 14中,可以使用嵌套的花括号:
FooC array[2] = {{1,2}, {3,4}};
在C++ 17中,由于有了新的prvalue/物化规则(“保证复制省略”),您的代码应该已经可以正常工作了。