gpt4 book ai didi

c++ - 严格别名规则是否适用于函数调用?

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:53 24 4
gpt4 key购买 nike

关于下面的示例,在 f1 中,没有出现别名,因为 p(void*) 不可访问并且 p1 是访问内存的唯一指针。但是,p1(float*) 和 p2(int*) 之间有一个指针别名,它在外部f1.
我的问题是,这个别名是否非法,也就是说,严格别名规则是否适用于函数调用?

如果这个例子是有效的,如果 f1 是内联的呢?

void f1(void *p)
{
auto* p1 = static_cast<float*>(p);
*p1 = 1.f;
}

int f2()
{
int x = 1;
auto* p2 = &x;
f1(&x);
*p2 = 1;
return *p2;
}

最佳答案

无论您将指针复制多少次或将其传递到其他地方,或者转换它多少次,决定因素始终是该位置实际存储的内容。

在您的情况下,唯一重要的是 static_cast 的参数是否实际上是 float 的地址,而事实并非如此。

关于c++ - 严格别名规则是否适用于函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690256/

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