我怎样才能做相当于:
#include <vector>
size_t bufferSize = 1024 * 1024;
std::vector<unsigned char> buffer(bufferSize, ' ');
用列表(大括号)初始化?
当我尝试执行以下操作时:
#include <vector>
size_t bufferSize = 1024 * 1024;
std::vector<unsigned char> buffer {bufferSize, ' '};
它错误地将 bufferSize
解释为要存储在容器第一个索引中的值(即调用了错误的 std::vector
构造函数),并且无法编译由于从 unsigned int
(size_t
) 到 unsigned char
的无效缩小转换。
最佳答案
简短回答:你没有。
这不是统一初始化本身的问题,而是 std::initializer_list
的问题。有一个 special rule在重载决议中,如果使用列表初始化,始终优先考虑采用std::initializer_list
的构造函数,无论可能需要较少隐式转换的其他构造函数的存在。
我建议使用
std::vector<unsigned char> buffer(bufferSize, ' ');
或者,如果您真的想要使用列表初始化,请围绕std::vector
创建您的包装器,提供构造函数重载正确的事情。
关于c++ - 使用列表初始化(花括号)分配 vector 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53541937/