C/C++
chfe910
这个作者很懒,什么都没留下…
展开
-
《C++ Primer(第5版)》学习笔记:第4章 表达式
函数调用:也是一种特殊的运算符,它对运算对象的数量没有要求。重载运算符:使用重载运算符时,其包括运算对象的类型和返回值的类型,都是由该运算符定义的;但是运算对象的个数、运算符的优先级和结合律都是无法改变的。关于“左值”和“右值”的归纳:当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。ps:左值、右值的具体概念还需要进一原创 2014-05-11 01:17:38 · 834 阅读 · 1 评论 -
C++学习:字符串分割函数
C++实现字符串分割有多种方式,个人认为下面这种实现比较科学:void splitString(const std::string &s, const std::string &seperator, std::vector<std::string> &result){ std::string::size_type pos1 = 0, pos2 = s.find(seperator);原创 2015-12-28 16:17:18 · 572 阅读 · 0 评论 -
C++学习:去掉字符串的首尾指定字符
template inline StrType BinaryDecisionTree::LeftTrimString(const StrType& strSource, const StrType& strDrop); template inline StrType BinaryDecisionTree::RightTrimString(const StrType& strSource, c原创 2016-09-10 16:25:26 · 2808 阅读 · 1 评论 -
C/C++中需要注意的一些问题
1. printf参数的压栈顺序C中printf计算参数时是从右到左压栈的。考虑下面代码的输出结果: int arr[] = { 0, 1, 2, 3 }; int *p = arr; printf("%d, %d\n", *p, *(++p));输出结果为“1, 1”。原创 2015-03-06 16:52:51 · 961 阅读 · 0 评论 -
C++学习:单例模式
模式介绍单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但转载 2015-03-09 11:35:13 · 518 阅读 · 0 评论 -
《Effective C++》学习笔记
在operator=中处理“自我赋值”在operator=最前面需要进行“证同测试”达到“自我赋值”的检验目的:Widget& Widget::operator=(const Widget &rhs){ if (this == &rhs) return *this; delete pb; pb = new Bitmap(*rhs.pb); return *this;原创 2015-03-27 17:13:22 · 768 阅读 · 0 评论 -
C++学习:string用法
功能函数原型说明构造函数string(const char *s);用C风格字符串s初始化string(int n,char c);用n个字符c初始化 默认构造函数 复制构造函数访问元素const cha原创 2015-03-04 10:26:28 · 1536 阅读 · 0 评论 -
C++学习:vector用法
功能函数原型说明构造函数vector();创建一个空vectorvector(int nSize);创建一个vector,元素个数为nSizevector(int nSize,const t& t);创建一个vector,元素个数为nSize,且值均为t原创 2015-03-04 13:51:53 · 1008 阅读 · 0 评论 -
C++学习:范围for(range for)语句
语法范围for(range for)语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是: for (declaration : expression) statement其中: expression部分是一个对象,必须是一个序列,比方说用花括号括起来的初始值列表、数组或者vector或string等类型的对象。这些类型的共同特点是拥有能返回迭代器的beg原创 2015-03-03 23:53:43 · 6480 阅读 · 5 评论 -
C/C++中的一个巨大的坑:移位操作的优先级问题
对于下面的表达式,运算结果应该是多少?int result = 4 >> 1 + 1;我不止一次地认为运算结果为4/2+1=3。而实际上,运算结果为:4/4=1。这是由于移位操作的优先级比加法运算低。上图引自百度百科上图引自百度百科原创 2015-01-19 21:07:38 · 8190 阅读 · 0 评论 -
C++学习:关于“std::vector<Type>::iterator”的一个错误
在类模板里面定义如下迭代器:templateclass className{private: vector::iteratoriter;};则会出现如下图所示的错误: 这是由于:vector本身就是模板,在其模板参数未确定之前,也就是Type 的具体类型没有确定之前,这个Type是未知的。 解决方法如下: templ原创 2015-01-07 20:37:24 · 3831 阅读 · 0 评论 -
C/C++学习:慎用static变量
有时候我们需要用到static变量,有时候我们想限制这些变量的作用域便将其定义在函数内部。但是,如果我们对static变量进行了修改,那么程序在软重启的时候,这些static变量并不会被重新初始化,而是仍然使用上次的值。这是一个潜藏的BUG,一定要注意。所以如果使用static变量,一定要注意这些变量是否需要被修改:如果不需要被修改,那么最好将其定义为const变量;如果需要被修改,那么一原创 2015-01-29 14:58:22 · 1270 阅读 · 0 评论 -
C++学习:模板编译模式
C++函数模板和类模板,如果分别在.h头文件中声明,在.cpp源文件中定义,一旦调用到该模板,编译时就会报如下图所示错误。这与模板的编译模式有关。C++支持两种模板编译模式:包含模式(Inclusion Model)和分离模式(Separation Model)。在包含编译模式下我们在每个模板被实例化的文件中包含函数模板的定义并且往往把定义放在头文件中像对内联函数所做的那样。原创 2015-01-08 10:08:01 · 796 阅读 · 0 评论 -
C++中struct与class的区别
在C++中,既可以用struct关键字进行类的定义,也可以用class关键字进行类的定义,那么这两者到底有什么区别呢?唯一的一点区别是:struct和class的默认访问权限不一样。如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,如果使用的是class关键字,则这些成员是private的。我认为可以这样理解:struct关键原创 2014-11-03 23:34:36 · 754 阅读 · 0 评论 -
C/C++学习:函数指针
以前在书上看到函数指针相关的都没怎么重视,但是最近在实际的工作中却派上了用场。所以认真地学习了一遍。函数指针的申明申明一个函数指针很简单,就是将函数申明中的函数名替换为一个指针即可:C/C++int test(int para1, double *para2); // 函数申明int (*pf)(int para1, double *para2); // 函数指针申明原创 2014-10-30 13:00:57 · 909 阅读 · 0 评论 -
《C++ Primer(第5版)》学习笔记:第1章 开始
操纵符endl:写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。另外,默认情况下,读cin或者程序非正常终止时也会刷新cout。输入流:while(std::cin >> value),当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,原创 2014-05-10 23:06:04 · 752 阅读 · 0 评论 -
《C++ Primer(第5版)》学习笔记:第3章 字符串、向量和数组
类型与硬件:基本数据类型(比如数字、字符)体现了大多数计算机硬件本身具备的能力。标准库定义了另外一组具有更高级性质的类型,它们并未直接实现到计算机硬件中。命名空间的using声明:头文件不应包含using声明。这是因为头文件的内容会拷贝到所有引用了它的文件中去,如果头文件包含了using声明,那么每个使用了该头文件的文件都会有这个声明。直接初始化和拷贝初始化:使用等号初始化一个变量原创 2014-05-11 00:33:03 · 1006 阅读 · 0 评论 -
《C++ Primer(第5版)》学习笔记:第2章 变量和基本类型
C++是一种静态数据类型语言,它的类型检查发生在编译时。Unicode字符集:用于表示所有自然语言中字符的标准,类型char16_t和char32_t为之服务。浮点数运算:尽量选用double,原因是float通常精度不够而且二者的计算代价相差无几。编程建议:尽量避免依赖于实现环境的行为,参考#ifdef的用法。列表初始化:在C++11中,用花括号来初始化变量得到了原创 2014-05-10 23:54:56 · 688 阅读 · 0 评论 -
printf非常奇怪的参数问题
以下代码在VS2013上可以通过编译,但是运行到最后一行才出错。 char *s1 = "hello"; char *s2 = "world"; printf("%x %x\n", s1, s2); printf("%x %x %x\n", s1, s2); printf("%s %s\n", s1, s2); printf("%s %s %s\n",原创 2015-03-30 00:14:54 · 1317 阅读 · 2 评论