C++的可移植性和跨平台开发[2]:语法(3)
★慎用嵌套类(不支持新标准)
如果在内部类访问外部类的非公有成员,要把内部类声明为外部类的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 }; //可移植
};
今天说了这么一大堆,都比较琐碎,估计会有遗漏的。日后如果大伙儿发现有补充的,欢迎在本帖的评论中指教一二。由于篇幅有限,我把和异常相关的内容留到下一个话题。