C++ 通用初始化-向量';s填充构造函数

C++ 通用初始化-向量';s填充构造函数,c++,initialization,c++17,stdvector,C++,Initialization,C++17,Stdvector,在c++17中是否可以调用此构造函数 vector( size_type count, const T& value, const Allocator& alloc = Allocator()); 对向量使用统一初始化?似乎std::vector data{10,20}创建了一个大小为2的向量。可能吗?当然 struct size_type { template<class T, std::enable_if_t<std::is_same_v<T,

在c++17中是否可以调用此构造函数

 vector( size_type count, const T& value, const Allocator& alloc = Allocator());
向量使用统一初始化?似乎
std::vector data{10,20}
创建了一个大小为2的向量。

可能吗?当然

struct size_type {
    template<class T, std::enable_if_t<std::is_same_v<T, std::vector<int>::size_type>>* = nullptr>
    operator T() const {
        return val;
    }
    std::vector<int>::size_type val;
};

std::vector<int> vi {size_type{10}, 4}; // vector of 10 ints with value 4
struct size\u类型{
模板
运算符T()常量{
返回val;
}
std::vector::size_type val;
};
向量vi{size_type{10},4};//值为4的10整数向量
只要
value\u-type
的类型与
size\u-type
的类型不同,这种方法就有效

你应该这样做吗?否。

当然可以:

std::vector<int> vi{10, 4, std::allocator<int>()};
std::vector vi{10,4,std::allocator()};

但是括号本身并没有什么问题。

简短的答案是否定的。这个问题以前在这里被问过,尽管追踪它可能并不容易。我们能花点时间欣赏一下“统一”初始化吗?这是否意味着我们需要混合使用:统一和旧方式初始化?@RSahu简短的答案是肯定的,较长的答案是不要。:-)@巴里,打得好。什么将
std::vector vi{size_type{10},4}做什么?(假设
std::vector::size_type
std::size_t
)它似乎调用了初始值设定项列表ctor(
std::vector
version)@bolov Yes,因此需要注意。注意,这个问题只问了
vector
。我只是好奇,似乎使用统一初始化可以避免一些错误。因此,我希望在所有地方使用它,而不是括号。顺便说一句,好的解决方法:)