变量声明之间有什么区别:
//version 1
MyClass* myVar = [[MyClass alloc] init];
//version 2
MyClass * myVar = [[MyClass alloc] init];
//version 3
MyClass *myVar = [[MyClass alloc] init];
每个版本的对象myVar
会发生什么变化?
答案 0 :(得分:2)
任何声明MyClass* myVar
,MyClass * myVar
或MyClass *myVar
之间没有区别:它是程序员偏好。
许多程序员更喜欢MyClass *myVar
,因为它可以防止出现以下简单错误(如果程序员想要声明两个指向MyClass
的指针):
MyClass* myVar, myVar2;
其中myVar2
不是MyClass*
,而是MyClass
。
答案 1 :(得分:2)
纯粹的风格,没有区别。在C语言中,开发人员倾向于选择后一种风格,这可能是因为它使得多个指针的声明变得更加清晰:
int *ptr1, *ptr2;
...
当C出现像Kernighan和Ritchie的C编程语言时,这也是原始作者的风格。顺便说一句,Dennis Ritchie创造了C.
然而,许多现代C ++开发人员,包括Stroustrup本人(C ++的创建者),倾向于赞成第一个约定:
int* ptr = ...;
这种偏好的基本原理可能归结为以下几点:
在C ++中,我们有模板要求我们自己指定类型。关于将vector<int*>
强调为单一类型而不是int*
或其他变体,vector<int *>
似乎更为直接。
当遵循旨在促进安全设计的C ++编码标准时,我们发现自己并不想一次定义多个变量,因为我们通常希望在它们被有意义地初始化时定义它们(避免通过限制范围并立即初始化它们的潜在错误)。 *
答案 2 :(得分:1)
您的三个建议之间没有语义差异。
本质上,当解析代码文件时,预处理器会将所有内容拆分为标记,并且编译过程的所有后续过程都只对这些标记起作用。因此,间距 令牌之间完全被忽略了。
简单指针声明的语法(声明单个元素且没有初始化)由三个标记组成:类型说明符,星号(表示变量是指针),最后是标识符。因此,在这三者之间可以有任意数量的空格,而根本不会改变语义。
人们选择单向另一种方式的原因与风格及其对意图的表达有关。
MyClass* myVar
表明myVar的类型为MyClass
。
MyClass *myVar
清楚地表明指针令牌属于myVar
变量。
因此,如果您决定在单个语句中声明变量列表,则特别推荐第二种替代方法。例如MyClass myVar, *myPointerToVar
。
另一个好的选择是始终使用MyClass* myVar
变体,并且永远不要声明列出几个变量,其中一些是指针。