2013-10-07 37 views
0
double diff = static_cast<int64_t>(a- b); 

ab的类型是int64_t这是static_cast有效/合法吗?

我在我们的项目中看到了这段代码。我认为这是可疑的,但我真的不确定。 我熟悉static_cast,我不会写这样的代码。

这是static_cast有效/合法吗?它有用吗?

+2

'a'和'b'是什么类型? –

+0

此代码看起来很奇怪;这个演员没有意义。 –

+0

把一些东西转换成'int64'只将它赋值给'double'看起来很奇怪。也许不是“错误”,而是“奇怪”。当你使用'-Wall -pedantic'时,你的编译器会抛出任何警告吗?现在我们知道'a'和'b'已经是int64_t字节了,另外一个演员应该什么都不做......看起来好像很久以前应该清除掉的一些“剩余”代码。 – Floris

回答

0

这个演员阵容是有效的,但什么也没做。我同意这是可疑的。你应该仔细检查代码应该做什么,如果它是正确的,那么你可能需要重新编写代码,以使意图更清晰,并且看起来不像可疑。

1

如果ab都是int64_t,则表示没有指向演员。它将int64_t类型的结果转换为int64_t。这将是这样做的:

int a = 10, b = 5; 
double c = (int)(a - b); // the cast is not needed, but also not "harmful"