设为首页 加入收藏

TOP

c++ primer总结小点(一)
2013-12-05 13:05:09 来源: 作者: 【 】 浏览:604
Tags:  primer 总结 小点

  1、关于变量的初始化:如果一个变量在全局内定义的,那么系统会保证给他提供初始值0.如果变量在局部内定义的,或是通过new表达式动态分配的,则系统不会向他提供初始值0.这些对象被称为未初始化的。未初始化的对象不是没有值,而是他得值是未定义的。(与它相关联的内存区中含有一个随机的位串,可能是以前使用的结果。)

  因为未初始化对象是个常见的错误,而且很难发现,所以,一般建议为每个被定义的对象提供一个初始值。

  2、vector有两种使用风格:

  [cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  ___数组风格(定义时确定大小):

  vector<int> vec(10);

  这与用int ia 相似,都可以用下表方式访问,vec ia

  ___STL风格(定义时是空的,不确定大小的):

  vector<string> text;

  string word;

  while(cin 》 word){

  text.push_back(word);

  }

  for(vector<string>::iterator it = text.begin(); it!=text.end(); ++it){

  cout 《 *it 《 ' ';

  }

  ___不要混用两种风格:

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

  vector<int> vec;

  定义一个空vector,再写出这样的语句:

  vec[0] = 1024;

  就是错误的,因为vec还么有第一个元素

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

  类似的,当我们定义一个给定大小的vector时,例如:

  vector<int> vec(10);

  任何一个插入操作都将增加vec的大小,而不是覆盖某个现在的元素。

  如果执行vec.push_back(1024),那么vec的长度会增加到11,也就是说刚刚插入的元素1024是vec的第11个元素。

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

  3、sizeof是操作符,类似于"+="、"&"、"++"等,而不是一个函数

  [cpp]

  在CODE上查看代码片派生到我的代码片

  int ia[] = {1.2.3};

  //返回整个数组的大小,而不是数组中元素的个数

  size_t array_size = sizeof ia;

  //sizeof int 返回int类型的大小,下面这句返回的是数组中元素的个数

  size_t element_size = array_size/sizeof(int);

  但下面这种情况则是返回指针的大小,而不是数组的长度,更不是数组中元素的个数

  int *pi = new int ;

  size_t pointer_size = sizeof(pi);

  4、关于new、delete、vector

  [cpp]

  在CODE上查看代码片派生到我的代码片

  vector<string> svec(10);//合法

  vector<string> *pvec1 = new vector<string>(10);//合法

  vector<string> **pvec2 = new vector<string> ;//非法,new返回的是指针类型(*),而不是指向指针的指针类型(**)

  vector<string> *pvec3 = new vector<string> ;//合法

  vector<string> *pv1 = &svec;

  vector<string> *pv2 = pvec1;

  delete svec;//非法,不能delete非new的

  delete pvec1;//合法

  delete [] pvec2;//合法

  delete [] pvec3;//合法

  delete pv1;//合法

  delete pv2;//合法

  5、数组的长度必须是const的,不同的编译器对int ia[0]的解释不同,有正确也有错误。

  vector、list等容器的长度可以使常量const,也可以是非常量。

  6、string的查找返回i值:

  [cpp]

  在CODE上查看代码片派生到我的代码片

  string st("abcdabc");

  string::size_type pos = find(st);

  7、如果函数已经声明为inline(内联),则函数体可能已经在编译期间它的调用点就被展开。如果没有被声明为inline,则函数在运行时才被调用。

  8、在C++函数传递参数时,数组永远不会按值传递。他是传递第一个元素(准确的说是第0个)的指针,下面三个声明是等价的:

  [cpp]

  在CODE上查看代码片派生到我的代码片

  void putValues(int*);

  void putValues(int []);

  void putValues(int );

  9、缺省情况下,函数的返回值是按值传递的(passed by value),这意味着得到控制权的函数将接受返回语句中指定的表达式的拷贝。

  该缺省行为可以被改变。一个函数可以被声明为返回一个指针或者一个引用。

  如果返回的是一个大型对象,用引用或指针返回类型比按值类型返回类对象效率要高得多。在某些情况下,编译器自动将按值返回转换到按引用返回。该优化被称为"命名返回值优化".

  [cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  //当声明一个返回引用的函数时,当返回一个指向局部对象的引用。

  //局部对象的声明周期随函数的结束而结束。

  //在函数结束后,该引用变成未定义的内存的别名。

  //问题:返回一个指向局部对象的引用

  Matrix & add(Matrix &m1, Matrix &m2)

  {

  Matrix res;

  ……//对m1和m2进行加操作

  //返回之后,结果指向了一个有问题的位置

  return res;

  }

  //在这种情况下,返回类型应该被声明为非引用类型。

  //然后在局部对象的声明周期结束之前,拷贝局部变量。

  10、extern "C" 含义:实现C++与C及其它语言的混合编程,混合调用。例如:

  在声明的时候将函数用extern "C" {xxType xxFunc();}所包围,调用的时候用extern xxType xxFunc();声明该函数后使用。

  11、函数指针:

  [cpp]

  在CODE上查看代码片派生到我的代码片

  int func(int);//普通函数

  int func1(int);//普通函数

  int (*pf)(int);//函数指针

  pf = func;//为函数指针赋值

  int (*pfs )(int);//定义函数指针数组,长度为2

  typedef int (*PFV)();//定义函数类型指针typedef

  PFV test ;//定义函数指针数组

  test[0] = func;

  test = func1;

  12、头文件为所向extern对象声明、函数声明、inline函数定义提供了一个集中的位置:被称作声明的局部化。如果一个文件要使用或定义一个对象或函数时,它必须包含相应的头文件。

  头文件提供的声明逻辑上应该属于一个组。

  头文件不应该含有非inline函数或对象的定义。符号常量(const int PI = 3.14)和inline函数不受此限制。

     

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于超级源点和超级汇点问题 下一篇c++中*& 和**& 符合作..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)