我个人的理解,当有几个cpp文件同时在编写时,可能会遇到共同定义使用同一个名字的情况,在平级调用时,可能就会报错。但是如果这样的话,语法不支持一个名字被定义两次。因此,C++使用命名空间来解决这个问题。
在一个C++文件中,我们所写的一个函数,他有一个作用域,和生命周期,作用域内的变量出了作用域就会销毁。因此,每一个函数等中的变量相同,是可以的,因为它出了函数就销毁了。而命名空间是一个域,它没有生命周期。冒号:就是命名空间解释符号,意思是往前寻找那个空间里的相应定义。
如此我们就可以解释开头写的那句:using namespace std;这句代码的含义了。
它是指在 std是标准库中的命名空间的名字,那些标准库中的定义就放在这个空间中。
但是呢在实际应用中,我们还是最好只是部分展开就好。比如:
using std::cout;
using std::cin;
C++是兼容c的,因此我们可以使用C语言的输入和输出的,但是使用C++的输入和输出也是很方便的。
输出:cout<<内容<
>内容;
cout能够识别输出内容的类别,不需要我们设定类型。
在我们传递参数时,在函数那里对应的形参可以设置初始值,这样方面我们有时忘记传值,但是也不会犯错。但是也要注意几个点,一、形参的值不能跳跃设置,必须从右往左。二、缺省参数不能在函数声明和定义时同时出现。三、缺省参数只能是常量或者全局变量。
int Add(int x = 5,int y = 6)//全缺省
{
return x+y;
}
int Add(int x,int y = 6)//半缺省
{
return x+y;
}
我们在写函数时,可能一个函数的实现一样,但是返回值不一样,也可能实现一样但是,参数的类型不一样,因此会构成重载函数。重载函数是使用同一个名字,但是形参列表(参数个数 或 类型 或 类型顺序)不一样。
int Add(int x,int y){}
int Add(int x){}
int Add(int x,double y){}
double Add(double x,int y){}
实际上,编译器将每一个重载函数都使用一定的方法来标记,以便于调用时正确使用。
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。
类型&+引用变量名 =引用实体
引用的特性:
1.引用在使用时,必须初始化
2.当引用了一个实体后,不能再引用另一个实体
3.一个变量可以多个引用
引用可以做参数,可以做返回值。
int Swap(int& x,int& y){
int temp = x;
x = y;
y = temp;
}
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。
内联函数是C++对宏的改进。
注意:内联函数不建议定义和生命分开,否则可能会发生链接错误。
我的理解是auto可以自动识别类型,从而省去我们很多的时间。特别是在一些类型的名称特别长的情况下,尤其好用。
int a = 10;
auto b = a;
int* x = &a;
aotu* y = &a;
auto的使用,需要初始化。同时,它也是占位符,在编译阶段,会赋予实际的类型。
在引用时,auto后必须加&符号,同时在auto同一行的类型需要一样。它也不能用作参数,和数组
int arr[] = {1,2,3,4,5};
for(aotu x:arr)
{
cout<
冒号前面是迭代的变量,后是迭代的范围。
注意:数组的范围是确定的才可用
void f(int)
{
cout<<"f(int)"<
这段代码中,f(0)和f(NULL)的调用的函数是一样的。所以使用nullptr来解决。