g++ 友员类的定义问题

sinosinux 2008-01-24 07:07:31
有A, B, C三个类

class A
{};

class B
{
friend A;
};

class C
{
friend class A;
};
class B的形式在vc2003上可以编译但是在g++上编译不过, class C的声明形式可以编译通过, 我想问问这两种书写方式哪一种是标准C++的语法呢?

下面的模板类在g++下无法通过编译, 应该写成什么形式呢?谢谢!!!
template <typename T>
class Final
{
friend T;
};
...全文
79 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2008-01-24
  • 打赏
  • 举报
回复
在ISO/IEC14882——CPP2003标准中所举的例子是显式使用class关键字的,下面是标准中的一个例子:

class X {
enum { a=100 };
friend class Y;
};
class Y {
int v[X::a]; // OK, Y is a friend of X
};

在11.4,P212

下面是我举的例子:

class A
{
};

struct S
{
};

union U
{
};

class B
{
friend class A;
friend struct S;
friend union U;
};


另外,ISO/IEC CPP2003标准中也明确规定,不能对在类中的友元类型的声明模板化。以下是原文:
8 A friend template shall not be declared in a local class.

下面是标准中举的几个例子:

class A {
template<class T> friend class B; // OK
template<class T> friend void f(T){ /* ... */ } // OK
};


class X {
template<class T> friend struct A;
class Y { };
};
template<class T> struct A { X::Y ab; }; // OK
template<class T> struct A<T*> { X::Y ab; }; // OK
星羽 2008-01-24
  • 打赏
  • 举报
回复

template <typename T>
class Final
{
friend typename T;
};


- -!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧