前言
该文章是我学习后整理的,如有错误或者建议请多多指教!!
在C++初始化可以是:
数据类型 变量名{ }
这是c++11后更加通用的初始化方式,在以下的代码的初始化时我都是以这种方式初始化。
数据类型
boolean(布尔类型)
占一个字节的大小,只有两个值
(1)true:真(就是1)
(2)false:假(就是0)
非零即为真
#include<iostream>
using namespace std;
int main()
{
bool a = true;
cout << a << endl; //该打印出来的是 1
a = 3.3;
cout << a; //该打印还是 1
return 0;
}
character(字符类型)
Integer (整形)
关键unsigned拓展了整整变量的正数范围,但是不允许其存储负值。
C++标准保持:
1 == sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
float/double (浮点型)
double(双精度实型)能够增加浮点型数据表示数的范围精度。
auto(自动推导数据类型)
auto 是一个类型推导关键字,用于在声明变量时自动推断其类型。
使用 auto 可以简化代码,使代码更易于阅读和维护,特别是在处理复杂类型或模板编程时。
auto x = 5; // x 是 int 类型
auto y = 3.14; // y 是 double 类型
补充:constexpr关键字(定义一个符号常量)
用于指定一个变量、函数或对象的值在编译时是常量表达式。
这意味着这些值在编译阶段就已经确定,且不可改变。
sizeof关键字
作用:统计数据或者该变量所占用的内存空间的大小
用法:sizeof(数据类型或者变量名)或着 sizeof 变量名
如果是数据类型那就必须要括号
sizeof的返回值是size_t,size_t是一个系统最大无符号的整数类型
通常是unsigned int 或者unsigned long的别名
补:在C语言可以用printf打印sizeof用%zu
#include<iostream>
using namespace std;
int main()
{
int a{33};
cout<<sizeof a<<endl;
cout<<sizeof(a)<<endl;
cout<<sizeof(int)<<endl;
return 0;
}
运行结果是:
4
4
4
数据类型强制转换
C++提供了以下四种类型转换操作符:
1.static_cast
用于非多态类型的转换,如基本数据类型之间的转换、空指针和非类型之间的转换、类之间的转换(只要类定义了相应的转换函数或构造函数)等。
#include<iostream>
using namespace std;
int main()
{
double a{33.332};
int z=static_cast<int>(a);
cout<<z;
return 0;
}
运行结果:
33
2.dynamic_cast
主要用于类层次结构中基类和派生类之间的安全转换。它会在运行时检查转换的有效性。
3.const_cast
用于修改类型的const或volatile属性。
4.reinterpret_cast
提供最低级别的转换,它可以重新解释位模式。这种转换通常不太安全。
收缩类型转化
收缩类型转化是指将一个较大的数据类型(通常具有更大容量或更高精度)赋值或转换为一个较小的数据类型(容量较小或精度较低),并且这种转换可能导致原始值的部分信息丢失。
收缩转换通常涉及到潜在的数据截断或精度损失风险,因为目标类型可能无法完全容纳源类型的所有可能值。
#include<iostream>
int main()
{
int a{ 33 };
char b = {a};
return 0;
}
//会提示错误因为发生了收缩类型转化
//如果修改为则正确
#include<iostream>
int main()
{
int a{ 33 };
unsigned char b = {a};
return 0;
}
输入输出
insertion 流插入符
<<
cout默认输出六位数!
extraction 流提取符
>> 输入数据时 会忽略 回车 空格 制表符
cin自动过滤tab enter 空格键
不过滤空白字符即将空白字符读入ch中
使用流提取符: std::cin >> std::noskipws >> ch ;
使用函数 get(): std::cin.get(ch) ;
#include<iostream>
using namespace std;
int main()
{
int a{};
cin>>a;
cout<<a;
return 0;
}
manipulator 流操纵符
std::setw()
设置宽度 只能生效一次,只影响后面一个数据(仅对输出流的下一数据项起作用)
设置下一个输入或者输出域的最小宽度(数据域在屏幕上所占的列数,即字符个数)
如果设置域宽太小不足显示一个数据,那么系统会自动调整域宽使其能够显示数据的 所有位数
std::setfill()
设置填充 就是把空格变成其他字符
std::setprecision()
小数点位数 默认输出6个数值(包括整数和小数的数值)
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a{};
cin>>a;
cout<<setprecision(4)<<a;
return 0;
}
在使用有圆括号的带有参数的流操作符要带上#include<iomanip>
std::fixed
浮点数用定点表示法输出
fixed的用法
不用fixed的时候
#include<iostream>
using namespace std;
int main()
{
double a{};
cin>>a;
cout<<a;
return 0;
}
cout输出double默认是六位数
如果整数部分超过了六位数那么就会进行科学计数法
如果小数部分加整数部分超过了六位数,整数没有超过六位数,那么就会进行四舍五入
如果小数部分加整数部分没有超过了六位数,那么输入完整的数据
用fixed的时候
#include<iostream>
using namespace std;
int main()
{
double a{};
cin>>a;
cout<<fixed<<a;
return 0;
}
fixed指定浮点数使用小数点输入出
默认是输出小数点后六位,多出来就四舍五入
一般情况下fixed和setprecision一起使用可以指定小数点几位
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a{};
cin>>a;
cout<<fixed<<setprecision(9)<<a;
return 0;
}
在括号里输入要保留的小数点位数
如输入2323.12345678999
则输出2323.123456790
std::scientific
浮点数用科学计数法输出
一般情况科学计数法保存小数点后六位,不够的话用0来补
std::left
左对齐
std::right
右对齐 (默认为右对齐)
std::endl
换行 效果和"\n"一样,速度比"\n"慢 endl是再刷新流所以很慢
C++20新标准format,更加简便的输入输出和格式化
对于以上内容参考了这两个网站
www.runoob.com