常量数据:两个声明的路径
在 C 中,您可以使用 const 使对象的数据或指针不可修改。传统语法是:
const T *obj; // Pointer to const data T const *obj; // Equivalent to const T*
但是,您可能已经注意到另一种语法:
Object const *obj;
这提出了一个问题:为什么这两种语法都有效,以及什么时候应该使用一个而不是另一个?
Const 的诞生数据
const 在类型声明中的定位源于 C 的早期。Kernighan 和 Ritchie 定义的语言语法允许将 const 数据声明为:
const T *obj;
本质上,C 编译器从左到右解析标记,根据标记的类型将 const 应用于适当的类型规范
Const 限定符的应用
const 在类型声明中的位置不会影响结果,因为 const 始终适用于其左侧的声明。对于指针:
语义等价
这种等价的根本原因是无论 const 的位置如何,声明的语义含义保持不变。无论您使用 const T *obj 还是 T const *obj,您都可以保护 obj 指向的数据不被修改。
函数指针:类似情况
类似声明函数指针时会出现这种情况:
void * function1(void); // Function returning void * void (* function2)(void); // Function pointer to a function returning void
同样,从左到右解析语言语法允许这些替代声明。
偏好和用例
最终,对一种语法相对于另一种语法的偏好是主观的。不过,一般建议使用:
无论您的偏好如何,两种语法都是有效的并且语义保持一致。
以上是为什么 `const T *obj` 和 `T const *obj` 在 C 中都有效,什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!