首页 > 代码库 > C++个人未解决笔记或未熟悉的使用

C++个人未解决笔记或未熟悉的使用

1、_Pragma()。因为能力有限,目前写的库都是逻辑库和遵循C++风格,较少使用宏定义的高级用法,待续。

2、除0错误,不叫异常。

原理:

此异常非彼异常。
除0在Linux下收到的是SIGFPE信号,而非C++的exception。
收到SIGFPE,如楼上所说,进程直接被kill了。
在C++中,除零 是错误,而非 异常
在操作系统层面,除零 一般是异常
操作系统的异常 和 C++的异常 是无任何关系的两个不同概念

3、可变参数的使用:

1)

#ifndef LOG
#define LOG(...) {\
std::fprintf(stderr,"%s :\n",__FILE__);\
std::fprintf(stderr,"Line %d:\n",__LINE__);\
std::fprintf(stderr,__VA_ARGS__);\
std::fprintf(stderr,"\n");\
}
#endif


__VA_ARGS__只能适用于宏定义中

2)

va_start(args, i);//i为前一个参数,因为是在内存中不规范地进行读栈,所以需要一个哨兵,时开始节点,args指向i之后的一个地址

void foo(int i,...)
{
	va_list args;
	std::string temp;
	va_start(args, i);
	temp = va_arg(args, std::string);
	LOG("i= %d,string = %s", i, temp.c_str());
	va_end(args);
	
}
foo(12345, std::string("you are a stupid guy!!"));//对称操作,以string

传值,则以string解析,和socket原理类似,发生在单机程序内部

4、noexcpt(bool) 默认为true,以后写库要加上相关的说明,有利于别人正确的处理程序

5、static_assert 用于预编译情况使用

6、sizeof(Class::data)支持

7、final/override 已熟悉

8、匿名变量类型初始化模板,以及模板的默认参数需要重新看,变长模板---------------------------------重点,用起来

9、继承构造函数和委派构造函数已在项目实用,目前没遇到问题

10、左右值,以及转化规则需要重复看和使用。移动语义已经移动构造函数。 ----------------------重点

11、初始化列表比较熟悉,要小心类型收窄的编译错误

12、POD---------------------------------------------------------重点,看了忘了,要用,结合default 、delete属性使用

13、>>正确识别,主要是编译器问题。 gnu -std=c++11 即可启用C++11,VS2012以上已支持新词法。

14、auto decltype关于引用的推导要重复看-----------------------------------------重点

15、枚举和强枚举、联合体,熟悉使用

16、auto_ptr被放弃,代替方案:shared_ptr/weak_ptr/unique_ptr,确认赋值操作的区别和使用方法,还行。

17、编译时常量的使用------不是很熟,需要看书

18、线程类和原子类型一开始使用,线程的存储问题----------------------重点

19、lambda语法,已经开始使用很久了。---------重点之一,要小心传参和stl库之间的细节







C++个人未解决笔记或未熟悉的使用