C++学习和实践笔记一

一、inline

在c/c++中为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。

inline的使用有所限制。只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句如while、switch并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。

声明内联只是一个对编译器的建议。

建议:inline函数的定义放在头文件中。

定义在类中的成员函数缺省都是内联的。对于内联函数,编译器会试图在调用函数的地方扩展函数体中的代码。

inline必须与函数定义体放在一起才能使函数成为内联。仅将inline放在函数声明前不起任何作用。

慎用inline:如果内联不能增强性能,避免使用它!

二、Qt的智能指针

Qt的智能指针包括:QSharedPointer、QScopedPointer、QScopedArrayPointer、QWeakPointer、QPointer、QSharedDataPointer等。

智能指针适用于自动内存管理。其中,QSharedPointer相当于C++11标准中的shared_ptr。QScopedPointer类似C++11中unique_ptr,当内存数据只在一处被使用,用完就安全释放时使用。QPointer用于指向QObject及派生类的对象。

QObject可以构成一个对象树,当这颗对象树的顶层对象被删除时,它的子对象自动的被删除。所以一个QObject对象是否还存在,有时并不是那么的明显。有了QPointer,在使用一个对象之前,至少可以判断一下。

Qt中隐式共享和写时拷贝技术就是利用QSharedDataPointer和QSharedData这两个类来实现的。

三、friend

C++中的friend关键字其实做这样的事情:在一个类中指明其他的类(或者)函数能够直接访问该类中的private和protected成员。可以这样来指明:friend class aclass;

例如:

class Node
{
public:
	Node();
	~Node();

private:
	int data;
	int key;

	friend class BinaryTree;//现在BinaryTree类可以直接访问这里的数据
};

Node::Node()
{
}

Node::~Node()
{
}

class BinaryTree
{
public:
	BinaryTree();
	~BinaryTree();

private:
	Node* root;
	int find(int key);
};

int BinaryTree::find(int key)
{
	//
	if (root->key == key)
	{
		return root->data;
	}
}

BinaryTree::BinaryTree()
{
}

BinaryTree::~BinaryTree()
{
}

友元函数和友元类的作用是一样的,它允许一个函数不需要通过其public接口就能够访问到类中的private和protected成员变量

四、Qt中try catch

比如,在进行数据库事务操作的时候,若某一个语句返回SQL_ERROR则直接抛出异常,在catch块中进行事务回滚。也可以自己定义异常类来进行处理。

Qt中使用标准异常类exception进行处理。

SHE包括Termination handling和Exception handling异常两部分。

C++中使用throw关键字产生异常,try关键字用来检测的程序块,catch关键字用来填写异常处理的代码。

五、数据存储

存储类定义c++程序中变量、函数的范围(可见性)和生命周期。

关键字说明
auto

声明变量时根据初始化表达式自动推断该变量的类型,

声明函数时函数返回值的占位符

register定义存储在寄存器中而不是RAM中的局部变量
static修饰的局部变量可以在函数调用之间保持局部变量的值
extern提供一个全局变量的引用
mutable为了突破const的限制而设置的,被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。参考C++中的mutable关键字 - 夜行过客 - 博客园 (cnblogs.com)
thread_local仅用于数据声明和定义。参考C++11中thread_local的使用_c++ threadlocal_fengbingchun的博客-CSDN博客

C++中需要存储各种数据类型,比如字符型(char)、宽字符型(wchar_t)、整型、浮点型、双浮点型、布尔型等信息。

可使用typedef为一个已有的类型取一个新的名字。

枚举类型,是C++中的一种派生数据类型,由用户定义的若干枚举常量的集合,使用关键字enum。

C++中变量类型包括bool、char、int、float、double、void、wchar_t等。变量实则为程序可操作的存储区的名称。类型决定了变量存储的大小和布局。也允许定义各种其他类型的变量,比如,枚举、指针、数组、引用、数据结构、类等等。

六、C++变量作用域

在函数或一个代码块内部声明的变量,称为局部变量。在函数参数的定义中声明的变量,称为形式参数。在所有函数的外部声明的变量,称为全局变量。

参考C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)_c++ 静态局部变量的作用域_wohu007的博客-CSDN博客

七、运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。

运算符名称说明
算术运算符+、-、*、/、%、++、--
关系运算符==、!=、>、<、>=、<=
逻辑运算符&&、||、!
位运算符&、|、^、~、<<、>>
赋值运算符=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
杂项运算符sizeof、condition ? x : y、,、.、->、Cast、&、*

指针运算符:&,返回变量地址。*,指向一个变量。

可参考:C++ 运算符 | 菜鸟教程 (runoob.com)

引用与指针有三个主要的不同:1、不存在空引用。引用必须连接到一块合法的内存。2、一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。3、引用必须在创建时被初始化。指针可以在任何时间被初始化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值