【发布时间】:2018-11-29 15:04:53
【问题描述】:
我该怎么做相当于:
#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。
【问题讨论】:
-
你为什么坚持用“花括号初始化”来做这个?
-
@MaxLanghof 嗯,这叫统一初始化。人们可能会认为它应该是初始化对象的首选方式;)
-
@NathanOliver 相关xkcd.com/927
-
@OP 下面是一篇关于 C++ 初始化噩梦的精彩演讲:youtube.com/watch?v=7DTlWPgX6zs
-
@MaxLanghof 因为有些人建议在任何地方使用它,因为它“更安全”(没有最棘手的解析问题)。实际上它更危险。
标签: c++ c++11 list-initialization