【发布时间】:2016-03-09 23:38:57
【问题描述】:
试图编译下面的sn-p代码
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 位编译。
【问题讨论】:
-
使用花括号,考虑的隐式转换更少
-
必须从哪里转换到哪里?
-
vsize(size_t)必须转换为wchar_t -
没错,使用了
initializer_list<T>构造函数。大括号的内容是将存储在向量中的元素。 -
还有一个问题是列表初始化版本试图创建一个向量,其中一个元素的值为
vsize(因此需要缩小转换,这是不允许的)和构造函数版本尝试使用vsize元素创建一个向量,每个元素都初始化为零。决定你打算做什么——它们是不可互换的。
标签: c++ c++11 visual-c++ vector visual-studio-2015