c – 我的老师不像其他人一样打字.有谁知道他在做什么?
作者:互联网
我的老师在我们的一个铸造示例中包含了以下几行. c是Circle类的一个对象,它继承自Point类.在我搜索问题的答案“我可以将类Point的对象转换为Circle类型吗?”我发现他使用的语法与我曾经使用的每个网站不同.这些网站都使用static_cast和dynamic_cast语法.他不会在测试中使用static_cast和dynamic_cast,我只是想知道他在使用什么以及它是如何运作的.
另外,如果你能回答我是否可以将基础对象转换为派生类型,我非常感谢你.
output << "the center of the circle is at " << (Point) c;
// casting `Circle` object `c` with type `(Point)`, calls the first overloaded >stream insertion operator"
解决方法:
(点)c被称为“C风格”演员.这基本上可以被认为是一个强力阵容,尽其所能使演员阵容成功.这意味着它最终可能会导致static_cast成为const_cast甚至是reinterpret_cast.
从https://anteru.net/blog/2007/12/18/200/开始:
C-Style casting, using the (type)variable syntax. The worst ever invented. This tries to do the following casts, in this order: (see also C++ Standard, 5.4 expr.cast paragraph 5)
- const_cast
- static_cast
- static_cast followed by const_cast
- reinterpret_cast
- reinterpret_cast followed by const_cast
And you thought it is just a single evil cast, in fact its a hydra!
来自Stroustrup本人:
Explicit type conversions (often called casts to remind you that they are used to prop up something broken) are best avoided.
和
C-style casts should have been deprecated in favor of named casts.
Stroustrup,Bjarne. C(C深度系列)之旅(Kindle位置7134).皮尔逊教育. Kindle版.
所以建议使用命名演员.在实践中,我仍然会遇到使用C风格的强制转换的专业代码,因为它使代码更加简洁和可读 – 如果你知道你在做什么 – 通常在它使用的地方等同于static_cast.我认为C值风格的演员阵容如果因为这些原因在上下文中被使用显然会导致static_cast,并且Stroustrup来自一个过于面向对象的视角,而他一般不屑于演员,我觉得它的价值是可以的.但你应该更喜欢命名演员.
你的老师可能正在使用C风格的演员表作为一个不那么可怕的演员介绍.
标签:static-cast,c,casting,inheritance 来源: https://codeday.me/bug/20190724/1522103.html