
C Part of C++
evanoma
d-y-chp@live.cn
展开
-
类型说明和指示
auto:分析得到表达式的类型并计算表达式的值后进行赋值CP61 auto会忽略顶层const,同时保留底层constconst int ci=2;auto b=ci;//b的类型为intconst auto c=ci;//const需要明确指出auto c=&ci;//c的类型为指向整数常量的指针decltype:只分析表达式的类型 decltype不会忽略顶层const。decltyp原创 2017-07-14 09:24:09 · 285 阅读 · 0 评论 -
转型
E27 避免使用转型动作 强制类型转换:CP144 1.容易辨识; 2.转型目标窄化; 3.转型后的临时对象需要赋给别的变量。 例如派生类B的虚函数需要调用基类A的同名虚函数virtual void fun(){ static_cast<A>(*this).fun(); //此时A的虚函数作用于转型后生成的临时对象而不是*this本身 …}正确做法是virtual vo原创 2017-07-13 16:53:25 · 298 阅读 · 0 评论 -
IO库
istream(输入流类型)istream对象 cin:从标准输入读取数据从istream对象读取数据 “>>” getline函数:能够保留输入的空白符string s;getline(cin,s);3.派生类 ifsream:从文件读取数据ostream(输出流类型)ostream对象 cout:向标准输出写入数据 cerr:将程序错误信息写入标准错原创 2017-07-17 09:09:31 · 325 阅读 · 0 评论 -
命名空间
命名空间:分割全局命名空间形成独立的作用域namespace 名字{ //类,变量,函数,模板声明 :://定义}//不要分号1.不可定义在函数或类的内部 2.可以被同一空间内的成员直接访问;在空间外的代码需要指出作用域。 3.命名空间可以分成不同的部分。当namespace 名字{ …}第二次出现时表示为命名空间添加新成员。将命名空间成员的实现和接口分开存放。例如在原创 2017-07-13 16:42:49 · 280 阅读 · 0 评论 -
static
static:程序结束才会被析构 locial static 对象:函数内的static对象 non-locial static 对象 当non-locial static 对象A需要另一编译单元的on-locial static 对象B进行初始化,此时B必须先于A进行初始化。 reference-returning函数:新建一个函数并在其内定义并初始化locial static 对象,返回原创 2017-07-13 16:49:21 · 1593 阅读 · 0 评论 -
inline
E30 inline函数过多的inline函数会导致额外的换页行为,降低效率。inline只是对编译器提出申请。当无法inline时,编译器会提供一个警告信息。例如通过函数指针调用可能不会被inline。inline函数最好置于头文件内。不要将构造和析构函数设为inline函数(在类内定义)。由于(默认)构造和析构函数需要保证异常安全性,所以其代码比较大。而对于派生类函数来说,需要调用基类的原创 2017-07-13 16:55:31 · 729 阅读 · 0 评论 -
shared_ptr
智能指针(模板类) shared_ptr 允许多个指针指向同一对象 默认初始化的指针包含一个空指针(nullptr CP48),可以用new返回的指针来初始化智能指针。接收指针参数的智能指针的构造函数是explict,所以必须使用直接初始化的形式。CP412shared_ptrint> p1(new int(1024));p.reset(q);//p会从q中接管对象的所有权,当p是原创 2017-07-13 17:20:59 · 1769 阅读 · 0 评论 -
exception
exception 异常:程序运行时,超出函数处理范围的反常行为。 当程序通过throw检测到问题,然后发出异常信号,之后的程序不再执行。(类似于return语句)CP684 使用异常处理时需要把异常处理的代码和正常运行的代码分离开来。CP173//原代码if(…==…) cout<<…<<endl;//最好不用if else语句if(…!=…) throw ru原创 2017-07-13 17:21:59 · 238 阅读 · 0 评论 -
函数指针
函数指针(指向函数的指针)CP221//原函数bool lengthCompare(const string &,const string &);/*直接用指针替换函数名声明指向函数的指针 如果不写括号则变成返回bool类型的指针*/bool (*pf)(const string &,const string &)=lengthCompare;/*调用方式*/bool b1=原创 2017-07-14 09:20:45 · 178 阅读 · 0 评论 -
动态内存
静态内存:局部static对象,类satic成员,全局变量 栈内存:函数内的非static对象 以上由编译器自动创建和销毁。 heap(堆):dynamically allocate(动态分配的对象) new:在动态内存中为对象分配空间(并进行初始化)CP407int *pi=new int;//默认初始化int *pi=new int(12);//直接初始化auto *pi=new a原创 2017-07-18 09:26:23 · 183 阅读 · 0 评论 -
const
尽量使用const E03 - const 对象必须初始化(创建后不能改变) - 对const的引用: -只能使用常量引用指向常量对象,允许隐式的类型转换CP55 常量引用可以指向非常量对象,但不允许通过该引用改变对象的值CP56 - 底层const:pointer to const(指向常量的指针) - 执行拷贝操作时2个对象必须要有相同/可以转换的类型CP58 从右向原创 2017-07-13 16:46:36 · 210 阅读 · 0 评论