c/c++拾遗(三)

1,C++继承了ANSIC的预定于符号常量,预处理器在处理时将它们替换成确定的字面常量。
_LINE_:引用该符号的代码行号
_FILE_:源文件名称
_DATE_:该源文件被编译的日期
_TIME_:引用该符号的语句在源文件被编译的时间
_TIMESTAMP_:引用该符号的语句在源文件被编译的日期和时间
_STDC_:标准C语言环境定义用于表示当前环境
2,重载函数,如:
void f(int a);
void f(float a);
f(0.5);//不能通过编译,因为0.5是double类型,它到int和float的隐形转换一样好。
3,动态绑定,RIIT,vptr,ptable.
4,函数参数的默认值只能放在函数的声明中,而不能放在定义中。如果有多个参数,参数只能从后向前依次默认。
类虚成员函数的默认参数只具有静态绑定特性(编译时确定)。
5,c++不能重载的运算符:.*, ::, ?:, sizeof(), typeid(), static_cast<>, dynamic_cast<>, const_cast<>,

reinterpret_cast<>.
6,关键字inline必须与函数定义放在一起才能真正使函数内联,仅把inline放在函数声明前面不起任何作用。
7,异常处理try{}catch(){}
8,RTTI类型:typeid(对象或类名);Base * b = dynamic_cast<Base*>(d);
9,泛型指针auto_ptr和带有引用计数的智能指针(more effective c++)
10,不要使用多态性数组.
void fun(Base a[])
{
  for(i=0;i<num;i++)
 {
  a[i].memberFun();
  //delete a[i];
 }
}
Derived b[10];//动态或静态
如下调用:fun(b);在遍历实参数组a时(已经退化为指针),编译器是按照Base大小(sizeof(Base))移动指针,数组实际对象

的大小是sizeof(Derived)
11,重载前缀++/--,后缀++/--
class UPInt { // "unlimited precision int"
  public:
   UPInt& operator++(); // ++ 前缀
   const UPInt operator++(int); // ++ 后缀

   UPInt& operator--(); // -- 前缀
   const UPInt operator--(int); // -- 后缀

   UPInt& operator+=(int); // += 操作符,UPInts
                        // 与ints 相运算
   ...
  };
// 前缀形式:增加然后取回值
  UPInt& UPInt::operator++()
  {
   *this += 1; // 增加
   return *this; // 取回值
  }
  // postfix form: fetch and increment
  const UPInt UPInt::operator++(int)
  {
   UPInt oldValue = *this; // 取回值
   ++(*this); // 增加
   return oldValue; // 返回被取回的值
  }

你可能感兴趣的:(Date,File,语言,float,编译器,fun)