相关疑难解决方法(0)

重载成员访问运算符 - > ,.*(C++)

据我所知大多数运算符重载,与成员访问运营商外->,.*,->*等.

特别是,传递给这些操作符函数的内容以及应返回的内容是什么?

操作员如何运作(例如operator->(...))知道所指的成员是什么?可以知道吗?它甚至需要知道吗?

最后,是否需要考虑常见因素?例如,当重载类似的东西时operator[],通常你需要const和非const版本.成员访问运算符是否需要const和非const版本?

c++ operator-overloading c++-faq

119
推荐指数
5
解决办法
8万
查看次数

什么是"智能指向成员"的真实示例?

澄清英语中可能的优先歧义:我们正在采取"智能(指向成员的指针)",而不是"(智能指针)成员".

我会将一个指向成员智能指针定义为带有operator ->* (T* lhs, X rhs)重载的类X.

在他的文章"实现操作符 - >*用于智能指针"中,Scott Meyers只是简单地触及指向成员的智能指针,因为当时(1999)特定问题对于成员的原始指针来说已经足够困难了(旁注:后者优雅地解决了)这里有lambdas ).

无论如何,Scott Meyers写了一个脚注:

在撰写本文草稿后不久,我的一位咨询客户向我展示了一个问题,这个问题通过智能指向成员的方式自然而然地解决了.我也很惊讶.

我试图找到一个这样一个成员的自然智能指针的例子.但是我既不能自己想出任何东西,也没有在线搜索发现我在寻找什么.

你知道任何现实世界"成员智能指针"的例子吗?

编辑:我不是在寻找任何->*过载(如某些EDSL所做的那样).针对具有类似内置语义的语义示例->*,我上面的定义明确要求lhs是一个原始指针.

c++ pointers smart-pointers operator-overloading operators

14
推荐指数
1
解决办法
460
查看次数

原始C++指针是第一类对象吗?

根据维基百科:

一个对象是第一类的:

  • 可以存储在变量和数据结构中
  • 可以作为参数传递给子程序
  • 可以作为子例程的结果返回
  • 可以在运行时构造
  • 具有内在身份(独立于任何给定名称)

有人曾告诉我原始指针不是第一类对象,而像std :: auto_ptr这样的智能指针是.但对我来说,C++中的原始指针(对象或函数)在我看来确实满足上述条件才有资格作为第一类对象.我错过了什么吗?

c++ programming-languages

8
推荐指数
1
解决办法
1914
查看次数

为什么std :: shared_ptr没有运算符 - >*?

为什么std :: shared_ptr没有operator->*

使用可变参数模板看起来很容易.

有关详细信息,请参阅此文章.

编辑:这似乎是一个潜在的重复:关于shared_ptr和指向成员运算符的指针` - >*`和`std :: bind`

c++ shared-ptr variadic-templates

6
推荐指数
1
解决办法
391
查看次数