some problems

来源:互联网 发布:网络拓扑的分层结构 编辑:程序博客网 时间:2024/05/16 12:03

1 inline函数可以减少程序开销,主要用于小型函数。任何在类中定义的函数自动成为内联函数,也可以使使用关键字inline使在类外定义的函数成为内联函数。

inline函数类似于宏展开,只是字符串的替换,没有保存环境,压栈之类的操作。但是不能应对比较复杂或者递归的函数。friend函数也可以是内联函数。

2 (int&)a 等价于*(int*)a

  eg: float a = 1.0;

      cout<<(int)a<<endl;

      cout<<(int&)a<<endl;

      cout<<((int)a==(int&)a)<<endl;

3 运算符重载:只有类类型的才能定义运算符重载(待求证)

4 c语言中printf("%sabc%%", "abc/0"); 输出结果为:abcabc%

5 函数调用问题

  参数类型的转换:

  <1> 对于所有比int小的整型,包括char, unsigned char, short, unsigned short,如果该类型的所有值都包容在int内,它们就会被提升为int,否则它们将被提升为unsigned int。

  <2> 枚举对象或枚举成员至少提升为int类型,如果int型无法表示枚举成员的最大值,则提升到能表示所有枚举成员最大值的、大于int的最小类型(unsighed int ,unsigned long).

  调用函数时,对于每一个实参,其类型都必须与对应的形参类型相同,或具有可被转换为该形参类型的类型。

  尽管函数的形参时const,但是编译器缺将函数的定义视为其形参被声明为普通类型。

  eg: void func(const int i) {}

      void func(int i) {} //redefinition

 

6 int *pi = new int;// pi points to an uninitialized int

  int *pi = new int();// pi points to an int value-initialized to 0

  对于提供了默认构造函数的类类型,没有必要对其对象进行值初始化,无论程序是明确的不初始化还是要求进行初始化,都会自动调用其默认构造函数初始化该对象。

int *p = NULL;

delete *p;//删除NULL指针是合法的,但是没有意义

7 在使用数组时,大部分情况下数组都会自动转换为指向第一个元素的指针:

  int ia[10];

  int *p = ia;

  不将数组转换为指针的例外情况有:数组用作取地址&操作符的操作或sizeof操作符的操作数时,或用数组对数组的引用进行初始化时。