effective C++ 3

本文详细探讨了C++中的const关键字在变量、指针、迭代器和函数中的用法,强调了const在防止无意修改、对象生命周期管理和良好编程风格中的重要性,以及类的重载函数和析构函数的注意事项。
摘要由CSDN通过智能技术生成

1.对于const修饰的变量 

//非指针类变量 const在变量类型前 
const int a=2
//对于指针变量 const在变量前 指的是该指针指向的不能改变 const在变量后 指的是该指针只能指向这个变量
int b=2,f=7;
const int* c=&b //可以改变c的指向 但不能改变通过c改变所指向变量的值
int* const p=&f//p只能指向变量f的地址

2.关于迭代器的一些限制 迭代器就是类似于T* 

sdt::vector<int> arr(10,-1);
const std::vector<int>::iterator it=arr.begin();//it类似于 T* const
*it=5;
// it++错误
std::vector<int>::const_iterator is=arr.end();//is类似于 const T*
//*is=6 错误 
is--;

3.如果不是想修改变量 最好用const进行修饰 对于函数的形参 没有特殊情况或者迭代回溯,即不会嵌套和改变值的话,使用const修饰的引用 

4.在面向对象中 const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数,所以,如果类中有非const和const修饰的函数,函数内容相同,const修饰的函数会先调用const修饰的变量

#include<iostream>
using namespace std;
class A {
public:
	 int x;
	int y;
	A() :x(3), y(4) {}
	A(const int x_1,const int y_1):x(x_1),y(y_1) {}

	 void show() {
		cout << x + y << endl;
	}

	 void kk() const {
		 cout << x - y << endl;
	 }

};
int main() {
	A aa(1, 2);
	const A bb(5, 6);
	aa.show();
	bb.show();//错误
	bb.kk();
	return 0;
}

5.对于类的重载函数 其参数必须要有一个引用类型 ,如果要通过函数改变一个类变量的内部值,传的也是引用 ,所以 对于类成员函数的形参 要养成用引用的习惯。

6.拷贝赋值运算 比如类用“=”赋值 这种要重载函数,赋值运算符通常应该给返回一个指向其左侧运算的引用。注意:一个类需要自定义析构函数,几乎肯定也需要自定义拷贝运算符和拷贝构造函数,隐式销毁一个内置指针类型得成员不会delete它指向得对象内容(是销毁创建变量)

class AA{
public:
AA(const std::string &s=std::string()):
    ps(new std::string(s),i(0)) {}
~AA(){delete ps;}

}

AA f(AA hp){//按值传递 hp将被传的变量拷贝
AA ret=hp;//拷贝ret
return hp;

}
//当返回hp时 hp与ret都被销毁 都会调用析构函数 会两次delete内容 这是一个错误 

AA nihao("dede");
f(nihao);//结束 都被释放内存
AA dd(nihao);//dd和nihao都指向无效内存

7.无论何时一个对象被销毁,就会自动调用其析构函数  离开变量作用域时被销毁。当一个对象被销毁时,其成员被销毁。容器被销毁时,其元素被销毁。对于动态分配的对象,其指针指向的变量被运算符delete销毁

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值