即使指针的数据为const,也会改变指针指向的位置的不确定行为?例如:
const char* p = "foo";
p = "boo";
我相信这不是UB,因为指针本身不是const,并且我没有修改"foo"
对象。
额外问题:并更改const指针的数据?会UB吗?例如:
char* const p = "foo";
(*(char**)&p) = (char*)malloc(strlen(p));
我相信这不是UB,因为指针本身不是const,并且我没有修改“ foo”对象。
这是正确的。指针不是const
,因此您可以根据需要将其更改为指向其他对象。在这种情况下,它不会造成内存泄漏,但是请记住,如果指针指向用new
分配的数据,并且它是指向该数据的唯一指针,则需要在重新分配指针之前调用delete
,否则您将内存泄漏。
额外的问题:并删除指针的常数?会是UB吗?
[如果尝试修改从中删除了const
的const
对象,则只有UB,在这种情况下,您要这样做。只需删除const
是可以的,有时是需要的,但是除非该对象不是const
的开始,否则永远不允许您修改该对象。即,当传递的对象不是const
时,将通过const引用传递给函数的对象上的const抛弃。
第一个代码段中的代码是100%正确的。您有一个指向const p
的指针,该指针指向其他内容。一切都很好,处于薄荷状态。