- 博客(15)
- 收藏
- 关注
原创 常量规则以及建立在整个类中都恒定的常量
C++中用const常量完全取代宏常量。关于建立在整个类中都恒定的常量:const数据成员只在某个对象生存期内是常量,而对类而言是可变的-因为类可以创建多个对象-不同对象的const数据成员可以不同所以应该用枚举常量来实现class A{ enum{SIZE1 = 100, SIZE2 = 200}; //枚举常量 int arrayA[SIZE1]; i...
2018-05-12 19:36:34
324
原创 C++编译器不支持模板的分离编译
模板分离编译的话,编译器会报错,这种错误属于链接错误。模板函数不能直接编译成二进制文件,我们需要一个“实例化”的过程。只有调用这个模板,才能够实例化。而当实例化一个模板时,编译器必须看到模板的确切定义,不只是声明。所以解决办法有两种:(1)在模板定义的cpp中显式实例化,例如:template class CArray<int>;(2)将声明定义放在同一个文件中。...
2018-05-12 15:25:02
336
原创 程序编译流程
关于程序编译的一些规范和方法,首先把源文件编译程中间代码文件,Windows平台下是.obj文件,UNIX下是.o文件即Object File,这一动作叫做编译(compile);然后把编译得到的中间代码文件合成为可执行文件,这个动作叫做链接(link)。编译时:编译器需要确定代码语法的正确,函数与变量声明的正确性。一般需要我们告诉编译器头文件的所在位置(头文件中声明,C/C++文件中定义),
2018-05-09 11:16:08
317
原创 正确使用map的erase函数以及与list的比较
STL中map的erase函数在使用过程中容易出错,下面就出错的情况进行说明map<int, double>::iterator itr = m.begin();//错误的写法for(; itr != m.end(); ++itr){ if(itr->second > 3) { m.erase(itor);// map是关联容器,调用e...
2018-05-08 19:48:10
1530
原创 size_t用法和指针类型大小
size_t到底什么时候用呢?合理使用size_t可以提高程序的可移植性和代码的可读性。size_t在win32编译下是4字节,在x64编译下是8字节。同样的char*指针的占用空间也是如此。未完待续!...
2018-05-08 14:15:30
1304
原创 临时变量
“abc”不是string类型,不能作为实参传递给形参string &a,因为如果传递的话,构造时会产生一个临时对象,但左值引用不能绑定临时对象。如何修改:方法一:定义string obj = "abc";传递obj,方法二:形参改为const string&。总结:对象传递给reference-to-non-const形参时不会发生隐式转换。...
2018-05-07 09:04:13
593
原创 memset和memcpy使用方法
memset() memset是C库函数void *memset(void *s, int ch, size_t n);。函数解释:将s中当前位置后面的n个字节用ch替换并返回s。作用:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快的方法。note: 尽量用memset将一个数组设置为零,而不是通过for循环示例:C标准库<string.h>不能过...
2018-04-05 14:37:30
2878
原创 C/C++中的相对路径和绝对路径以及转义字符
路径中转义字符错误"\"在C/C++中是转义字符,所以如果文件路径包含他会出现转义字符错误,e.g."C:\test.txt"针对这个问题,C#解决方案是:@"C:\test.txt"C/C++解决方案是:"C:\\test.txt"或者"C:/test.txt"路径DOS中C:\test.txtcsc /t:library 正斜杠后面是一个命令的单数 Windows中"./": 代表目前
2018-04-03 21:15:15
1662
原创 static和extern和全局变量和局部变量
全局变量(文件作用域变量)声明在函数体外的变量,全局变量的作用域,即具有文件作用域,如果要在其他文件使用,则要加上关键字extern声明后可以使用;存放在静态存储区中;生命周期为自动生存周期,即在作用域阶结束后内存将释放。局部变量声明定义在函数体内的变量。static+全局变量全局静态变量,改变了全局变量的作用域,使...
2018-04-01 19:42:56
453
原创 使用尾置返回类型(trailing return type)
C++11新标准中,尾置返回类型(trailing return type)跟在形参列表后面并以一个->符号开头。任何函数都可以使用尾置返回,但返回类型比较复杂的函数使用它最有效,例如返回类型是数组的指针或者数组的引用。示例:使用尾置返回类型(trailing return type)简化函数声明。声明一个返回数组指针的函数int (*func(int i))[10];//返回一个指向含有1...
2018-03-19 19:26:40
2864
原创 迭代器(iterator)
迭代器介绍类似于指针类型,迭代器也提供对对象的间接访问。使用迭代器1.有迭代器的类型同时拥有返回迭代器的成员,如名为begin和end的成员。//由编译器决定b和e的类型//b表示v的第一个元素,e表示v尾元素的下一个位置(one past the end)auto b = v.begin(), e = v.end();//b和e的类型相同end成员返回的迭代器常被称作尾后迭代器(off-th...
2018-02-20 20:54:36
296
原创 C++11范围for(range for)语句
使用范围for语句处理string对象若想对string对象中的每个字符做操作,目前最好的方法是使用C++11新标准提供的一种语句:范围for(range for)语句。这种语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:for(declaration : expression) statement 一个string对象表示一个序列,因此string对象可以作为范围for...
2018-02-05 14:35:23
3790
原创 处理类型(Dealing with Types)
类型别名1.类型别名(type alias)是一个名字,是某种类型的同义词。由2种方法用于定义类型别名:(1)传统方法使用关键字typedef:typedef double wages; //wages是double的同义词typedef wages base, *p;//base是double的同义词,p是double*的同义词(2)C++11新标准规定了 一种新的方法,使用
2018-02-05 09:31:24
415
原创 const限定符
const限定符1.const对象一定要初始化(手工给予初值),初始值可以是任意复杂的表达式;const int i = get_max(); //运行时初始化const int j = 4; //编译时初始化2.const对象初始化第二种方法,利用一个对象去初始化,则他们是不是const都无关要紧;int i = 2;const int ti
2018-02-04 11:12:14
339
原创 变量声明和定义的关系
C++语言支持分离式编译(separate compilation)机制,其允许将程序分割成若干个文件,每个文件可以被独立编译。为了支持分离式编译,C++语言将声明和定义区分开来。声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字就必须包含对那个名字的声明。定义(definition)负责创建与名字关联的实体。变量声明规定了变量的类型和名字,在这一点...
2018-02-02 00:04:34
460
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅