c++ - 如何用 NULL 填充指针数组?

标签 c++ arrays

我有指针数组:

private:
    LimitOrder* orders[Size];

在构造函数中,我试图用 NULL 填充它:

InternalIdAssigner::InternalIdAssigner(void):
    lastCleanId(0)
{
    std::fill(orders, orders + Size, NULL);

但这不起作用,我收到错误:error C2440: '=' : cannot convert from 'const int' to 'LimitOrder *'

用 NULL 填充数组字段的正确方法是什么?

最佳答案

如果您了解 NULL 的真正含义,错误消息就很清楚了:文字 0

当您将 0 传递给模板时,推导的类型是 int,而不是指针类型。虽然文字 0 可以隐式转换为任何指针类型并且将是一个空指针,但如果传递给 fill 它之后它只是一个 int值为 0,不能转换为指针类型。

在 C++11 中,您可以而且应该使用 nullptr 而不是 NULL。在 C++03 中,您还可以将指针转换为目标类型:

std::fill(orders, orders + Size, static_cast<LimitOrder*>(0));

但话又说回来,当您可以零初始化初始化列表中的数组时,为什么首先要完成这个过程?

InternalIdAssigner::InternalIdAssigner()
   : lastCleanId(), orders() {}

关于c++ - 如何用 NULL 填充指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729601/

相关文章:

java - 如果数组未满,则在末尾添加一个值

c++ - 清除图形的替代方法

c++ - 重载类方法与模板

C++:通过隐式构造函数初始化 int 变量

java - 包含大量空条目的大型数组

Javascript:存储最后生成的随机数

c++:通过单个函数调用替换多个索引相等性测试

c++ - 套接字上的音频 C++

c++ - 对数组的引用

java - 在 Object[] 数组上实现 Java 迭代器和可迭代接口(interface)