【发布时间】:2011-09-20 22:56:33
【问题描述】:
注意:这个问题是关于星号 (*) 的位置。
在我看到的大多数 C 代码中(例如,在Beej's guide to network programming 中),所有变量声明/定义都使用T *name 格式,即将* 绑定到变量名。指针被认为属于变量,而不是类型。
在我看到的大多数 C++ 代码中,格式为T* name,即,它将* 绑定到变量的类型。指针被认为属于类型,而不是变量。我自己,作为一个纯 C++ 编码器,也使用这种格式,作为一个 pointer-to-type 显然(对我来说)属于类型,而不是变量。 (顺便说一句,即使是 C++ 标准在示例中也使用这种格式。:))
这有(历史)原因吗?当程序员开始做 C++ 时,思维方式是否发生了变化?
如果 C 编码器(使用前一种格式)能够解释他/她为什么使用它而不是后者,那也很好。
【问题讨论】:
-
出于好奇,你如何写“指向函数返回
T”的指针?只是问问。 -
我认为
int *a, *b与int* a, b是一些人更喜欢前者的原因 -
@Nemo:
std::identity<T (*)()>::type pf;。 :P 当然typedef T (*pf_type)(); pf_type pf;,但这只是因为解析规则。 -
@Anycorn:我不认同这个论点——没有人像你的第二个例子那样编写代码。这与“总是在 IF 语句中添加大括号,因为我们假设下一个人太愚蠢而无法添加它们”的论点一样糟糕。
-
@billy 我很困惑为什么你告诉 Anycorn 他的观点不是问题,而你的回答与他的观点完全相同!
标签: c++ c pointers history conventions