C++ cast syntax styles与常规投放,static_cast和dynamic_cast相关的问题: 在C ++中,您更喜欢哪种转换语法样式?
它们可能不会翻译成完全相同的指令(是吗?),但是它们的效果应该是相同的(是吗?)。 如果只是在内置数字类型之间进行转换,我会发现C ++样式的转换语法太冗长。 作为前Java编码器,我倾向于使用C样式强制转换语法,但是我的本地C ++专家坚持使用构造函数语法。 你怎么看? 最好不要使用C样式转换,这是三个主要原因:
如palm3D所述:
由于上述原因,这是有意的。 构造函数语法(正式名称:函数样式转换)在语义上与C样式转换相同,并且出于相同的原因,也应避免使用(声明中的变量初始化除外)。即使对于定义自定义构造函数的类型是否应如此,也存在争议,但在有效C ++中,Meyers认为即使在这种情况下,也应避免使用它们。为了显示:
此处的 根据Stroustrup:
因此,确实是安全的,因为它会进行额外的编译时检查。 关于此主题,我遵循Scott Meyers的建议("更有效的C ++,第2项:更喜欢C ++样式的强制转换")。 我同意C ++样式转换很冗长,但这就是我喜欢它们的原因:它们非常容易发现,并且它们使代码更易于阅读(比编写更重要)。 他们还迫使您考虑需要哪种类型的演员,并选择正确的演员,以减少出错的风险。它们还将帮助您在编译时而不是在运行时检测错误。 绝对是C ++风格的。多余的输入将有助于防止您在不应该使用时进行转换:-) 我使用static_cast有两个原因。
构造函数语法。 C ++是OO,构造函数存在,我使用它们。
追求C ++风格,更糟糕的是,构成C ++显式类型转换的丑陋冗长的代码片段将不断提醒我们所知道的内容(即显式转换很糟糕-导致造词的产生)。 目前,我们到处都使用C样式转换。我问了另一个强制转换问题,现在我看到了使用static_cast的好处,如果不是因为它是"可抓取的"(我喜欢这个术语),就别无选择。我可能会开始使用它。 我不喜欢C ++风格;它看起来太像一个函数调用。 C样式转换是最糟糕的选择。很难看到,无法理解,将不应该合并的不同动作组合在一起,并且不能完成C ++样式转换可以执行的所有操作。他们确实应该从该语言中删除C样式的强制转换。
C样式强制转换语法,请勿进行错误检查。 |