首页 > 编程语言 >C++温故补缺(二十):杂项补充1

C++温故补缺(二十):杂项补充1

时间:2023-06-01 15:57:25浏览次数:56  
标签:变量 int auto C++ 运算符 温故 杂项 指针

杂记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

标签:变量,int,auto,C++,运算符,温故,杂项,指针
From: https://www.cnblogs.com/Tenerome/p/cppreview20.html

相关文章

  • C++中 字符串的常见操作
    字符串分割在一些比较流行的语言中,字符串分割是一个比较重要的方法,不论是在python,java这样的系统级语言还是js这样的前端脚本都会在用到字符串的分割,然而在c++中却没有这样的方法用来调用。但是在boost中却提供分割方法。使用vector实现下面是用vector实现的一个简单的split......
  • C++ 中的运算符优先级
     运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。例如x=7+3*2,在这里,x被赋值为13,而不是20,因为运算符*具有比+更高的优先级,所以首先计算乘法3*2,然后再加......
  • C++ 循环
     有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:https:/......
  • C++中的map用法学习
    map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的......
  • CLion 2023 mac(C/C++集成开发环境)功能介绍
    CLion2023mac是一个C++集成开发环境,有一些C++常用的库和方法,例如:ClintListMotorolaMSM755的一个简单的应用程序。可以使用ClintSets将MotorolaMSM755转换为C+,从而降低复杂性。有一个可用于CLinux和所有主流操作系统的命令行界面。可用于任何C++编程语言和函数(包括Ruby),包括......
  • Dlib——C++机器学习库,有传统机器学习的,也有深度学习的
    Dlib的目标用户并没有Hyperopt-sklearn细分,它是一个基于C++语言的通用的机器学习和数据分析库。值得一提的是,虽然Dlib的确是由C++实现的,但它却提供了针对Python语言的API。Dlib的官网称:Dlib是一个现代的C++工具包,实现了大量机器学习的相关算法和工具,可用于在C++环境下创建复杂的软......
  • C++ STL string初探:string类剖析
    一、string的基本概念1.1string是管理字符数组的类常见的初始化使用场景:无参构造和拷贝构造strings1;//无参构造strings2("helloworld");//有参构造对string类的总结:string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操......
  • c++ const详解
    可以使用const的地方就尽量使用const一般引用的类型必须与其所引用对象的类型一致,但是允许一个常量引用绑定到非常量的对象、字面值,甚至是一个一般表达式doublea=42.0;int&b=a;//编译错误,一般引用类型需要与所引用对象类型一致inta=42;constint&b=a;a=......
  • C++控制台实现串口类似超级终端收发功能
     #include<iostream>#include<windows.h>#include<thread>classSerialPort{public://构造函数,打开串口并设置参数SerialPort(constchar*portName){hSerial=CreateFileA(portName,GENERIC_READ|GENERIC_WRITE,0,N......
  • C++模板从入门到精通:初阶篇
    一、泛型编程1.1什么是泛型编程?泛型编程是一种编程风格,其中算法以尽可能抽象的方式编写,而不依赖于将在其上执行这些算法的数据形式1。泛型编程可以提高代码的重用性、可维护性和类型安全性。泛型编程的基础是模板,模板是创建泛型类或函数的蓝图或公式。平常写的函数与泛型编程的模板......