是否存在上下文表达“ ab :: c”有意义?

v.o*_*dou 16 c++

在C ++中,请考虑语法规则:

member-access-expressionLHS member-access-operator RHS
(op is .

LHS= unqualified,id-expression例如引用实例变量。
RHS=合格id-expression(带有至少一个嵌套标识符)

例: a.b::c

如果那能通过语义检查,那会是什么情况?

以下实验:

struct B{};

struct A
{
    B b;
};

int main()
{
    A a;
    a.b::c;
}
Run Code Online (Sandbox Code Playgroud)

退货

'b' is not a class, namespace, or enumeration
a.b::c;
  ^
Run Code Online (Sandbox Code Playgroud)

演示

这倾向于向我暗示,在成员访问权的右侧不会存在任何有关限定ID的法律案例。

Hol*_*olt 22

一个非常简单的示例是,如果您要调用父类的成员函数:

struct A {
    void f();
};

struct B: A {
    void f();
};

B b;
b.A::f();
Run Code Online (Sandbox Code Playgroud)

  • 您甚至不需要继承。A :: f()是A句号内函数f()的有效名称。https://coliru.stacked-crooked.com/a/67d13365926585bd (2认同)

and*_*eee 10

一个用例正在访问的一个成员enum中的一些struct A通过使用的实例A(而不是直接使用所述枚举通过A::b::c):

struct A {
    enum class b { c }; // can be unscoped as well
};

A a;
a.b::c; // Access to enum value c - similarly, A::b::c would work
Run Code Online (Sandbox Code Playgroud)


Lig*_*ica 5

这是一个简单的例子:

struct A {
    void f() {}
};

int main()
{
    A a;
    a.A::f();
}
Run Code Online (Sandbox Code Playgroud)

A::f()是一个合格的名称为功能版本f那的一员A。您可以在成员访问权限中使用它,就像“短”(或不合格)名称一样。

事实上,人们可能会认为你写的每一次a.f(),这是一个快捷a.A::f()(有A::部分是从自动拍摄decltype(a))。

这没有什么魔力,尽管通常在其他回答者演示的场景之外看到该构造,因为在此示例中它是多余的。