龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++的可移植性和跨平台开发[2]:语法(3)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
★慎用嵌套类(不支持新标准) 如果在内部类访问外部类的非公有成员,要把内部类声明为外部类的friend。 如下代码存在移植问题。 class COuter { private:

  ★慎用嵌套类(不支持新标准)

  如果在内部类访问外部类的非公有成员,要把内部类声明为外部类的friend。

  如下代码存在移植问题。

class COuter

{

private:

 char* m_name;

public:

 class CInner

 {

  void Print(COuter* outer)

  {

   cout << outer->m_name;

  }

 };

};

  应该改为如下代码

class COuter

{

private:

 char* m_name;

public:

 class CInner; //前置声明

 friend class CInner;

 class CInner

 {

  void Print(COuter* outer)

  {

   cout << outer->m_name;

  }

 };

};

  ★不要定义参数类型相近的函数(标准未定义)

void Foo(short n);

void Foo(long n);

Foo(0); //会导致二义性错误

  ★不要依赖标准类型的字长(标准未定义)

  某些标准类型(例如int、wchar_t)的字长会随着具体的平台而改变。

  ★用枚举代替类的静态成员常量(不支持新标准)

  某些老式的编译器不支持类的静态成员常量,可以用枚举来代替。

class CFoo

{

 static const int MIN = 0; //不可移植

 enum { MAX = 64 }; //可移植

};

  今天说了这么一大堆,都比较琐碎,估计会有遗漏的。日后如果大伙儿发现有补充的,欢迎在本帖的评论中指教一二。由于篇幅有限,我把和异常相关的内容留到下一个话题。

精彩图集

赞助商链接