从'::size_t'转换为'int'需要缩小转换范围
conversion from '::size_t' to 'int' requires a narrowing conversion
我正在尝试使用"使用C++编程原则和实践"第 18 章中给出的代码实现容器类。当我使用 initializer_list 编写初始化代码时,出现此错误:"从 '::size_t' 到 'int' 的转换需要缩小转换范围"。
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
class vector
{
public:
vector(int s)
:sz{ s },
elem{ new double[sz] }
{
for (int i = 0; i < sz; i++)
elem[i] = 0.0;
}
vector(std::initializer_list<double>lst)
:sz{ lst.size() }, elem{ new double[sz] }
{ //compiler points to here for the error
std::copy(lst.begin(), lst.end(), elem);
}
~vector() { delete[] elem; }
int size() const { return sz; }
double get(int n) const { return elem[n]; }
void set(int n, double d) { elem[n] = d; }
private:
int sz;
double* elem;
};
您正在尝试将size_t
转换为int
。假设 32 位,size_t
最多可以容纳 2^32,因为它是无符号的,而int
只能容纳 2^31(因为它也可以有负值(。
执行此操作时:
vector(std::initializer_list<double>lst)
:sz{ lst.size() }
如果lst.size()
大于 int
存储的值,则无法正确存储该值。解决方案是只在内部使用 std::vector
,并摆脱sz
成员,但看到它看起来好像你正在尝试制作自己的vector
类,你应该只sz
做一个size_t
,因为它更好地代表了你想要做的事情。毕竟,并不是说你的vector
可以有< 0
元素。
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 将 int 数组转换为 std::vector<int*>
- 如何转换 int 变量并附加到常量 wchar_t*
- 类型转换<int>的舍入问题
- 在Objective-C中调用sqlite3数据库时,如何调用和转换int/NSNumber
- 转换 int -> 无符号长 长 是否由标准定义
- 简单的 int 到字符串转换..int to const char* 无效
- 如何将转换 int 除法键入为浮点数
- C++类型转换 int * 到类
- 预期的类型说明符,并且无法在初始化时转换“int*”
- 转换int并将其与char*连接
- 字符串流在转换int型时添加新行
- 转换int为字符串/char c++ /Arduino
- c# P-Invoke:如何转换INT fun(BYTE *bStream, UINT16 *nCount, const
- 类型转换(int**)和int(*)的区别
- 从"int"到"nodeType"的无效转换<int>
- 从无符号int构造对强制转换int的引用