C++温故补缺(二十):杂项补充1
杂记1
布尔型
c语言中表示布尔型一般用0/1,或者flag,c++把布尔型内置了,布尔型的变量只有true和false 两个值
和0/1的关系:
true和false不是0/1,c++编译器会把非0处理成true,把0处理成false
宽字符型
char型只有一个字节的长度,如果要在c中表示汉字,则需要使用字符串数组
c++添加的宽字符型就是专门用来存储汉字,日文,韩文等占两个字节字符的.
wchar_t的本质:
typedef short int wchar_t;
是的,它和short int有相同的2个字节空间.
使用前需要导入头文件<locale>,并需要用setlocale(LC_ALL,"chs");
指定中文
如:
wchar_t c[]=L"你好";
wcout<<c;
L:是常量的前缀,L表示宽字符
wcout也是针对wchar_t的输出
常量的前缀和后缀
常量的前缀像上面说的L,用来表示宽字符,这是字符型的常量,除此之外,还有:
整型前缀:0x表示十六进制
0表示八进制
整型后缀:U表示无符号数
L表示长整数(long)
缺省的参数
在定义函数时可以在形参中为其赋值,表示这个参数可缺省
void f(int x,int y=1){
cout<<x+y;
}
int main(){
f(3);
}
缺省的参数必须放在其他的参数后面
restrict
restrict关键字,规定被其修饰的指针所指的对象不能被其他指针引用
在C++中用__restrict来修饰指针
int a;
int* __restrict p=&a;
这样,变量a就只能被指针p所指,不能被其他指针指
作用:有些时候可以优化性能,见知乎
存储类
和C相同都有auto,extern,static,register存储类,并新增mutable和thread_local(C++11)
auto:C语言中auto用来声明函数内的变量,C++98标准中和C相同.C++11后,auto用来定义自动推导的类型,且必须在定义时赋初值.
int a=1;
float b=1.2;
auto c=a;
auto c=b;
编译器会根据给赋初值的类型推导auto变量的类型,常用于lambda表达式,这样lambda的返回类型就可以省略
mutable用于类中,用mutable修饰的成员变量可以被const函数修改
thread_local:
thread_local说明符声明的变量仅可以在创建其的线程上访问.变量在创建线程时创建,在销毁线程时销毁.
与其他几个存储类不同的是,thread_local只能用于修饰变量,不能修饰函数
杂项运算符
运算符 | 描述 |
---|---|
sizeof | sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。 |
Condition ? X : Y | 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。 |
, | 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。 |
.(点)和 ->(箭头) | 成员运算符用于引用类、结构和共用体的成员。 |
Cast | 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。 |
& | 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。 |
* | 指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。 |
其中,逗号运算符例子:
#include<iostream>
using namespace std;
int main(){
int a=0;
int j;
j=(a++,a-99,a+2);
cout<<j;
}
逗号运算符必须在括号中,它的意义是先从左到右运算,最后把最右边的值返回
这个例子输出:3
先运算a++ =>a=0,然后运算a-99,a-99并不会对a做影响,所以无效,最后返回a+2,也就是3
最终a的值为1,j的值为3
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/cppreview20.html