C++ 随笔

Posted on 2012-02-09 23:09  无忧consume  阅读(105)  评论(0编辑  收藏  举报

指向const对象的指针

    const int *pi; ()pi指向const变量,不必初始化,但不可以修改其值

  const 可以指向非const变量,但是值就不定了,因为非const值可以修改,相应的const变量的值也会变

const指针(本身的值不可以修改所指对象,但是可以修改所指对象的值,必须初始化)

  int * const pi;

指向const对象的const指针

const+typedef

  例如:

  typedef string * pstring;

  const pstring cstr;等价于 string *const;因为const修饰的值指针因此是指常指针,而不是指向常对象的指针

动态数组初始化:

  int * pi = new int[10];创建10个未初始化的int型数组;

  int * pi = new int[10]();加空括号,创建10个初始化0的int型数组;括号内不可以填充其它

二维数组指针

  int a[10][10];

  int (*pi)[10];

  pi = &a;

sizeof

  sizeof (type name) - int or (int *)

  sizeof (expr) - expr包括变量

  sizeof expr 

引用形参

  int f(int &...);引用形参绑定到实参上,因此可以额外作为返回值(同效)

  需要传递大型实参,建议使用引用,避免赋值开销 bool f(const string &)

  注意,非const引用只能指向同类型非const对象(临时变量一般是const),  const引用可以指向不同类型(非)const对象,  

指向指针的引用

  int *& pi;

迭代器

  void f(vector<int>::const_iterator iter...)

数组形参:

  数组形参会转换成指针,不管是否形参加没加[n],编译器没有任何即使实现这个假设,但是形参和实参的数据类型要一致

   但是通过引用传递数组,那么数组大小就成为形参好实参的一部分void f(int (&arr)[10]) 里边的括号是必须的因为[]又更高的优先级,并且数据类型int也要严格匹配

可变形参

  void foo(para,...); ","可以省略

  或是void foo(...);

默认实参

  可以在函数声明或是定义是实参初始化,但是只能初始化一次,一般在声明(头文件)默认实参,定义的时候在cpp文件,不然只能在默认的cpp文件中有效

静态局部对象

  int f{

    static int count = 0;

  }

  静态局部对象,一旦初始化,在程序结束前不会撤销,并且多次调用函数都没问题,并且该变量一直保存该值,知道程序结束。

函数虫重载:

  至于函数参数有关,与返回类型无关

Copyright © 2024 无忧consume
Powered by .NET 8.0 on Kubernetes