C++ 答案并不清楚,c++;
下面是一个测试问题: 考虑以下代码:C++ 答案并不清楚,c++;,c++,C++,下面是一个测试问题: 考虑以下代码: 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. 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)才认为这个问题的答案是正确的,但为什么?在我看来,所有这些都是有效的。甚至测试了他们编译成功的所有代码。为什么只有第一个答案是正确的? < P>它们都是有效的C++。 以下是准确的代码,这是标准本身的一个示例: 我就是这样解析它们的:
a. A::I A::f() { return 0; } // defines A::f() which was previously prototyped
b. A::I g(A::I p = A::x); // declares prototype g(A::I), but doesn't define it
c. A::I g(A::I p) { return 0; } // defines g(A::I)
d. A::I A::x = 0; // defines static storage for A::x which was previously declared in A
这些都是单独或集体编译的。编写测试原始答案的人是错误的
- 这个例子(确切地说)来自C++标准本身,第§11/7节,[class.access],并且已经被编写“测试”的人复制
- 引用标准进行解释:
A::I
的所有用法都是格式良好的,因为A::f
和A::x
是
A类和g类的成员是A类的朋友
例如,第一次使用A::I
时的访问检查必须是
推迟到确定使用A::I
作为返回
a类成员的类型。]
typedef int I
是一个成员;它是私有类型,但不是真正的成员。但是,这几乎不会影响您问题的答案或问题内部的问题。@重复数据消除或OK;标准说类型是成员——我不会反对标准,我会尝试更新我的术语。我(过去)认为的成员显然是数据成员。哦,好吧……也许b&c被认为是不正确的(尽管这与无效不同),因为A::I是私有的,所以除了从私有方法(如f())调用外,您永远不能调用g()。我想不出一个可能的原因d被认为是错误的。@Narek:幸好你质疑了测试本身。科学怀疑+1您如何知道只有a)是正确的?问题说“是”,表明至少可以给出几个答案。你尝试了吗?这是OTAICE C++测试题。您可以在Google中搜索“typedefint I;//private member”,在每个站点中,Google查找您看到的正确答案的字符串仅标记为第一个答案。这是怎么回事?避免oDesk的另一个原因是什么?我可以用你提供的链接在线编译代码吗?
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;