C++ 通用初始化-向量';s填充构造函数
在c++17中是否可以调用此构造函数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,
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
。我只是好奇,似乎使用统一初始化可以避免一些错误。因此,我希望在所有地方使用它,而不是括号。顺便说一句,好的解决方法:)