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

Passing zero to function that takes pointer as parameter

本文关键字:参数 函数 指针      更新时间:2023-10-16

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

Car(Something* b[]) 

报表是否

 Car a(0);

也调用这个构造函数,或者参数必须是类似的指针吗

Car a(new Something[5]);

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

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

Car a(0);

将使用空指针正确地调用Car的构造函数,尽管如果您的构造函数不检查空指针,您将遇到问题。

Car a(new Something[5]);

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

是的,您可以传递0:它可以用作空指针常量任何需要对象指针的地方。你可能更喜欢写nullptr(用现代C++)或NULL(如果你被困在2011年之前的世界里),让它稍微清楚地表明这就是目的。

当然,如果构造函数不检查参数是否为null,那么就会出现严重的运行时错误。

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