从size_t转换为wchar_t需要缩小转换

Joh*_*hnB 2 c++ vector visual-c++ c++11 visual-studio-2015

试图编译以下代码片段

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

在VS2015给我错误:

error C2398: Element '1': conversion from 'size_t' to 'wchar_t'
requires a narrowing conversion
Run Code Online (Sandbox Code Playgroud)

替换vby 的定义

std::vector<wchar_t> v(vsize);
Run Code Online (Sandbox Code Playgroud)

但是,有效.vsize用例如10 代替也可以.

为什么?

编辑:我正在编译32位.

Mic*_*ver 5

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

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

  • 它不是聚合初始化,因为向量不是聚合.它是列表初始化,通常禁止缩小,并包括聚合初始化. (4认同)