c++ - 从 '::size_t' 到 'int' 的转换需要缩小转换

标签 c++

我正在尝试使用“使用 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成员(member),但看起来好像您正在尝试制作自己的 vector类,你应该做 sz一个size_t ,因为它更好地代表了您正在尝试做的事情。毕竟,这不像是你的 vector可以有< 0其中的元素。

关于c++ - 从 '::size_t' 到 'int' 的转换需要缩小转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49703777/

相关文章:

c++ - ListView 最初不显示数据

c++ - OpenMP parallel for inside do-while

c++ - 将 void 指针分配给另一个 void 指针

c++ - 指针没有传递它们的值

c++ - 使用 pqxx 编译程序时出现问题

c++ - 如何确定索引模式 SDL_Surface 是否具有透明度?

c++ - GLSL bool 值的大小是多少

python - SWIG 和 Boost::变体

c++ - boost 时出现段错误( boost :filesystem:exists)

c++ - C++11 标准是否保证跨实现的相同种子具有相同的随机数?