C++ 在类定义中调用成员构造函数 structfoo { std::vector vec={5123}; };

C++ 在类定义中调用成员构造函数 structfoo { std::vector vec={5123}; };,c++,c++11,C++,C++11,上面的代码使用两个元素(5和123)初始化向量。我如何调用接受大小和初始值的构造函数-相当于std::vector vec(5123)您可以使用此表单,对于此表单,std::initializer\u list构造函数不参与重载解析: struct Foo { std::vector<int> vec = {5, 123}; }; std::vector vec=std::vector(5123); 这是否保证调用构造函数而不是复制构造函数?我之所以这样问,是因为我的嵌入式

上面的代码使用两个元素(5和123)初始化向量。我如何调用接受大小和初始值的构造函数-相当于
std::vector vec(5123)

您可以使用此表单,对于此表单,
std::initializer\u list
构造函数不参与重载解析:

struct Foo
{
    std::vector<int> vec = {5, 123};
};
std::vector vec=std::vector(5123);

这是否保证调用构造函数而不是复制构造函数?我之所以这样问,是因为我的嵌入式编译器在对具有已删除副本构造函数的类使用此语法时发出警告。@rozina在您的示例中,副本构造函数未被删除。一般来说,由于省略了复制,因此不应进行复制。但是这仍然要求该类型是可复制的,这就是为什么如果该类型不可复制,它应该失败(而不是警告,失败)的原因。我如何在类定义中使用两个int调用构造函数?@rozina AFAIK,只有在类具有移动复制构造函数的情况下才能这样做。但现在你问的是另一个问题。看看你实际问的问题。我正在为这个问题提供答案。我对这个问题进行了编辑。你是对的,我没有直接问我感兴趣的是什么,因为我一开始不知道怎么问:)vec(5123)有什么问题?@Default它在类定义中不起作用。
std::vector<int> vec = std::vector<int>(5, 123);