在这里阅读了很多关于 C++ 中 C 风格转换的答案后,我仍然有一个小问题。我可以对内置类型使用 C 风格的转换吗?long x=(long)y;
或者它仍然被认为是不好和危险的?
我可以对 long x=(long)y; 等内置类型使用 C 风格转换吗?或者它仍然被认为是不好和危险的?
永远不要使用它们。反对使用它们的原因也适用于此。基本上,一旦你使用它们,所有的赌注都会消失,因为编译器将不再帮助你。虽然这对于指针来说比其他类型更危险,但它可能是still危险并且在出现错误时给出的编译器诊断很差,而新样式的强制转换提供了更丰富的错误消息,因为它们的使用受到更多限制:Meyers 引用了强制转换的示例const
ness:使用除const_cast
不会编译,从而明确what发生在这里。
此外,无论类型如何,都存在一些其他缺点,即语法考虑:C 风格的强制转换非常不引人注目。这不好:C++ 强制转换在代码中明显突出,并指向潜在危险的代码。还可以在 IDE 和文本编辑器中轻松搜索它们。尝试在大型代码中搜索 C 风格的强制转换,您就会发现这有多么困难。
另一方面,与 C++ 类型转换相比,C 风格类型转换没有任何优势,因此甚至无需考虑权衡。
更一般地说,Scott Meyers 建议在《Effective C++》(第 27 项)中“最小化强制转换”,因为“强制转换会颠覆类型系统”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)