gpt4 book ai didi

c++ - 零开销下标运算符,用于一组值

转载 作者:行者123 更新时间:2023-12-01 15:06:40 25 4
gpt4 key购买 nike

假设我们有一个带有以下签名的函数(由于该函数是旧版API的一部分,所以不能更改签名):

void Foo(const std::string& s, float v0, float v1, float v2)
{ ... }

如何在不实际将数据复制到某种容器的情况下使用下标运算符 []按索引访问最后三个参数?

通常,遇到此类问题时,我会将值放在 const std::array<float,3> args{v0,v1,v2};之类的容器中,并使用 args[0]访问这些值,不幸的是,需要复制这些值。

另一个想法是使用参数包来访问参数,而参数包又涉及到创建模板化函数,这似乎对于该任务而言是过大的。

我知道使用 std::array<>的版本可能是合适的,因为编译器可能会优化此类内容,但是,这个问题是出于学术动机。

最佳答案

你不能不能以保证零开销或类似于数组下标的开销的方式来保证。

当然,您可以执行类似float* vs[]{&v0, &v1, &v2};的操作,然后取消引用vs[i]的结果。为此,尽管结果不可避免地受到限制,但您可以使实用程序类充当透明的引用(尝试避开引用数组是非法的)。

但是,最终的问题是,标准中没有任何内容可以保证(甚至不建议)函数参数以任何特定的内存顺序存储。在大多数平台上,这些float中的至少一个将位于寄存器中,这意味着根本没有办法对它进行下标。

如果一组对象不是以数组开头,则无法将它们视为数组。

关于c++ - 零开销下标运算符,用于一组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60060070/

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