[英]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.