C++零碎知识

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;//合法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值