这是一个测试问题:
考虑以下代码:
class A {
typedef int I; // private member
I f();
friend I g(I);
static I x;
};
以下哪项是有效的:
a. A::I A::f() { return 0; }
b. A::I g(A::I p = A::x);
c. A::I g(A::I p) { return 0; }
d. A::I A::x = 0;
该问题的答案仅在第一个版本(a。)中才被认为是正确的,但是为什么呢?我认为所有这些都是有效的。甚至测试了所有代码,它们都能成功编译。为什么只有第一个答案是正确的?
最初为测试写答案的人是错误的。
该示例在标准中使用模板进行了进一步扩展(在此将省略它们):
class A {
typedef int I; // private member
I f();
friend I g(I);
static I x;
};
A::I A::f() { return 0; }
A::I g(A::I p = A::x);
A::I g(A::I p) { return 0; }
A::I A::x = 0;
此处,所有的用法
A::I
都是格式正确的,因为A::f
和A::x
都是类A的成员,而g是类A的朋友。这意味着,例如,A::I
必须推迟对首次使用的访问检查,直到确定该使用为止的A::I
是作为类A的一个成员的返回类型]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句