你“ 看不见 ” 的隐式转换

前言

  对于隐式转换,想必你已经了解了算数转换中的“ 向上对齐 ”的概念;了解了赋值隐式转换的规律( 右值类型转换为左值类型 )。但C++中的隐式转换远不止这些,本文就将告诉你一些容易被忽略,但事实上发生了的隐式转换。

一 数组转换为指针

  在许多情况下,数组都隐式转换为了指针。取数组元素的过程就是根据首元素和元素序号以及元素大小到指定位置取值;数组作为函数参数传递给函数的过程中也转换成了指向首元素的指针。当然,在一些其他的场合,隐式转换未必发生,比如sizeof( 数组 )就不会隐式转换为sizeof( 指针 )。

二 逻辑判断中其他变量向布尔类型隐式转换

  if ( p ), while ( p ),在很多情况下我们都看到这样的语句( p通常是指针 )。这里其实发生了隐式转换,当p不为NULL或者不为0,则p转换成了1作为逻辑判断条件;当p为NULL或者0,则p转换成了0作为逻辑判断条件。

三 逻辑判断中流对象向布尔类型的转换

  while ( cin >> s );这是我们在获取用户输入时常使用的语句,根据cin流获取变量后的状态,它将转换为布尔类型的0或者1。

四 枚举变量或者成员用于计算时隐式转换为整型

  枚举变量或者成员常作为整型出现在算式中,这种情况下,枚举变量或类型都是先向上转换为整型再带入式子计算。

说明

  1. 有很多A到B发生了隐式转换的过程会被误解为A就是B,这是不对的。

  2. 除了本文所列举的,隐式转换的情形还有很多。

原文地址:https://www.cnblogs.com/scut-fm/p/3375048.html