jay*_*lee 4 c c++ pointers typedef
我一直在阅读SO,并遇到了以下问题,这些问题涉及为什么typedefing指针类型不好.
不透明的C结构:它们应该如何声明? 和 Const-correctness和不可变的分配对象
我想知道是否有人可以扩展并解释为什么typedefing指针类型很糟糕,并且可能提供一些可能发生错误的示例.
另外,如果typedefing指针类型确实是禁忌,那么为什么Win32 API会这样做呢?在Win32 HANDLE(和有效的句柄类型)中,typedef为a void *.
Che*_*Alf 11
约翰内斯已经说过typedef"指针本身并不坏,我同意.
一些指导原则,基于我对清晰度和可维护性的主观意见:
通常做 typedef函数指针类型.
原因:
函数指针声明可能变得非常混乱和不可读.
通常不是 typedef指针类型不是抽象的原始对象指针(例如,当您只需要"指向T的指针"时).
原因1:
比较清楚地看到Foo*或者Foo const*说比较清楚FooPtr.使用名称,您必须查找名称以查看其定义的名称.也许它是一些智能指针,也许它是一个指针const,无论如何; 这个名字让你不必要地去别处看.
原因2:
有些程序员通过的组合混淆const和typedef"编指针类型.例如,在Microsoft代码中,我已经看过相当FooPtr const多次,程序员显然认为这意味着它Foo const*.但事实并非如此Foo* const.
当指针类型是抽象时,通常也做 typedef一个原始对象指针,一种指针类型,可以想象将来可以用其他类型替换,例如HANDLE.
原因:与使用命名常量相同:没有正确的名称,搜索和替换可以更改意味着其他内容的事件,并且无法更改未以完全"正确"方式表达的事件.
然而,与几乎所有类型的风格一样,赞成和反对的论据相当薄弱,因此最终的选择归结为个人偏好,编码标准,同事意见等等.
鉴于自由选择,以上通常是我选择的.但在特殊情况下,我偏离了这些准则/规则.和好艺术一样,好的代码是由那些了解规则的人产生的,也知道何时打破他们......
干杯&hth.,
typedef指针类型并不客观.编写得很好的代码使用它来键入指向处理函数类型的指针,它也常见于像HANDLER.
一个人的个人观点可能是坏的,但绝对不是广为人知的观点.我一个人根本不同意这个意见.我自己更少使用这个选项,但我仍然认为它不是"坏".
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |