在C ++中,请考虑语法规则:
member-access-expression:LHS 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)
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)
这是一个简单的例子:
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))。
这没有什么魔力,尽管通常在其他回答者演示的场景之外看到该构造,因为在此示例中它是多余的。
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |