如何用NULL填充指针数组?

jav*_*red 1 c++ arrays

我有一些指针:

private:
    LimitOrder* orders[Size];
Run Code Online (Sandbox Code Playgroud)

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

InternalIdAssigner::InternalIdAssigner(void):
    lastCleanId(0)
{
    std::fill(orders, orders + Size, NULL);
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*eas 5

如果您了解NULL真正的内容,那么错误消息就很清楚了:文字0.

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

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

std::fill(orders, orders + Size, static_cast<LimitOrder*>(0));
Run Code Online (Sandbox Code Playgroud)

但话又说回过来,为什么在初始化列表中对数组进行零初始化时,首先要完成整个过程?

InternalIdAssigner::InternalIdAssigner()
   : lastCleanId(), orders() {}
Run Code Online (Sandbox Code Playgroud)