
C++
文章平均质量分 58
GoJawee
这个作者很懒,什么都没留下…
展开
-
define宏定义中的#,##,@#及\符号
1、# (stringizing)字符串化操作符。 其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。 如:#define example(instr) printf("the input stringis:\t%s\n",#instr)#define example1(instr) #instr当使用该宏定原创 2017-03-05 10:06:54 · 677 阅读 · 0 评论 -
C++之临时对象的构造与析构
1、临时对象产生的时间点 2、临时对象析构的时间点 3、哪些情况必须使用临时对象?示例:#include <iostream> using namespace std; class A{public: A() {cout<<"构造"<<endl;} A(const A& a) { cout<<"拷贝"<<endl; }原创 2017-03-02 16:34:50 · 2360 阅读 · 3 评论 -
改善程序的55个具体做法
1、确定对象在使用之前被初始化(1)为内置对象进行手工初始化(因为C++不保证初始化它们)(2)构造函数最好使用成员初始化列表,而不要在构造函数本体内使用赋值操作。2、一个空类会默认生成哪些函数?defult构造函数、copy构造函数、(非虚的)析构函数、赋值运算操作符函数operator=【注】什么情况下,赋值运算操作符函数operator=不会自动生成,或者生成的不能被编译成功?①如果生原创 2017-03-24 17:33:53 · 505 阅读 · 0 评论 -
错误:返回局部变量数组名 \ 解决方案
//对于数组来说,它是一个局部变量,是放在栈里面的,函数返回之后,变量被销毁,内存被回收。#include <stdio.h>char* get_str(){ char str[] = {"hello"}; //错误结果 return str;}int main(){ char* p = get_str(); printf("%s/n", p); r原创 2017-03-26 12:13:09 · 540 阅读 · 0 评论 -
C与指针、C陷阱与缺陷
遗留问题: P15理解函数声明 P39指针与数组1、单/多字符符号—->贪心法 a+++++b编译不能通过的原因是?—左值右值 2、 单引号:引起来的一个字符实际上代表一个整数(整数值对应于该字符在编译器采用的字符集中的序列值)。 双引号:引起来的字符串代表一个指向无名数组起始字符的指针。 3、int a = 010; //表示8进制的数。4、运算符的优先级和结合性 【原创 2017-03-12 14:52:53 · 2444 阅读 · 0 评论 -
C语言深度解剖
1、定义和声明定义:创建了对象并且为该对象分配内存并给该对象取上名字(该名字就是变量名或者对象名),注意:名字一旦和这块内存匹配起来,就同生共死,不离不弃,并且这块内存的位置也不能被改变。声明:没有分配内存,只是告诉编译器,这个名字已经被预定了,别的地方不能再使用它作为变量名和对象名。extern int a; //声明int a; //定义2、皇帝身边的小太监——寄存器register这个关原创 2017-03-20 19:59:57 · 712 阅读 · 0 评论 -
剑指Offer
http://m.blog.youkuaiyun.com/article/details?id=13000431 找工作是一个长期准备的过程,突击是没什么效果的。准备时间越长,准备就越充分,就越容易拿到好的offer。我基本上从研究生一入学就一直在准备找工作的东西,看书、研究研究笔试面试题、在线编程训练、参加实习招聘等等。当然,其实主要还是研二开始准备的,也算不上多认真,反正一天一天的积累吧。这里我把原创 2017-03-09 13:03:52 · 839 阅读 · 0 评论 -
用CMake编译运行在网上下载的源文件src
参考:http://blog.youkuaiyun.com/yiqiudream/article/details/51885698 1、怎么用CMake打开下载的源文件?工具:下载CMake ——> 链接https://cmake.org/download/ 安装完成后,打开CMake-gui程序 如下图所示: 1. 双击打开cmake-gui, 在最上面两行指定文件路径,第一行是源码所在原创 2017-03-15 18:48:35 · 1240 阅读 · 1 评论 -
尽量使用const、enum、inline代替#define
1、 # define A 1.6 宁可使用编译器也不使用预处理,原因: 当使用预处理时,记号名称A也许从未被编译器看见(因为预处理是在编译阶段进行替换),所以一旦出现编译错误,(如果A被定义在一个非你写的头文件内),你肯定对1.6以及它的来源毫不知情,这样就会因为追踪它而浪费时间。 因此—>用const替换不会发生这种情况(找编译错误难找的情况)。 # define不能进原创 2017-03-12 11:01:59 · 675 阅读 · 0 评论 -
牛客(错题集)
1、void main(){ int a=1,b=0,c=-1,d=0; d=++a||++b&&++c; cout<<d<<endl; return;}1. C/C++中,布尔值作为整型输出时,表现为:true输出1,false输出0;2. 语句4为逻辑表达式,因此返回值d为1或0;3. 短路原则:||或操作符左操作数为真,即可停止判断,返回1。【解释】运算符优原创 2017-03-27 16:46:45 · 507 阅读 · 0 评论 -
高级(复杂)指针的含义
备用知识 指针数组: int *p[10]; 数组指针: int (*p)[10]; 函数声明: int* f( ); //f是一个返回int*指针的函数 函数指针: int (*p)( ); 【突破口】 ——当前变量是函数?数组?指针?某种类型的强制转换? 学会把解析完的内容看成一个整体! (1)是函数:明确函数的形参与返原创 2017-03-16 19:46:02 · 625 阅读 · 0 评论 -
宏定义
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。 关于预处理命令中的文件包含(#include),宏定义(#define)。【预热】先介绍例子显示#define、#ifdef、#ifndef的简单用法//代码举例:新建define.cpp文件#原创 2017-03-20 11:23:07 · 1234 阅读 · 0 评论 -
多态
多态实现的两大条件: (1)子类重写了父类的虚函数 (2)父类的指针或者引用指向子类的对象 分析条件(1):父类的函数要声明为virtual函数;子类重写该函数,在子类中virtual关键字可写可不写,只要父类中有virtual关键字即可。子类中重写的函数的返回值、函数名、形参必须与父类中被重写的函数的返回值、函数名、形参一模一样!对比下面两大类情况 【情况一:假设有关键字vi原创 2017-03-20 10:37:24 · 359 阅读 · 0 评论 -
C++之static关键字
1、类的静态成员变量、静态全局变量 (1)类的静态成员变量:必须在类外进行显式的初始化。 初始化格式 <类型><类名>::变量名=初值; 【注】如果不进行初始化类的静态成员变量,但是在main函数中使用它时,会编译错误。 (2)但是:静态局部/局部变量:若没有定义变量时进行初始化,会自动初始化为0. 2、类的静态/非静态成员函数相互访问权限 (1)static原创 2017-03-02 11:10:19 · 310 阅读 · 0 评论 -
vector/list/map/set的插入、删除、遍历 - remove\erase函数
1、vector中删除满足某些条件的元素和迭代器失效问题#include <iostream>#include <vector>using namespace std;int main(){ std::vector<int> mVector; mVector.push_back(1); //插入元素push_back mVector.push_back(2);原创 2017-03-06 11:04:55 · 1361 阅读 · 0 评论 -
C++中的hash_map和map的区别
1)为什么需要hash_map/*例如:我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典【注】如果你使用STL 的map容器,你可以非常方便的实现这个功能,而不用关心其细节。*/#include <map> #include <string> using namespac原创 2017-03-09 11:17:19 · 1352 阅读 · 0 评论 -
(函数/类模板)的(偏特化/全特化)
特化的概念 特化,就是将泛型的东东搞得“具体化”一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或受到特定的修饰或完全被指定了下来。模板特化的分类 (1)针对特化的对象不同,分为两类:函数模板的特化和类模板的特化 全特化的标志:template <>然后是完全和模板类型没有一点关系的类实现或者函数定义。 全特化的标志:te原创 2017-03-05 15:45:24 · 928 阅读 · 0 评论 -
if (argc == 1) 到底有什么作用?
main的原型函数是: main(int argc, char **argv) 其中: argc 表示接收的命令个数 argv 传入的命令内容argc == 1 就是说参数的个数为1. argv是字符串数组,存的是参数,定义为char**或者char* argv[]【举例】 比如你编译好的程序为my.exe (1)在命令行执行 my.exe 则:原创 2017-03-04 13:53:16 · 7306 阅读 · 0 评论