diag0220.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 130 行
C
130 行
struct X1 {
struct A {
int ai;
};
int f1( void )
{
A a;
int A::*apm;
apm = &A::ai;
return a.*apm;
}
int f2( void )
{
static A a;
int A::*apm;
apm = &A::ai;
return a.*apm;
}
};
struct X20 {
struct A {
int ai;
};
int f1( void )
{
A a;
A *pa;
int A::*apm;
pa = &a;
apm = &A::ai;
return pa->*apm;
}
int f2( void )
{
static A a;
A *pa;
int A::*apm;
pa = &a;
apm = &A::ai;
return pa->*apm;
}
};
struct X43 {
struct A {
int ai;
};
void f( void )
{
A a;
int A::*apm;
apm = &A::ai;
(a.*apm) = 1;
}
};
struct X55 {
struct A {
int ai;
};
void f( void )
{
A a;
A *pa;
int A::*apm;
pa = &a;
apm = &A::ai;
(pa->*apm) = 1;
}
};
struct B69 {
int bi;
};
struct D72 : public B69 {
int di;
};
void x76( void )
{
B69 b;
B69 *bp = &b;
int B69::*bpm = &B69::bi;
D72 d;
D72 *dp = &d;
int D72::*dpm = &D72::di;
(b.*dpm) = 1; // can't go from B69 to D72
(bp->*dpm) = 2; // can't go from B69* to D72*
}
void x89( void )
{
class B {
public:
int bi;
};
class D : private B {
public:
int di;
};
B b;
int B::* bpm = &B::bi;
D d;
int D::* dpm = &D::di;
(b.*bpm) = 1; // ok
(d.*dpm) = 2; // ok
(d.*bpm) = 3; // no good, not accessible
}
void x109( void )
{
class A {
public:
int ai;
};
class B : public A {
};
class D : public A, public B {
public:
int di;
};
A a;
int A::* apm = &A::ai;
D d;
int D::* dpm = &D::di;
(a.*apm) = 1; // ok
(d.*dpm) = 2; // ok
(d.*apm) = 3; // no good, ambiguous
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?