繁体   English   中英

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

[英]Passing zero to function that takes pointer as parameter

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

Car(Something* b[]) 

请问声明

 Car a(0);

也调用此构造函数,或者参数必须是类似

Car a(new Something[5]);

如果我打算像上面的示例一样使用new语句,还应该使用引用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 * b ,而Something* b[]等效于Something ** b 为了将指针传递到一个Something (或到所述第一阵列的Something ),改变声明要么Something*Something[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM