栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-13

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-13

文章目录
  • 一、 什么是内存对齐?
  • 二、域运算符
  • 三、new 、delete运算符
    • 1.new
    • 2.delete
  • 四、重载
  • 五、name managling&extern"C"
  • 六、带默认形参值的函数
  • 七、引用
    • 1.引用
    • 2.const引用
    • 3.按引用传递


一、 什么是内存对齐?
编译器为每个“数据单元”按排在某个合适的位置上。
性能原因:对齐的情况下,CPU只需要一个主线周期将数据读到内存中。对齐的情况下,计算机性能会更好。
#include//for cout
using namespace std;

struct test {
	char a;//第一个结构体单元存储在偏移量为0的地址上
	//其他成员对齐到某个数的整数倍
	double b;
};

int main(void)
{
	cout << sizeof(test) << endl;
	return 0;
}

对齐数取编译器预设的一个对齐整数与该成员大小的较小值,默认值为8,可以在属性页进行修改。结构体总大小应扩充到最大对齐数的整数倍。

#pragma pack(4)//可以修改最大对齐数
二、域运算符
#include
using namespace std;

int var = 100;
int main(void)
{
	int var = 50;
	cout << var << endl;
	cout << ::var << endl;
	return 0;
}

三、new 、delete运算符 1.new
三种用法:
1.new operator     分配内存+调用构造函数
  operator new     分配内存
  placement new    不分配内存、调用拷贝构造函数
2.delete
释放一个对象
1.调用析构函数
2.释放内存(operator delete)
四、重载
1.相同的作用域,如果两个函数名称相同,而参数不同,我们把它们称为重载overload
2.函数重载又称函数的多态性(静态的多态,编译时确定函数的local地址,静态联编)
3.函数重载的不同形式:
    形参数量不同
    形参类型不同
    形参的顺序不同
    形参数量和形参类型都不同
 举例如下:
#include 
using namespace std;

void fun(int a, int b)
{
	cout << "int fun" << endl;
}

void fun(double a, double b)
{
	cout << "double fun " << endl;
}

int main(void)
{
	fun(3, 4);
	fun(3.3, 3.4);
	return 0;
}
	    

合法重载

五、name managling&extern"C"
1.name managling 这里翻译为名字改编,C++为了支持重载引入的。如上例子中的fun函数重载,对于计算机而言函数名进行了改编是不相同的。
2.extern C实现C语言与C++语言的混合编程。
3.⭐ #ifdef  _cpluscplus
extern "C" void fun(int a , int b)//按C语言的方式进行编译,所以不会进行名字改编会报错
六、带默认形参值的函数
1.函数没有声明时,在函数定义中指定形参的默认值
2.函数既有定义又有声明时,声明时指定后,定义后就不能再指定默认值
3.默认值的定义必须遵循从右到左的顺序,即如果某个形参没有默认值,则它左边的参数就不能有默认值。
  void func1(int a=1,double b,int c=3);//不合法
#include 
using namespace std;

int  fun(int a, int b=5)
{
	return a + b;

}


int main(void)
{
	cout << fun(3) << endl;;
	return 0;
}//打印出结果8

重载函数中如果形参带有默认值时,可能产生二义性,编译器不能确定调用哪个函数。

七、引用 1.引用
给变量起别名,没有自己独立的地址空间,引用需要与自己引用的地址空间共享空间。对引用所做的改变实际上是对它所引用的变量进行改变。
int main(void)
{
	int val = 100;
	//引用在定义的时候必须初始化
	//引用一经初始化,不能重新指向其它变量
	int& refval = val;

	refval = 200;//实际上改变的是val这个变量


	int val2 = 500;
	refval = val2;//不代表将refval引用至val这个变量,仅仅只代表将val2赋值给refval
	return 0;
}
2.const引用
指向const对象的引用
#include 
using namespace std;
//const引用是指向const对象的引用
int main(void)
{
	const int val = 1024;
	const int& refval = val;
	int& ref2 = val;//Error常量无法转换成引用
	int val2 = 1024;
	const int& ref3 = val2;
	ref3 = 300;//不能给常量赋值


	return 0;
}

3.按引用传递
1.引用传递方式是在函数定义时在形参面前加上引用运算符“&”
2.按值传递方式容易理解,但是形参值的改变不能对实参产生影响。
⭐参数传递类型:值传递(形参不能更改实参),指针传递
3.举例
#include 
using namespace std;

void swap(int& x, int& y)
{
	int temp = x;
	x = y;
	y = temp;
}

int main(void)
{
	int a = 5;
	int b = 6;

	swap(a, b);//函数调用时,引用被初始化x=a,y=b

	cout << "a=" << a << "b=" << b << endl;
	return 0;
}
⭐⭐注:
引用的另一个作用是用于返回引用的函数。
不能返回对**局部变量**的引用,局部变量在函数返回时已经销毁了,是无效返回。
C++推荐使用引用,不得已时使用指针。因为,值传递实参要初始化形参,将实参内容拷贝到形参;引用传递中,实参初始化形参不分配空间;指针传递,本质是传递,如果要修改指针的地址,单纯指针传递是不行的。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号