gpt4 book ai didi

c++ - type(myVar) 和 (type)myVar 的名称是什么?他们都是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 02:48:43 26 4
gpt4 key购买 nike

几乎是对 What's the difference between function(myVar) and (function)myVar? 的翻版

但我想知道:

这些变体的名称是什么?它们是“坏的”吗?

type(myVar) 是类似于构造函数的语法,但对于基本类型来说,它是否与执行 C 风格的转换一样,这在 C++ 中被认为是错误的?

(type)myVar 这看起来确实是 C 风格的转换,因此一定是不好的做法?

我见过一些例子,人们用 int(a) 替换 (int)a 之类的东西,理由是 C 风格的版本不好/错误,但链接的问题说他们都是一样的!

最佳答案

What is the name of these variants

  • type(expr) 被称为函数式转换。
  • (type)(expr) 被称为 C 风格转换。

and are they 'bad'?

Yes.首先,两者在语义上是完全等价的。它们是“坏的”,因为它们不安全——它们可能等同于一个static_cast,但同样是一个reinterpret_cast,并且不知道这两个类型 expr 的类型不可能说1。在某些情况下,它们还会忽略访问说明符(C 样式转换允许在私有(private)继承层次结构内进行转换)。此外,它们不像显式 C++ 样式转换那样冗长,这是一件坏事,因为转换通常意味着在 C++ 中脱颖而出。


1 考虑 int(x):根据 x 的类型,这可以是 static_cast (例如 auto x = 4.2f;) 或 reinterpret_cast(例如 auto x = nullptr;int 足够大以容纳指针)。

关于c++ - type(myVar) 和 (type)myVar 的名称是什么?他们都是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com