gpt4 book ai didi

c - 是否通过指向 const 未定义行为的指针修改对象?

转载 作者:太空狗 更新时间:2023-10-29 15:17:19 27 4
gpt4 key购买 nike

假设我们有一个 int 变量被引用为 const int*,它又被别名为 int *。如果通过 int * 指针修改变量是未定义的行为,标准是否清楚?

作为示例,请考虑以下代码:

void increment(int* p) {
(*p)++;
}

void call_increment(const int* p) {
increment(p);
}

int main(void) {
int x = 7;
int* p = &x;

call_increment(p);
}

最佳答案

通过指向 const 的指针修改对象是格式错误的,而不是未定义的行为。
通过丢弃 const 来解决这个问题是格式正确的,除非引用的对象实际上是 const

您的代码有不同的问题:
当将 pcall_increment() 传递到 increment() 时,您将丢弃 const 限定符。

任何有用的编译器都会提示 even without being prompted :

g++ -x c -std=c18 main.cpp && ./a.out
main.cpp: In function 'call_increment':
main.cpp:6:15: warning: passing argument 1 of 'increment' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
increment(p);
^
main.cpp:1:21: note: expected 'int *' but argument is of type 'const int *'
void increment(int* p) {
~~~~~^

注意它,最好至少用 -Wall -Wextra 要求更多。

关于c - 是否通过指向 const 未定义行为的指针修改对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56628535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com