c++引用

引用在创建时必须初始化

int a=10;
int &b=a;//赋值后b是a的别名,改变任何一个另一个也会改变

切记引用必须初始化!

引用不可以对字面量引用

int &a=10;//这是错误的不可以的
const int &a=10;//这个可以
std::string str(){return "hello";}
const std::string&str1=str();//因为返回的是字面量,所以必须加const;

修改引用

引用总是引用初始化那个变量;一旦创建无法修改。但是我们可以通过对原始变量赋值改变变量。

int a=10;
c=11;
int &b=a;
a=100;//可以
b=c;//错误不能让b引用c;

指向指针的引用和指向引用的指针

int *p;
int *&p1=p;//指针的引用
p1=new int ;
*p1=10;
int x=10;
int&y=x;
int *z=&y;//引用的指针
*z=100;//这个结果x=100;

引用数据成员

如果不指向其他变量,引用就无法存在,也因此必须在构造函数初始化器中初始化引用数据成员。

class People
{
public:
People(int&ref):mRef(ref)
{

}
private:
int &mRef;//这里引用必须初始化构造函数初始化器完成了之间的关联
}

引用参数

我们可以写一个交换函数

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}//此函数是引用调用的时候参数不能是常量

我们可以将指针转换为引用

int a=10,b=20;
int *p=&a;
int *p2=&b;
swap(*p,*p2)

将引用作为返回值

返回引用可以避免因复制而占大量内存,但绝对不能返回局部变量的引用,因为局部变量是在栈区,函数调用完立即释放已不存在变量。

#include<iostream>
using namespace std;
#include<string>
class student
{
public:
	student(string name, int age)
	{
		this->name = name;
		this->age = age;

	}
	string name;
	int age;
};
ostream& operator<<(ostream& out, const student& obj)
{
	out << obj.name << obj.age << endl;
	return out;
}
int main()
{
	student one("Tom", 12);
	cout << one << endl;


	return 0;
}

c++中的const 和 static

1.const 保护变量不被修改

2.const 指定函数或方法的参数保持不变

 

const int q=100;
q=10;//错误不准改变q
void fun(const int a)
{
//此函数中不得出现改变a的想法
}

const 指针

const int *p;p指向的值不可改变,p的指向可以改变
p=new int[5];
p[2]=10;//错误不得改变p所指的值

int *const p=nullptr;//p的指向不可改变,p指向的值可以修改
int a=10;
p=&a;//错误不得改变p的指向
*p=100;//可以

const int*p等价 int const *p//p指向的值不可改变,p的指向可以改变

const int *const p=nullptr等价 int const*const p=nullptr//p指向的值不可改变,p的指向不可以改变

const 引用

int a;
const int &b=a;
b=10;//错不可以通过引用改变a;但我们可以直接赋值改变a

void fun(const student&one)//student 是一个类
{
//不得有在本函数中改变对象one 的想法
}

static 关键字

离开和进入作用域时可以保留局部变量。

对于静态变量类内声明类外初始化

 

class student
{
public:
static int x;//类内声明类外初始化
}
int student::x=100;

 类型和类型转换

using the=int ;//用the替换int

typedef int the;//用the 替换int 

 

const_cast()用于给变量添加或去掉常量特性
static_cast()形如将int变double 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值