我有指针数组:
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/