主线之外(缺啥补啥)
code_hrbeu
这个作者很懒,什么都没留下…
展开
-
默认初始化
虽然保险的做法是对每个变量都显示初始化,但是了解一下默认初始化的规则也是很有必要的。1.定义于任何函数体之外的变量被初始化为0。2.定义在函数体内部的局部变量不会被默认初始化。所以,它的值是未定义的(这里的“未定义”我的理解:变量所分配内存中的二进制数据,分配时是什么就是什么,机器会按照变量的类型来解读这串二进制数据)。3.对于局部静态对象(在函数体内加了前缀static)如果没有显示原创 2016-06-12 16:38:14 · 354 阅读 · 0 评论 -
数组作为形参
数组的两个特性:数组不能被拷贝;数组名会被转换成指针;以下3中print()函数是等价的,编译器处理对函数的调用时只检查传入的参数是不是const int *;void print(const int *);void print(const int [ ]);//对编译器来说是一样的,这里主要是为了告诉使用者,函数的意图的作用于一个数组;void print(con原创 2016-07-21 17:23:56 · 1041 阅读 · 0 评论 -
一个关于const的初始化规则
例如:const int a=5;int b=a;// 正确const int * const p=&a;int * p1= p;//错误其实很好理解,初始化时只要不存在改变const常量的隐患的都是正确的初始化。用比较形式化的话说就是初始化时不能忽略底层const,我们可以用一个非常量来初始化一个被底层const修饰的对象,反过来则不对。原创 2016-07-21 16:49:05 · 449 阅读 · 0 评论 -
分离式编译的概念
我们在写大型程序的时候,肯定希望把不同功能的代码放在不同的文件中。比如我们可以把一个函数或者一个类单独放在一个文件中。这个时候编译器就需要分离式编译这些文件,最后形成可执行文件。文件为编译器的编译单元,编译器先把这些文件单独编译产生一些后缀名为.obj(windows)或.o(uinx)的文件。后缀的名字含义是object code(对象代码)。然后编译器在把这些对象文件连接在一起形成原创 2016-07-21 15:56:38 · 406 阅读 · 0 评论 -
关于在头文件里定义变量的探讨
之前提到一个网上的问题,关于在头文件里定义变量。最近想尝试一下,结果是令人困惑的。其实吧,在头文件里定义变量这个事情其实是无一利而百害的,估计搞编译器的人也不会特别的研究怎么让人舒服的在头文件里定义个全局变量。谈谈实验结果:我想在一个头文件里定义一个全局变量,我想在不管任何cpp里使用它(已经把头文件包含进去),结果是令人沮丧的。编译不通过,无法识别变量名。除非我在相应的cpp里用ex原创 2016-06-21 22:23:14 · 566 阅读 · 0 评论 -
声明和定义,文件保护符,extern
声明和定义以前关注的不够,导致文件保护符和extern理解不上去。这里先整理一下。知识点:(变量可以被声明很多次,但是只能定义一次)所以我们就很有必要知道哪些是定义式哪些是声明式声明式:extern int x;//对象声明式int num(int number);//函数声明式class Widget;//类声明式templateclass Graph;//原创 2016-06-11 18:36:27 · 522 阅读 · 0 评论 -
vector,迭代器,数组
vector#includeusing std::vector;初始化;常用的操作:v.empty();v.size(); 返回的也是配套的size_type类型。v.push_back(t);在尾端添加一个值为t的元素。注意的是,不能用下标运算添加元素。如果在循环体里有添加vector元素的语句,则不能使用范围for语句。v[ n];下标运算符。v1原创 2016-07-04 16:21:05 · 1028 阅读 · 0 评论 -
C++命名空间
梗概:1.作用域的概念划分;2. 命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。如: namespace ns1 //指定命名中间nsl { int a; double b; } namespace 是定义命名转载 2016-06-17 21:37:35 · 247 阅读 · 0 评论 -
安装opencv库
因为项目需求需要做图像处理,所以安装了opencv库,安装过程可谓是麻烦不断,这个简述一下,防止遗忘。首先去官网下载了最新的opencv for windows。我选择安装在c盘。打开opencv文件夹看到两个子文件夹。一个是build(里面有头文件include和一些用不同编译器编译好的文件,现在有java,python,vc11,vc12,如果你用的是这些编译环境就可以直接用就行。原创 2016-07-01 14:47:57 · 1083 阅读 · 0 评论 -
局部变量加上static之后依然是局部变量
#includeint count_calls(){ static int a = 0 ; return ++a;}int main(){ for(int i=0;i<10;i++) { static int b=0; b++; std::cout << count_calls()<<" "<<b<<std原创 2016-06-13 22:47:30 · 659 阅读 · 0 评论 -
标准库类型string
头文件 #include命名空间:std初始化:需要注意的是 string s(10,‘c’);//s是由10个c组成的串。 string(10)是错误的,这和vector有点区别;string对象上的操作读写osis>>sgetline(is,s)这里要注意的是缓冲的存在,还要注意的是>>读之后,换行符还在缓冲区。getline读一行后,换行符被丢弃。原创 2016-06-28 11:06:35 · 384 阅读 · 0 评论 -
关于缓存和流
#include #includeusing namespace std;int main(){ cout << "Hello world!" << endl; string word; while(cin>>word) { cout<<word<<endl; } return 0;}遇到这个小代码的时候,还没有想到缓原创 2016-06-23 09:25:30 · 238 阅读 · 0 评论