C++11中,当类中含有不能默认初始化的成员变量时,可以禁止默认构造函数的生成,
myClass()=delete;//表示删除默认构造函数
myClass()=default;//表示默认存在构造函数
当类中含有不能默认拷贝成员变量时,可以禁止默认构造函数的生成,
myClass(const myClass&)=delete;//表示删除默认拷贝构造函数,即不能进行默认拷贝
myClass & operatir=(const myClass&)=delete;//表示删除默认拷贝构造函数,即不能进行默认拷贝
C的\作用
\后面跟着8进制数小于3个那么认为是一个字符,
\x后面跟着的所有数字均认为一个字符
C++的别名
using SI = Sales_item;//SI是Sales_item的别名
typedef int _int32_t;
typedef和using = 取别名效果相同
getline读取整行字符串,读取出来的string最后没有'\n'
C++11新的遍历语法
范围for语句(遍历数组,容器都可以)
int a[10] = {};
for(auto i : a)
cout << "i = " << i << endl;
合理使用共用体
typedef union AdasMemo{
int value;
struct {
uint8_t FCW_WarnTiming: 2;
uint8_t LDWLKA_WarnTiming: 2;
uint8_t SGW_SysSwState: 2;
uint8_t IHBC_SysSwState: 2;
uint8_t TLR_SysSwState: 2;
uint8_t TSR_SysSwState: 2;
};
} AdasMemo_t;
函数重载时要注意调用函数的二义性
重载的匹配机制:
该函数每个实参的匹配都不劣于其他可行函数需要的匹配
至少有一个实参的匹配优于其他可行函数提供的匹配
auto func(long);
auto func(double ,double = 3.1);
func(3);//编译出错,不知道调用哪一个
注意:由int转换为long和int转换为double优劣相同,编译器无法区分(所有的算数类型转换的级别都一样)
auto fun(int,int)
auto fun(double,double)
fun(3,3.1)//编译出错,两个参数匹配均为一个最优,另一个次之,编译器无法区分
auto fun(int)
auto fun(int&)
auto fun(int*)
auto fun(const int &)
auto fun(const int *)
均可以重载,但是int和const int编译器无法区分不能重载
int会对int&,int*等等参数产生歧义,所以虽然他们可以重载但是调用会有二义性,从而导致编译通不过
C++格式化输出
dec以十进制形式输出整数常用
hex以十六进制形式输出整数
oct以八进制形式输出整数
fixed以普通小数形式输出浮点数
scientific以科学计数法形式输出浮点数
left左对齐,即在宽度不足时将填充字符添加到右边
*right右对齐,即在宽度不足时将填充字符添加到左边
setbase(b)设置输出整数时的进制,b=8、10 或 16
setw(w)指定输出宽度为 w 个字符,或输人字符串时读入 w 个字符
setfill(c)在指定输出宽度的情况下,输出的宽度不足时用字符 c 填充(默认情况是用空格填充)
setprecision(n)设置输出浮点数的精度为 n。
在使用非 fixed 且非 scientific 方式输出的情况下,n 即为有效数字最多的位数,如果有效数字位数超过 n,则小数部分四舍五人,或自动变为科学计 数法输出并保留一共 n 位有效数字。
在使用 fixed 方式和 scientific 方式输出的情况下,n 是小数点后面应保留的位数。
setiosflags(flag)将某个输出格式标志置为 1
resetiosflags(flag)将某个输出格式标志置为 0
boolapha把 true 和 false 输出为字符串不常用
*noboolalpha把 true 和 false 输出为 0、1
showbase输出表示数值的进制的前缀
*noshowbase不输出表示数值的进制.的前缀
showpoint总是输出小数点
*noshowpoint只有当小数部分存在时才显示小数点
showpos在非负数值中显示 +
*noshowpos在非负数值中不显示 +
*skipws输入时跳过空白字符
noskipws输入时不跳过空白字符
uppercase十六进制数中使用 A~E。若输出前缀,则前缀输出 0X,科学计数法中输出 E
*nouppercase十六进制数中使用 a~e。若输出前缀,则前缀输出 0x,科学计数法中输出 e。
internal数值的符号(正负号)在指定宽度内左对齐,数值右对 齐,中间由填充字符填充。
对字符检查的系统函数
int isalnum(int c):检查字符是否为数字或字母;(0~9,a~z,A~Z)
int isalpha(int c):检查字符是否为字母;(a~z, A~Z)
int iscntrl(int c):检查字符是否为控制字符;(八进制000~037以及177的字符)
int isdigit(int c):检查字符是否为十进制数字;(0~9)
int isgraph(int c):检查字符是否为图形表示,依赖于使用语言的环境;09,az,A~Z,以及标点符号)
int islower(int c):检查字符是否为小写的字母;(a~z)
int isprint(int c):检查字符是否为可打印的;(数字、字母、标点符号、空白字符)
int ispunct(int c):检查字符是否为标点符号;(! ” # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~等)
int isspace(int c):检查字符是否为空白字符;(TAB、换行、垂直TAB、换页、回车、空格)
int isupper(int c):检查字符是否为大写字母;(A~Z)
int isxdigit(int c):检查字符是否为十六进制数字;(0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f)
std::remove(_filename) //可以删除文件,0成功, -1失败
int &a = 42;//非法
const int &a = 42;//合法
double dval = 1.11;
int &a = dval;//非法
const int &a = dval;//合法