gpt4 book ai didi

函数可以返回一个限制指针的参数吗?

转载 作者:行者123 更新时间:2023-12-04 15:31:27 25 4
gpt4 key购买 nike

假设我有一个函数接受 2 个非别名 int*,并将一个 int 复制到另一个,然后返回 int* 作为目的地。例如:

int* copy_int(int* restrict dest, int const* restrict src) {
*dest = *src;
return dest;
}

以下任何调用代码是否为未定义行为?

void caller(void) {
int dest;
int src = 42;

copy_int(&dest, &src); // ignored return value aliases &dest
}
void caller(void) {
int dest;
int src = 42;

int* dest_addr = copy_int(&dest, &src); // dest_addr aliases &dest
}
void caller(void) {
int dest;
int src = 42;

int* dest_addr = &dest;
int* dest_addr_2 = copy_int(&dest, &src); // dest_addr_2 aliases dest_addr
}

或者我可以安全地假设 restrict 只适用于被调用者内部,并且我可以在函数调用之外为这些指针设置别名吗?

最佳答案

restrict 适用于内部 copy_int(int* restrict dest, int const* restrict src) 函数可以假设的内容 - 导致更好的优化代码。调用者有义务传递不重叠数据的地址。

所有案例在这方面都做同样的事情:copy_int(&dest, &src);destsrc 不互为别名。 OP 出现的别名情况不会影响 dest, src

下面的错误代码示例。

copy_int(&src, &src);  // bad

关于函数可以返回一个限制指针的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61194601/

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