gpt4 book ai didi

c++ - 类型定义指针类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:46 25 4
gpt4 key购买 nike

我一直在阅读 SO 并遇到以下问题,这些问题涉及为什么类型定义指针类型不好。

Opaque C structs: how should they be declared?Const-correctness and immutable allocated objects

我想知道是否有人可以扩展并解释为什么类型定义指针类型是错误的,并可能提供一些可能发生错误的示例。

此外,如果对指针类型进行类型定义确实是一个禁忌,那么为什么 Win32 API 会这样做呢?在 Win32 中,HANDLE(以及有效的 Handle 类型)被定义为 void *

最佳答案

Johannes 已经说过 typedef 指针本身并不坏,我同意。

一些准则,基于我对清晰度和可维护性的主观看法:

  • 通常 typedef 函数指针类型。

    原因:
    函数指针声明可能会变得非常困惑和不可读。

  • 通常不要 typedef 指针类型不是抽象的原始对象指针(例如,当您只需要一个“指向的指针时T").

    理由一:
    查看 Foo*Foo const* 比查看 FooPtr 更清楚。使用名称,您必须查找名称以查看它的定义。也许它是一些智能指针,也许它是指向 const 的指针,无论如何;这个名字让你不必要地去别处寻找。

    理由二:
    一些程序员对 consttypedef 指针类型的组合感到困惑。例如。在 Microsoft 代码中,我多次看到 FooPtr const 的等价物,程序员显然认为它意味着 Foo const*。但它不是,它的意思是Foo* const

  • 通常 typedef 当指针类型是一个抽象时,也是一个原始对象指针,可以想象可以用 future ,例如句柄

    原因:与使用命名常量相同:如果没有专有名称,搜索和替换可能会更改具有其他含义的事件,并且无法更改未以完全“正确”方式表达的事件。

但是,对于几乎所有类型的风格,赞成和反对的论据都非常薄弱,所以最终的选择归结为个人偏好、编码标准、同事的意见, 等等。

如果可以自由选择,我通常会选择以上内容。但在特殊情况下,我偏离了这些指导方针/规则。与优秀的艺术一样,优秀的代码是由那些足够了解规则并知道何时打破规则的人产生的......

干杯,

关于c++ - 类型定义指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356778/

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