【发布时间】:2013-05-06 04:06:44
【问题描述】:
这个问题是针对 C# 的,但了解 C/C++ 也会很有趣。我猜,Java 必须使用条件,因为它的动态类型转换/缺乏编译时泛型。
出于性能原因,最好在可能使用无分支逻辑的情况下避免分支。因此,为了避免在关键部分中可能出现的情况,了解这一点会很有趣。
【问题讨论】:
-
嗯,在问它是否分支之前,先问一下总体上做了什么不是更有意义吗?更不用说你的前提是有问题的,你最好测量你关心的具体案例的性能。
-
我指的是问题中的前提:出于性能原因,无分支实现更可取。请不要弄错“嗯”,我只是对你为什么要问这个特定的细节而不是关于整个强制转换的实现感到困惑。知道某物是否有分支很少能说明它的性能,就像知道某物有轮子并不能说明它的移动速度。如果您explained your actual problem,答案更有可能真正解决您的问题。
-
@delnan 我不需要解释任何问题。我问的是一个简单、笼统的问题,作为回报,我期待一个简单的答案。最终会有人给出这个答案。可能是具有语言/编译器设计经验的人。作为其他 SO 编程网站之一的前 10 名用户,我还要在这里指出,更多的问题应该不那么冗长。所以在我看来,这是一个典型的问题。
-
对于 C++:
static_cast、const_cast和reinterpret_cast可以在编译时解析。无需进行分支,尽管可能需要调用函数,如果不能内联相应的构造函数/强制转换运算符。除此之外,我认为对于如何实现本机类型之间的转换几乎没有保证。所以我想说类型转换的确切成本可能取决于特定的编译器(版本)、架构等。铸造是否有回报还取决于矢量化能力和其他东西。问题太笼统了(对于 C++)恕我直言。 -
在 C# 中,许多不同类型的强制转换实际上具有相同的语法,但对于实现真正的强制转换来说,它真的很重要。在基本类型之间进行转换时,
checked-mode 也很重要。
标签: c# c++ optimization conditional language-design