- 命名空间
- C++的输入输出
- 缺省参数
- 函数重载
- 引用
- 内联函数和宏
- auto和基于范围的for循环
- 动态库,静态库浅析
防止人多变量也多的大型项目中命名发生冲突
namespace mmp /定义一个命名空间域
{
int a = 233;
}
- 域作用限定符使用命名空间里的东东;
- 命名空间域里,支持变量、类型、函数,嵌套定义‘
- 同名的命名空间会自动合并,命名空间里不能有命名冲突。
- 使用命名空间域里的东西的三种方法:------第一种日常练习不必在意
int main()
{
printf("%d \n", mmp::a);
return 0;
}
using namespace std;/标准库的命名空间域
/1.用起来方便,但把自己的定义暴露出去了,容易造成命名污染
/2.不会污染,但需要指定命名空间里某个具体的东东..
using mmp::a;
/3.展开常用的,工程项目中常用的...
using std::cin;
using std::endl;
C++的输入输出
-
endl
等价于 \n -
自动识别类型
-
C++兼容C,哪种输出方便就用哪种。
-
参数有个默认值,你不传参数,就用默认的;传了,就没缺省参数什么事儿了。
-
灵活运用开辟空间大小:没有传参默认开辟三个类型的大小;传参了就按你的来。
void Mall(int* pa, int cap = 4)
{
//....
}
int main()
{
int* a;
Mall(a,100);
//int e = add(6);
//cout << e << endl;
return 0;
}
- 全缺省,不传参的时候,全部都设有默认参数;半缺省,必须按照从右往左来设置默认参数,没有设置默认值的变量,必须传参。
- 函数声明的时候设置缺省参数,不能再声明和定义中同时出现。
int add(int a, int b = 10,int c=20)//右向左连续缺省
{
return a + b + c;
}
int main()
{
int e = add(6);
cout << e << endl;
return 0;
}
函数重载
- 参数类型不同 ,个数不同,顺序不同
int double/ double int
- C++是根据参数的情况,对相同函数名字的函数在编译时进行了修饰。C语言是根据函数名直接找函数,编译器没有办法区别。
int EatFish(int a , int b )
{
return b - a;
}
int EatFish(int b , double a)
{
return b ;
}
double EatFish(double a, double b)
{
return b - a;
}
-
链接时做的一些事情,
-
有函数声明,编译器在编译时就给过,找函数定义就是跳转过去找函数地址。编译生成汇编代码,同时会生成符号表等等,符号表记录着函数的地址。如果把返回值带进修饰规则,则在编译期层面是可以区分的,但在语法调用时,无法区分,不知你是调用哪一个。
inr add( int x )/ flaot add(float x) .....add() ?
-
如果用别人的C语言库,需要按C编译器编译,则用
extern C
来解决
1.
extern "C"
{
#include "cExample.h"
}
2.
extern "C" double sqrt(double);
3.
extern "C"
{
double sqrt(double);
int min(int, int);
}
引用
-
C++中,引用(reference)是指绑定到内存中的相应对象上。左值引用是绑定到左值对象上;右值引用是绑定到临时对象上。
-
这里的左值对象是指可以通过取地址&运算符得到该对象的内存地址;而临时对象是不能用取地址&运算符获取到对象的内存地址。
-
++左值是对应(refer to)内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。
-
引用---->给变量取别名。函数传参,用引用接受,则在函数内部可以直接改变实参,减少了形参的临时拷贝,面对只需读取的函数,
const int&
更安全;还可以给指针变量取别名。
-
取别名限制条件,对你的读写权限可以不变或者缩小,但不能放大。
-
类型转换:当 *** 作符左右两边类型不同,提升至大的类型,提升补符号位,同时有临时变量产生,临时变量具有常性,不可以对临时变量引用取别名,证明临时变量的存在:
-
引用该可以做返回值。
- 返回引用时,要求被返回的参数,要以引用方式或指针方式存在…
- 返回的参数,出了那个作用域还在。
- 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。
- 空间换时间,对编译器而言是一个建议,当代码很长时,会自动忽略,声明和定义不能分离。
- 宏的优缺点?
优点:
1.增强代码的复用性。
2.提高性能。 - 缺点:
1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查 。
C++有哪些技术替代宏?1. 常量定义 换用const ;2. 函数定义 换用内联函数
auto和基于范围的for循环- auto 自动推导变量的类型
- for 对遍历数组的优化,写起来更省事儿
oid TestFor()
{
int array[] = { 1, 2, 3, 4, 5 };
for(auto& e : array)
e *= 2;
for(auto e : array)
cout << e << " ";
return 0;
}
- 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)