DEV Community

loading...
Cover image for Type Safety in C++

Type Safety in C++

blender profile image Saloni Goyal Updated on ・1 min read

C++ enforces types, that means, every variable has a type and then that is its type forever and it can't be changed.

Expressions like 2 or 2+2 also have a type.

It is okay to "promote"

  • put an integer (eg 2) into a float

The compiler will however warn you if you "demote" and throw away information

  • put a floating point number (say 4.9) into an integer

Alt Text

This applies for variables initialised using auto as well.

Some combinations are just not allowed and will result in compiler errors

  • put a string into an int
  • multiply a string and a float

Do try out the narrowing example shared by Sandor in the comments.

Please leave out comments with anything you don't understand or would like for me to improve upon.

Thanks for reading!

Discussion (3)

pic
Editor guide
Collapse
sandordargo profile image
Sandor Dargo

The compiler might or might not warn you if you demote or narrow variables.

Try this:

#include <iostream>

int main() {
  unsigned int i = -5;
  short x = (short)0x12345678L;
  std::cout << i << std::endl;
  std::cout << x << std::endl;
}
Enter fullscreen mode Exit fullscreen mode

There is no compiler warning at all.

On the other hand, if you use a {}-initialization, you'll receive a compiler warning about a narrowing conversion.

#include <iostream>

int main() {
  unsigned int i {-5};
  std::cout << i << std::endl;
}
Enter fullscreen mode Exit fullscreen mode
Collapse
blender profile image
Saloni Goyal Author

Yes 🤩, the first method didn't give any warning. The second one gave a compiler error on Xcode.
error

Collapse
blender profile image
Saloni Goyal Author

Thank-you so much everyone.
thank-you