答案不清楚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。),但为什么?所有这些在我看来都是有效的。甚至测试他们编译成功。为什么只有第一个答案是正确的?

谁写的测试的原始答案是错误的。

>这个例子(完全)来自C标准本身,第11/7节,[class.access],并且已经由编写“测试”的人复制,

示例在标准中更进一步,使用模板(我会在这里省略它们):

      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;

>引用标准的解释:

Here, all the uses of A::I are well-formed because A::f and A::x are
members of class A and g is a friend of class A. This implies, for
example, that access checking on the first use of A::I must be
deferred until it is determined that this use of A::I is as the return
type of a member of class A. ]

> It compiles with both gcc and clang

http://stackoverflow.com/questions/24770875/the-answer-is-not-clear-c

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:答案不清楚c