C++ Implicit Conversion

In this lesson, you will learn how to convert data from one type to another in C++. Type conversion is the term for this operation. We will study the fundamentals of C++ type conversion with examples.


Type of Conversion in C++

In C++, there are two different methods of type conversion.

  • Implicit Conversion
  • Explicit Conversion (also known as Type Casting)

Implicit Conversion

Implicit type conversion refers to conversion that occurs automatically during compilation; automatic conversion is another name for this conversion. Consider the following two instances of implicit type conversion.

Implicit type casting includes two types of casting.

  • C++ Widening Conversion
  • C++ Narrowing Conversion

C++ Widening Conversion

A “widening” conversion, also known as a typecast, is a conversion when the “destination” data type has a broader range than the “source” data type. For instance, int to long.

//Example of Widening type-conversion
#include <iostream>

using namespace std;
int main() {
  float varFloat = 0;
  int varInteger = 50;
  varFloat = varInteger;
  cout << "Var Float: " << varFloat << endl;
  cout << "Var Integer: " << varInteger << endl;
  return 0;
}

Output

Var Float: 50
Var Integer: 50

No data loss could occur during this conversion when the “source” data type has a smaller range than the “destination” data type.

Like in the above example, the integer is assigned to float.

Another Widening Casting Example

//Example of Implicit type-conversion (Integer to Float)
#include <iostream>

using namespace std;
int main() {
  int varInteger = 1289;
  float varFloat;
  // Automatic conversion: assigning an int value to a float variable
  varFloat = varInteger;
  cout << "varInteger = " << varInteger << endl;
  cout << "varFloat = " << varFloat << endl;
  return 0;
}

A float variable varFloat in the program has an integer variable varInteger assigned to it. The C++ compiler automatically converts the integer value to a float before assigning it to the float variable.

varInteger = 1289
varFloat = 1289

C++ Narrowing Conversion

A typecast or narrowing is the opposite of a “widening” conversion. For example, long to int, double to float.

Example

//Example of Narrowing type-conversion
#include <iostream>

using namespace std;
int main() {
  float varFloat = 12.53 F;
  int varInteger = 0;
  varInteger = varFloat;
  cout << "Var Float: " << varFloat << endl;
  cout << "Var Integer: " << varInteger << endl;
  return 0;
}

Output

Var Float: 12.53
Var Integer: 12

Another illustration of narrowing conversion is this. The compiler automatically converts the float value to an integer before assigning it to the integer variable. Following the floating-point example, the digits have been shortened because int cannot have a decimal portion. So, data is lost.

Another Narrowing Casting Example

//Example of Implicit type-conversion (Float to int)
#include <iostream>

using namespace std;
int main() {
  int varInteger;
  float varFloat = 1289.12;
  // Automatic conversion: assigning a float value to an int variable
  varInteger = varFloat;
  cout << "varInteger = " << varInteger << endl;
  cout << "varFloat = " << varFloat << endl;
  return 0;
}
Note
Few potential issues could arise during type conversions when a value is assigned to a type with a broader range (for instance, from short to long). There is no issue. But, when a value of a more significant data type is assigned to a smaller data type (for instance, from int to float), data may lose some accuracy.

This concludes the C++ Implicit Conversion lesson. In the next lesson, you will learn about Explicit Conversion in C++.