我是否真的每次都想在原始类型之间进行转换时使用static_cast?

Des*_*ume 9 c++ primitive casting coding-style

是什么让这个

long l = 1;
char c = static_cast<char>(l);

float f = 1.0f;
int i = static_cast<int>(f);
Run Code Online (Sandbox Code Playgroud)

比这更好

long l = 1;
char c = (char)l;

float f = 1.0f;
int i = (int)f;
Run Code Online (Sandbox Code Playgroud)

何时将一个原始数据类型转换为另一个?

我有很多遗留代码在类似的情况下使用第二种样式进行类型转换,所以这也是一个问题,我是否可以不执行该代码的全面修订.

R. *_*des 23

面向未来.

让我们说将来我这样做:

float blah = 1.0f;
float* f = &blah;
Run Code Online (Sandbox Code Playgroud)

现在,int i = static_cast<int>(f);停止编译,但int i = (int)f;做了一个reinterpret_cast.

static_cast<int>就是这正是我要你做.(int)做什么,你可以给我弄一个int.对于后者,编译器将不遗余力地为您获取int值,而这很少(从不?)是可取的.


Joh*_*McG 8

每一次是有点的指示.

你不应该经常在原始类型之间进行转换,因此每次输入一些额外的字符是一项过于繁重的任务.这有点像抱怨每次做一些危险的活动时都要戴头盔.如果您发现戴头盔太烦人,问题可能是您经常进行危险活动而不是头盔要求.

至于解决遗留代码,您可以查看此问题以获得一些答案(包括我自己的答案).


Adr*_*thy 6

是的你应该.

演员阵容是错误的主要来源.它们是类型系统的方法,它是程序员可以使用的最好的错误捕获程序之一.

static_cast 比旧的c风格的演员更加明显和更具体.你希望他们脱颖而出.在调试时,您希望它们显而易见.你希望下一个程序员能够理解你为什么要这样做.

它更难打字的事实static_cast<blah>(foo)也是一个好处,因为它会鼓励你只在绝对必要的情况下施放.