假设Car类的构造函数具有此签名
Car(Something* b[])
声明
Car a(0);
也可以调用这个构造函数,或者参数必须是像
这样的指针Car a(new Something[5]);
我也应该使用参考Something&如果我打算像上面的例子一样使用新语句,那么b []而不是指针?
答案 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
数组中的第一个),请将声明更改为Something
或Something*
。