将零传递给将指针作为参数的函数

时间:2014-08-28 17:36:04

标签: c++ function pointers

假设Car类的构造函数具有此签名

Car(Something* b[]) 

声明

 Car a(0);

也可以调用这个构造函数,或者参数必须是像

这样的指针
Car a(new Something[5]);

我也应该使用参考Something&如果我打算像上面的例子一样使用新语句,那么b []而不是指针?

2 个答案:

答案 0 :(得分:0)

是的,将零传递给将指针作为参数的函数将起作用。

Car a(0);

将使用空指针正确调用Car的构造函数,但如果构造函数没有检查空指针,则会遇到问题。

Car a(new Something[5]);

不会。您在Car中使用Something***声明[]的构造函数接受Car(Something* b[])。除非您想要指针指针,否则您可以将声明更改为Car(Something* b)Car(Something b[])

答案 1 :(得分:0)

是的,你可以传递0:它可以在预期的对象指针的任何地方用作空指针常量。你可能更喜欢写nullptr(在现代C ++中)或NULL(如果你被困在2011年之前的世界中),那就更明确一点了。

当然,如果构造函数没有检查参数是否为null,那么你会得到令人讨厌的运行时错误。

请注意,该函数实际上需要一个指向指针(或指针数组的第一个)的指针,而不是指向对象的指针,因此new Something[5](指向{的第一个数组的指针{1}})不是有效的参数。令人困惑的是,您可以将指针参数声明为数组,因此Something等同于T b[],而T * b等同于Something* b[]。要将指针传递给Something ** b(或Something数组中的第一个),请将声明更改为SomethingSomething*