- 同名不同参
- 本质是编译时修改了函数名,name mangling
int add(int a=1,int b=2){ //默认参数为1和2,不传对应实参时使用默认参数
return a+b;
}
-
如果声明和实现分离,默认参数只能放在声明处
-
默认参数从右边开始填入;
int add(int a,int b)
{
return a+b;
}
- 函数重载和默认参数会产生冲突,优先选择默认参数;
- 本质:有实参就push实参,没有就push默认参数;
- 被extern ”C“修饰的代码会按照C语言的方式去编译;
extern "C"{
void func(){
}
void func(int a){ //第二个func会编译报错,因为C编译不允许函数重载
}
}
- 声明和实现分离时,只允许在声明处加 extern “C”
#includeusing namespace std; extern "C" void func(); int main() { func; return 0; } func(){ cout<<"func"<
- 在C++中使用C编译的函数,在头文件函数声明处加上extern ”C“即可;在.c文件中若要使用extern "C"修饰的函数,则需要在声明处再加上如下的宏定义:
#ifdef _cplusplus extern "C"{ #endif void func(); #ifdef _cplusplus } #endif1.4、宏定义#ifndef _TEST_H //防止头文件内容被重复包含 #define _TEST_H ... #endif //受c/c++标准支持,不受任何编译器限制 //可以控制部分代码#pragma once //防止文件被重复保护 //较老编译器不支持,兼容性不够好 //对整个文件生效1.5、inline编译会将函数调用展开为函数体代码,免于开辟栈空间,减少函数调用开销;但增大了代码体积;递归不必用内联
函数代码体积不大
频繁调用
注意:内联函数中调用内联函数自身并不会将被调用的函数进一步展开
1.6、const
- 意为常量,被修饰变量值不能修改
- 如果修饰的是类、结构体(的指针),其成员也不可以更改;
const int *p=&age; //*p is const int const *p=&age; //*p is const int * const p=&age; //p is const const int * const p=&age; //p and *p are const1.7、引用
- 常引用
int age = 10; int &refage = age; refage = 20; //age 10->20
- 创建引用时必须初始化,并且之后无法再将它指向其他变量----》比指针安全,不会指向不明地址处;
- 可以使用引用为另一个引用初始化,相当于为同一个变量创建了多个别名;
int age = 10; int &ref1 = age; //ref1=age int &ref2 = ref1; //ref2=age1.8、汇编语言
- 本质是指针,编译器弱化了它,弱化指针。在汇编代码和机器码中可以看到两者是一样的;
- 指针的sizeof()。x86是32位机器,结果是4字节;x64是64位机器,结果是8字节;
- 野指针是指向被回收内存地址的指针;
1、
8086汇编(16bit)
x86汇编(32)
x64(64)
ARM(嵌入式、移动设备)
……
x64汇编根据编译器不同,有两种书写格式:
intel: windows
AT&T : mac 、linux
2、汇编不区分大小写



