• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

返回一个指针,并传递一个const引用

c/c++ 来源:sc_ray 3次浏览

在试图了解POCO网络库here,我碰到下面的代码片段来了:返回一个指针,并传递一个const引用

class MyRequestHandlerFactory : public HTTPRequestHandlerFactory 
{ 
public: 
    virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &) 
    { 
    return new MyRequestHandler; 
    } 
}; 

我无法理解该方法的返回类型(HTTPRequestHandler*)和该方法的参数(const HTTPServerRequest &)。

为什么返回类型指针是HTTPRequestHandlernew MyRequestHandler是否将地址返回到可以通过其基本类型引用的对象?

此外,据我所知const是用来使引用不可变,以便该方法不会改变引用的对象,但没有为引用类型提供名称,并且它在createRequestHandler方法中没有使用。有人可以告诉我可能会发生什么吗?

由于

===========解决方案如下:

返回类型

如果你看一下“学习波苏”代码网址,

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()内不能更改该关键字。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)