我有以下示例

#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/物化规则(“保证复制省略”),您的代码应该已经可以正常工作了。

10-06 06:43