从size_t到wchar_t的转换需要缩小转换范围

Conversion from size_t to wchar_t requires a narrowing conversion

本文关键字:转换 缩小 范围 wchar size      更新时间:2023-10-16

尝试编译以下代码片段

static std::vector<wchar_t> produceStrings(int n) {
   std::size_t vsize = 4 * n;
   auto v = std::vector<wchar_t>{ vsize };
   // ...
}

在VS2015中给了我错误:

error C2398: Element '1': conversion from 'size_t' to 'wchar_t'
requires a narrowing conversion

取代v的定义

std::vector<wchar_t> v(vsize);

然而,它是有效的。用例如10替换vsize也同样有效。

为什么?

编辑:我正在为32位编译。

std::vector<wchar_t>{ vsize };尝试创建一个仅包含元素vsize的向量,该向量将执行从size_twchar_t的转换。

std::vector<wchar_t>(vsize);构造了一个保留了vsize元素的向量,这是非常好的。