返回指针并传入常量引用
Returning a pointer and passing in a const reference
在这里学习poco网络库时,我遇到了以下片段:
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
{
return new MyRequestHandler;
}
};
我在理解方法的返回类型(HTTPRequestHandler*
)和方法的参数(const HTTPServerRequest &
)时遇到问题。
为什么返回类型是HTTPRequestHandler
指针?new MyRequestHandler
是否返回一个可以由其基类型引用的对象的地址?
此外,我知道const
是用来使引用不可变的,这样该方法就不会改变被引用的对象,但没有为引用类型提供名称,createRequestHandler
方法中也没有使用它。有人能告诉我这里可能发生了什么吗?
感谢
返回类型
如果你看"学习Poco"代码网站,
class MyRequestHandler : public HTTPRequestHandler
{
// ... removed code
};
MyRequestHandler派生自HTTPRequestHandler。因此,由于继承,MyRequestHandler是HTTPRequestHandler。因此,返回指向MyRequestHandler的指针是有效的,因为它也是指向HTTPRequestHandler的一个指针。
函数参数
该代码段令人困惑,因为它将参数指定为类型,但没有变量名。事实上,它与相同
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest & notUsed)
{
return new MyRequestHandler;
}
};
"notUsed"变量是。。。未使用。所以你会问,为什么会有争论?因为它正在重写基类HTTPRequestHandlerFactory中声明的函数。此函数将有一个参数const HTTPServerRequest &
,因此它也必须出现在派生类的重写函数中(即使未使用)。如果在函数createRequestHandler()
中使用"notUsed",则const
关键字可确保它不能在createRequestHandler()
中更改。
有两种方法可以返回访问对象而不在C++中复制对象的方法:返回指向对象的指针或返回对对象的引用。由于各种原因(例如,引用不可重新分配),指针往往是首选方法。请注意,如果它返回HTTPRequestHandler
而不是指向它的指针,那么这意味着对象将被复制。
不必提供参数名称,因为它未被使用。必须提供类型,以便函数签名完整。类似地,在正向声明函数时不必提供名称,因为编译器只关心类型和它们的顺序
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?