gpt4 book ai didi

c++ - 返回指针并传入 const 引用

转载 作者:行者123 更新时间:2023-11-27 23:23:06 28 4
gpt4 key购买 nike

在尝试了解 poco 网络库时 here ,我遇到了以下片段:

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++ - 返回指针并传入 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444790/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com