假设我operator->
在一个基类中有两个版本的(在 const 上重载)。如果我说
using Base::operator->;
在派生类中,我可以访问两个版本还是仅访问非常量版本?
假设我operator->
在一个基类中有两个版本的(在 const 上重载)。如果我说
using Base::operator->;
在派生类中,我可以访问两个版本还是仅访问非常量版本?
与隐藏姓名相同的业务。要么全有,要么全无。使用声明(7.3.3)带来一个名称,而不是一个成员。
ISO/IEC 14882 (2003), 7.3.3。1/ using-declaration 将名称引入到 using-declaration 出现的声明性区域中。该名称是在别处声明的某个实体名称的同义词。
我鼓励你阅读 7.3.3,里面有一些微妙的东西。您不能 using-declare 模板,您 using-declare 名称所引用的所有成员都必须是可访问的,这些名称与找到 using 声明的块中的名称一起被考虑用于重载解析(即它们不隐藏任何东西) 等等等等。
您可以访问该父项中具有相同名称的方法/运算符的所有版本。
两个都。你试过了吗?(该死的答案很短:嗯,这是示例:
#include <iostream>
#include <string>
struct bar
{
void foo() { std::cout << "non_c:foo()" << std::endl; }
void foo() const { std::cout << "c:foo()" << std::endl; }
};
class base
{
public:
bar* operator->() { return &b; }
bar const* operator->() const { return &b; }
private:
bar b;
};
class derived : public base
{
public:
using base::operator->;
};
int main(void)
{
const derived d = derived();
derived e;
d->foo();
e->foo();
}