其他分享
首页 > 其他分享> > c – 我的老师不像其他人一样打字.有谁知道他在做什么?

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