本文介绍了一些C++和C的一些不同点,主要体现在命名空间,引用,内联函数。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
//为什么要定义命名空间呢?因为在C语言中会出现命名冲突的问题,导致在做项目的过程中不能有命名相同的情况
//会使得项目容易出错
//如果每个人所负责的模块都能开辟一块属于自己的命名空间,即使命名相同也不会起冲突
//开辟一块命名空间
namespace wzg
{
float a = 1.56;
//函数重载,允许函数名相同。
//但必须满足以下其中一种情况:1.传参数量不同2.传参的类型不同
//缺省参数在定义时,如果要给默认参数必须从右往左给,避免调用歧义
int ADD(int c, int d = 0)
{
return c + d;
}
double ADD(double a, double b)
{
return a + b;
}
int& add(int a, int b)
{
int c = a + b;
return c;
}
void Change(int& a)
{
a *= 10;
}
}
//内联函数
//对比宏定义函数 #define add(x,y) ((x)+(y)) 考虑的细节较少,并且可以调试。
//那为什么不直接写个函数,而引出内联函数这个概念?
//因为当内联函数的内容较为简单(代码量较少)可以实现与宏定义一样的功能,直接在预处理阶段直接替换。(替换只是内联函数的请求,如果代码量大,编译器会直接像普通函数一样直接调用)
inline int add(int x, int y)
{
return x + y;
}
//<iostram>中包含了命名空间std,std中定义了很多变量和函数,以下三个就是其中的一些
using std::cout;
using std::cin;
using std::endl;
int main()
{
//int a = 1;
//int b = 2;
//cout << a << endl << b << endl;
//cin >> a >> b;
//cout << a + b << endl;
缺省参数,当不传参数时,使用默认参数,必须从右往左传参,避免歧义
//cout << wzg::ADD(1.0, 3.5) << endl;
//cout << wzg::ADD(6) << endl;
//cout << wzg::a;//cout会自动识别数据类型
//printf("%.1lf\n", wzg::a);//可以在C++编程过程中使用C的语法,因为cout可能在确定精度时比较麻烦
//引用
//就是对变量取别名,指向同一个地址
int m = 1;
int& n = m;//引用必须初始化
cout << &m << endl << &n << endl;
//传值返回
wzg::Change(m);
cout << m << endl;
//传引用返回
int& ret = wzg::add(1, 2);
cout << ret << endl;
wzg::add(3, 4);
cout << ret << endl;
//结果是7.这是因为ret是形参c的引用,指向同一个地址。但是,值得注意的是,在第一次add调用完毕后,栈帧销毁,指向原c的地址的空间的值如果被刷新,则ret可能是个随机值
//之所以结果还是7,是因为栈帧销毁后原先指向c的空间并没有被刷新,并且新开辟的add地址与第一次相同
//常引用
const int x = 1;
int l = 1;
//引用不能扩大权限
const int& y = x;
//引用可以缩小全新
const int& o = l;
//不同类型的引用
int x = 1;
//由于在类型转换时,编译器会自动创建一个临时变量,所以y实际上时是临时变量的引用,由于临时变量具有常性,所以因为不能扩大权限,则必须是const
const double& y = x;
return 0;
}