【C++】《C++ 17 入门经典》读书笔记 02----显式类型转换

一、显式类型转换语句:

要把表达式的值显式转换为给定的类型,应编写如下格式的转换语句:

static_cast<type_to_convert_to> (表达式)

关键字 static_cast 表示 这个强制转换要进行静态检查,也就是说,在程序编译时进行检查。

强制转换的结果是把从表达计算的值转换为尖括号中指定的类型。

表达式可以是任何内容,包括从单个变量到包含许多嵌套括号的复杂表达式等所有内容。

通过添加显式强制转换,可以告诉编译器缩窄转换是故意执行的操作。如果不是缩窄转换,很少添加显式强制转换。

二、示例说明:

double value1 {10.9};
double value2 {15.9};
int whole_number {static_cast<int>(value1) + static_cast<int>(value2)};

因为变量 whole_number 的初始值是 value1 和 value2 的整数部分之和,所以它们必须分别显式强制转换为 int 类型。变量 whole_number 的初始值应为 25。

注意:与整数除法相同,将浮点数强制转换为整数会进行截断,即丢弃浮点数的整个小数部分。

强制转换不会影响存储在 value1 和 value2 中的值, 它们仍然是 10.9 和 15.9。由强制转换得到的值 10 和 15 只是临时存储,在计算中使用后就删除。这两个强制转换会在计算过程中丢失信息,但编译器总是假定在显式指定强制转换时,用户知道会发生什么。

如果编写如下语句, whole_number 的值就会不同:

int whole_number {static_cast<int>(value1 + value2)};

value1 和 value2 相加的结果是 26.8,在转换为 int 类型时会得到 26。在初始化列表中,如果不使用显式强制转换,编译器要么拒绝隐式缩窄转换,要么对隐式缩窄转换发出警告。


三、补充:

cmath 头文件中的 std::round()、lround() 和 llround() 函数允许将浮点数四舍五入到最接近的整数。

在许多情况下,使用这些函数比使用(隐式或显式)强制转换更好,因为强制转换会进行截断。


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值