提问人:sarias 提问时间:11/14/2023 更新时间:11/14/2023 访问量:92
const void * vs. void const * [重复]
const void * vs. void const * [duplicate]
问:
对于这个问题,我得到了不同的答案。我知道其他数据类型的顺序无关紧要/只是通过偏好(例如 const char * 和 char const *)。
不确定这是否同样适用于 void *: const void * == void const *?
答:
1赞
gulpr
11/14/2023
#1
没有区别。 并定义类型为 的对象。const void *ptr
void const *ptr
ptr
pointer to const void
如果将 const 移到 the 之外,它将改变定义的含义。*
void * const ptr;
将定义为 .ptr
const pointer to void
一起:
const void *ptr; // <= pointer to const void
void const *ptr; // <= pointer to const void
void * const ptr; // <= const pointer to void
const void * const ptr; // <= const pointer to const void
1赞
John Bode
11/14/2023
#2
在这种情况下,与任何其他类型之间没有区别 -- 这两个声明都创建指向 .void
const void
这有点奇怪和多余,因为无论如何表达式都不能成为赋值的目标;如果取消引用的指针是赋值的目标,则编译器将进行 bitch,无论它是否被声明。 哎呀,void
const
void *ptr;
...
*ptr = some_T_value; // constraint violation, target is void
您必须强制转换以指向不同的非数组对象类型才能执行赋值:ptr
*(T *)ptr = some_T_value;
声明为并不能真正给你带来任何东西。ptr
const void *
现在,如果你做过类似的事情
void * const ptr;
这将是不同的;您不是在创建指向 的指针,而是创建指向 的指针;你将无法赋值给,因为它是一个表达式,但你也无法赋值给,因为它在本例中被声明。const void
const
void
*ptr
void
ptr
const
评论
3赞
Eric Postpischil
11/14/2023
Re “Declaring as doesn't really buy you anything”:之后,产生诊断。之后,它没有。ptr
const void *
const void *p;
int *i = p;
void *p;
0赞
John Bode
11/14/2023
@EricPostpischil:啊。有趣。没有想到(显然)
评论
void
const void *
是指向常量未知对象的指针。 是指向常量未知对象的指针。语义上完全相同。在此上下文中,其行为与任何其他类型相同。void const *
void