随笔分类 - c/c++
摘要:让函数成为类的友元,让该函数具有和类成员函数相同的访问权限。 friend void func(argument) 在类声明中添加友元函数原型。 虽然友元函数是在类中声明的,但它不是成员函数,不能使用成员运算符来调用。 友元函数虽然不是成员函数,但是它与成员函数具有相同的访问全限。 函数定义不需要类
阅读全文
摘要:运算符重载的函数形式 operator op(argument); op是有效的运算符 #include<iostream> using std::cout; using std::cin; using std::endl; class Complex{ public: float real; fl
阅读全文
摘要:创建对象 class A{ public: int x; A(); A(int); }; //1 A a1; // 使用无参构造 //2 有参构造创建对象 A a2(10); // 第一种方式 A a3 = A(20); // 第二种方式 // 第二种方式,编译器可能有两种方式执行 // 与第一种相
阅读全文
摘要:namespace TANG{ int height; int weight; } namespace GAO{ int height; int weight; } // 名称空间是开放的,可以把名称加入到已有名称空间中 name space TANG{ void func(); } 名称空间提供一
阅读全文
摘要:通常new 负责在堆中找到一个满足要求的内存卡,new运算符还有另一种变体,被称为定位new运算符可以使用指定的位置。可以使用这种特性来设置内存关联规程、处理需要通过特定地址进行访问的硬件或在特定位置创建对象。要使用定位new,需要包含头文件new。 char buffer[100]; int *p
阅读全文
摘要:1. volatile 表明即使程序没用对内存单元进行修改,其值也可能发生变化。 比如一个指针指向一个硬件位置,硬件可能会修改指针所指向的值。 两个 程序互相影响共享数据。 如果编译器发现几条语句两次使用了某个变量,编译不会让程序查找这个值两次,而是将这个值缓存到寄存器中。这种优化假设变量的值在两次
阅读全文
摘要:自动存储连续性:块中的局部变量,程序进入块时被创建,离开块时被销毁。 静态存储连续性:static定义的变量和全局变量,程序运行期间都存在。 线性存储连续性:变量使用关键字thread_local声明时,其生命周期与所属线程一样长。 动态存储连续性:用new运算符分配的内存一直存在知道delete运
阅读全文
摘要:函数模板 通用的函数描述,通过泛型来定义函数。 template <typename AnyType> void swap(AnyType &a, AnyType &b) { AnyType temp = a; a = b; b = temp; } 创建模板在函数原型前使用 template ; 模
阅读全文
摘要:引用变量即变量的别名, 使用&符号创建 int rats; int & rodents = rats; // 引用变量必须在声明时初始化 引用变量可以看作是const指针,不可以指向别处但可以通过其修改值 int * const pr = &rats; 引用变量的主要作用是做函数参数, 称为引用传递
阅读全文
摘要:常规函数调用,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈中,跳到标记函数起点的内存单元。执行函数代码,然后条回到地址被保存的指令出。来回跳跃并记录跳跃位置以唯着使用函数时,需要一定开销。 C++内联函数 编译器会用函数代码替换函数调用,避免了函数调用时程序跳跃的开销。如果函数
阅读全文
摘要:函数原型描述了函数到编译器的接口。将函数返回值类型和参数类型告诉编译器。在使用函数时,如果参数不正确or返回值不匹配(即使进行隐式的类型转换)编译器将捕获这种错误。 函数原型指出了函数的返回类型,编译器就知道应检索多少字节以及如何解释他们。如果没有编译器只能瞎猜。 不使用函数原型让编译器在文件中找效
阅读全文
摘要:c++ 不指定变量的类型,由编译器根据变量的初始值确定。 auto a = 0; // a is int auto b = 0.0; // b is double auto c = 0L; // c is long auto d = 'a'; // d is char c 明示变量为自动存储类型主要
阅读全文
摘要:函数指针 指向函数的指针,存储着函数代码的起始处的地址。 声明数据指针时,要声明指针所指向的数据类型。函数指针要指明函数签名,即参数和返回值 void (*pf) (int n); // 括号的优先级高于*,所以要把*和指针名括起来。 // 可以指向无返回值接收一个整数为参数的函数 函数指针的作用主
阅读全文
摘要:const 用const关键字声明的变量,其值不能通过赋值或递增、递减来修改。 const变量只能声明同时初始化。 float val = 10; const float * pf; // pf 指向一个float类型的const值,可以指向其他值,但不能通过pf修改所指的值 // pt是一个con
阅读全文
摘要:malloc、calloc、free malloc函数接收一个参数:所需内存字节数,返回一个void指针,需要强制类型转换为对应类型。分配失败返回空指针。 calloc接收两个参数,一个所需存储单元数量,一个是存储单元大小 分配的内存要用free释放,free(pointer) #include<s
阅读全文
摘要:auto auto显示表明变量是自动变量,块内局部和函数头局部变量(非静态局部变量)。主要为了明确表达要使用与外部变量同名的局部变量的意图 register 也只用于块作用域,请求变量用寄存器保存,提高处理速度,因为不在内存中所以地址无法获取。只是请求,编译器不一定响应。响应失败就是普通变量 sta
阅读全文
摘要:静态变量是指在内存中原地不动 局部静态变量 使用static关键字在某个块内声明一个变量。 #include<stdio.h> #include<stdlib.h> void fun(void); int main(void) { for(int i=0;i<3;i++) fun(); return
阅读全文
摘要:#寄存器变量 变量通常存储与计算机内存中,如果幸运的话,寄存器变量存储在cpu的寄存器中。和普通变量相比,访问和处理速度快,但是不在内存中,无法获取寄存器变量的地址。 使用register关键字,请求变量保存在寄存器中,但编译器会根据寄存器和最快课用内存数量衡量请求,或者忽略请求,不一定会把变量保存
阅读全文
摘要:atoi #include<stdio.h> #include<stdlib.h> int main(int argc, char * argv[]) { int sum=0; for(int i=1;i<argc;i++) { sum+=atoi(argv[i]); } printf("%d",s
阅读全文
摘要:gets #include<stdio.h> #include<string.h> int main() { char str[5]; //gets,读取整行,直到遇到换行符,不安全, // 输入的字符过长,可能会导致缓冲区溢出 // 多余的字符超出了指定的目标空间,如果只是占用了未使用的内存,不会
阅读全文