我有一些指针:
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填充数组字段的正确方法是什么?
如果您了解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)
| 归档时间: |
|
| 查看次数: |
2905 次 |
| 最近记录: |