C++学习笔记系列1-7
显式转换
相对于隐式转换是编译器进行的转换,显示转换则是程序员自己的想法,需要手动操作处理。
括号强转
将高精度类型强制转换到低精度,也可以理解为:将有小数的变量强制转为整数。括号强转最大的作用是在运算过程中强制改变隐式转换规则。如:
① int i1 = (int)14.5f;
② int i2 = 14.5f;
输出的结果都是:14,但是逻辑完全不同。①的逻辑时在代码右侧,先进行了显式转换,将14.5f转换为了int类型得到14,然后赋值给i1;②则是编译器自动进行了隐式转换,将14.5f转为了14,然后赋值给了i2
因此得出结论:
显式转换:自己动手干;
隐式转换:编译器替你干
在通过一个例子巩固一下:
③ int i1 = 2 / 1.1 +3 / 1.1;
④ int i2 = (int)(2 / 1.1) +3 / 1.1;
表面看上去代码基本是一样的,但是④比③多了(int)和(),就意味着这串代码需要强转的,并且强转的int是针对(2 / 1.1)的结果,计算③:
2 / 1.1 ≈ 1.818
3 / 1.1 ≈ 2.727
他们的和约为:4.545,但是编译器通过隐式转换,将其小数点砍掉,只保留4赋值给i1;
计算④:
2 / 1.1 ≈ 1.818
3 / 1.1 ≈ 2.727
但是(int)(2 / 1.1)进行了强转,所以在运算阶段就已将1.818转换为了1,再加2.727,结果是3.727,由于赋值给i,编译器再次隐式转换,将3.727转为3赋值给了i2。
③ int i1 = 1.818 + 2.727;
④ int i2 = (int)(2 / 1.1) +3 / 1.1;
因此输出结果:③:4,④:3
其他类型转字符串
这个函数 :to_string(),可以帮我们将其他类型转为字符串,但我们要添加“#include <string>”这个头文件。
int i = 10;
string str = to_string(i);
此时str输出就是:10;
char c = 'A';
str = to_string(c);
此时str就又被重新赋值,输出结果是:65,这是因为ASC码参与。
总之其他类型时可以转化为字符串的,主要使用to_string()函数,并且要添加“#include <string>”。
字符串转其他类型
同样也要添加“#include <string>”,使用的函数有几种:
string 转 int :stoi(字符串内容)
string str = “123”;
int i1 = stoi(str);// 输入string变量名称
int i2 = stoi(“456”);// 直接输入字符串
输出i1,则得到:123
输出i2,则得到:456
string 转 long :stol(字符串内容)
string 转 long long :stoll(字符串内容)
string 转 unsigned long :stoul(字符串内容)
string 转 unsigned long long :stoull(字符串内容)
字符串转其他类型报错的2个原因:
1、溢出,即:输入的数值超过了对应类型的取值范围;
2、类型不匹配,输入的不是数字,而是中文、英文、符号等。
更多推荐
所有评论(0)