首页 > 代码库 > C++,一些常用的知识点

C++,一些常用的知识点

1  用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读 性。 C++中是用关键字typedef定义一个标识符来代表一种数据类型,该标识符可以象其它基本类型的标识符一样使用。在用typedef进行类型定 义时,其语法和变量定义很相似。typedef定义的一般形式为: 
   typedef 原类型名 新类型名 
例如: 
   typedef int * intptr; 
定义intptr为一个指向整型的指针类型。变量定义语句: 
   intptr p; 
等价于: 
   int * p; 
   需要 注意 的是:typedef定义的类型只是C++已有类型的别名,而不是新类型。有时也可用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef则是在编译时完成的,后者更为灵活方便。

2  namespace的使用

有名的命名空间:

 

       namespace 命名空间名 {

 

              声明序列可选

 

       }

 

无名的命名空间:

 

       namespace {

 

              声明序列可选

 

       }

 

-------------------------------------------------

 

命名空间的成员,是在命名空间定义中的花括号内声明了名称。可以在命名空间的定义内,定义命名空间 的成员(内部定义)。也可以只在命名空间的定义内声明成员,而在命名空间的定义之外,定义命名空间的成员(外部定义)。

 

命名空间成员的外部定义的格式为:

 

命名空间名::成员名 ……

 

例如:

 

// out.h

 

namespace Outer { // 命名空间Outer的定义

 

       int i; // 命名空间Outer的成员i的内部定义

 

       namespace Inner { // 子命名空间Inner的内部定义

 

              void f() { i++; } // 命名空间Inner的成员f()的内部定义,其中的i为Outer::i

 

              int i;

 

              void g() { i++; } // 命名空间Inner的成员g()的内部定义,其中的i为Inner::i

 

              void h(); // 命名空间Inner的成员h()的声明

 

       }

 

       void f(); // 命名空间Outer的成员f()的声明

 

       // namespace Inner2; // 错误,不能声明子命名空间

 

}

 

void Outer::f() {i--;} // 命名空间Outer的成员f()的外部定义

 

void Outer::Inner::h() {i--;} // 命名空间Inner的成员h()的外部定义

 

// namespace Outer::Inner2 {} // 错误,不能在外部定义子命名空间

 

 

 

注意:

 

不能在命名空间的定义中声明(另一个嵌套的)子命名空间,只能在命名空间的定义中定义子命名空间。

 

也不能直接使用“命名空间名::成员名 ……”定义方式,为命名空间添加新成员,而必须先在命名空间的定义中添加新成员的声明。另外,命名空间是开放的,即可以随时把新的成员名称加入到已有的命 名空间之中去。方法是,多次声明和 定义同一命名空间,每次添加自己的新成员和名称。例如:

 

namespace A {

 

       int i;

 

       void f();

 

} // 现在A有成员i和f()

 

namespace A {

 

       int j;

 

       void g();

 

} // 现在A有成员i、f()、j和g()

 

还可以用多种方法,来组合现有的命名空间,让它们为我所用。例如:

 

namespace My_lib {

 

       using namespace His_string;

 

       using namespace Her_vector;

 

       using Your_list::List;

 

       void my_f(String &, List &);

 

}

 

……

 

using namespace My_lib;

 

……

 

Vector<String> vs[5];

 

List<int> li[10];

 

my_f(vs[2], li[5]);

 

使用命名空间

 

作用域解析运算符(::)