将零传递给将指针作为参数的函数
Passing zero to function that takes pointer as parameter
假设类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 * b
,Something* b[]
等效于Something ** b
。为了将指针传递给Something
(或Something
数组的第一个),请将声明更改为Something*
或Something[]
。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类