gpt4 book ai didi

c++ - 如果指针已标记为 const,是否限制 C 中的帮助?

转载 作者:IT老高 更新时间:2023-10-28 21:39:30 24 4
gpt4 key购买 nike

只是想知道:当我向指针添加限制时,我告诉编译器该指针不是另一个指针的别名。假设我有一个类似的功能:

// Constructed example
void foo (float* result, const float* a, const float* b, const size_t size)
{
for (size_t i = 0; i < size; ++i)
{
result [i] = a [0] * b [i];
}
}

如果编译器必须假设 result 可能与 a 重叠,则每次都必须重新获取 a。但是,由于 a 被标记为 const,编译器也可以假设 a 是固定的,因此获取一次就可以了。

问题是,在这种情况下,使用限制的推荐方法是什么?我当然不希望编译器每次都重新获取 a,但我找不到关于 restrict 应该如何在这里工作的好信息。

最佳答案

您的指针是 const,告诉任何调用您的函数的人您不会触及通过该变量指向的数据。不幸的是,编译器仍然不知道 result 是否是 const 指针的别名。您始终可以将非常量指针用作 const 指针。例如,许多函数将 const char(即字符串)指针作为参数,但如果您愿意,您可以向它传递一个非 const 指针,该函数只是向您保证它不会使用该特定指针改变任何东西的指针。

基本上,为了更接近您的问题,您需要向 a 和 b 添加限制,以便“ promise ”编译器,无论使用此函数的人都不会将结果作为别名传递给 a 或 b。当然,假设你能够做出这样的 promise 。

关于c++ - 如果指针已标记为 const,是否限制 C 中的帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457441/

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