首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回指针并传入常量引用

返回指针并传入常量引用
EN

Stack Overflow用户
提问于 2012-07-12 11:55:13
回答 2查看 219关注 0票数 0

在尝试了解poco网络库here时,我发现了以下代码片段:

代码语言:javascript
运行
复制
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
  virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
  {
    return new MyRequestHandler;
  }
};

我在理解方法的返回类型(HTTPRequestHandler*)和方法的参数(const HTTPServerRequest &)时遇到了问题。

为什么返回类型是HTTPRequestHandler指针?new MyRequestHandler是否将地址返回给可由其基类型引用的对象?

另外,我知道const是用来使引用不可变的,这样方法就不会改变被引用的对象,但是没有为引用类型提供名称,createRequestHandler方法中也没有使用它。有人能告诉我这是怎么回事吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-12 12:35:53

返回类型

如果你看一下"Learning Poco“代码网站,

代码语言:javascript
运行
复制
class MyRequestHandler : public HTTPRequestHandler
{
    // ... removed code
};

MyRequestHandler由HTTPRequestHandler派生而来。因此,由于继承,MyRequestHandler是一个HTTPRequestHandler。因此,返回指向MyRequestHandler的指针是有效的,因为它也是指向HTTPRequestHandler的指针。

函数参数

这段代码令人困惑,因为它指定了一个参数作为类型,但没有指定变量名。它实际上与以下内容相同:

代码语言:javascript
运行
复制
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
  virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest & notUsed)
  {
    return new MyRequestHandler;
  }
};

'notUsed‘变量是...未使用。所以你会问,为什么会有争论呢?因为它覆盖了基类HTTPRequestHandlerFactory中声明的函数。此函数将有一个参数const HTTPServerRequest &,因此它还必须出现在派生类的重写函数中(即使没有使用)。如果要在函数createRequestHandler()中使用'notUsed‘,则const关键字可确保它不能在createRequestHandler()中更改。

票数 3
EN

Stack Overflow用户

发布于 2012-07-12 12:13:31

有两种方法可以返回访问对象的方法,而无需在C++中复制该对象:返回指向该对象的指针或返回对该对象的引用。由于各种原因,指针往往是首选方法(例如,引用不能重新分配)。请注意,如果它返回HTTPRequestHandler,而不是指向它的指针,则意味着对象将被复制。

不需要提供参数名称,因为它没有被使用。必须提供类型,以便函数签名完整。同样,在向前声明函数时也不必提供名称,因为编译器只关心类型及其进入的顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11444790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档