程序:
#include<vector>
int main() {
std::vector<int>::size_type size=3;
std::vector<int> v{size};
}
用
编译时g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
生成错误:
ppp.cpp: In function ‘int main()’:
ppp.cpp:5:28: error: narrowing conversion of ‘size’ from ‘std::vector<int>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-fpermissive]
ppp.cpp:5:28: error: narrowing conversion of ‘size’ from ‘std::vector<int>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-fpermissive]
并在http://www.cplusplus.com/reference/stl/vector/vector/上写了
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
我期望使用构造函数。
有人可以解释一下吗?
答案 0 :(得分:19)
您没有调用将向量设置为初始大小的构造函数。
std::vector<int> v{size};
以上内容创建了一个vector
,其中包含值为int
的单个size
元素。你正在调用这个构造函数:
vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );
支持初始化列表被推导为std::initializer_list<size_type>
,然后必须执行缩小转换,因为vector
本身包含int
s。
要设置矢量的初始大小:
std::vector<int> v(size); // parentheses, not braces
此外,您列出的vector
构造函数不再存在,它已在C ++ 11中删除,并由以下两个构造函数替换:
vector( size_type count, const T& value, const Allocator& alloc = Allocator());
explicit vector( size_type count );
与cplusplus.com相比,cppreference.com是一个更好的参考。