gpt4 book ai didi

c++ - 使用预处理器反转数组

转载 作者:行者123 更新时间:2023-11-30 03:41:04 32 4
gpt4 key购买 nike

我想使用预处理器以某种方式填充一些数组。我只能对新声明的数组使用预处理器。但是,我需要更改之前声明和使用的数组 p 。时间优化对我的目的来说非常重要。

 #define Reverse(x) {x[63], x[62], x[61], x[60], x[59], x[58], x[57], x[56], x[55], x[54], x[53], x[52], x[51], x[50], x[49], x[48], x[47], x[46], x[45], x[44], x[43], x[42], x[41], x[40], x[39], x[38], x[37], x[36], x[35], x[34], x[33], x[32], x[31], x[30], x[29], x[28], x[27], x[26], x[25], x[24], x[23], x[22], x[21], x[20], x[19], x[18], x[17], x[16], x[15], x[14], x[13], x[12], x[11], x[10], x[9], x[8], x[7], x[6], x[5], x[4], x[3], x[2], x[1], x[0] }


int main()
{
int p[64] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

int q[64] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

//doThings

p= Reverse(q); // line A - Gives error

int s[64] = Reverse(q); // line B - Works properly

//doThings
}

我遇到了这个错误:

Error 11 error C3079: an initializer-list cannot be used as the right operand of this assignment operator c:\users\ferda\documents\visual studio 2013\projects\consoleapplication3\consoleapplication3\consoleapplication3.cpp 39‌​3 1 ConsoleApplication3

最佳答案

内置数组类型不允许为其分配另一个数组或对已初始化的数组使用聚合初始化,您将不得不使用 memcpy 或 for 循环来用新值更新它。如果您使用 std::array,您的代码将编译反而。它提供了operator=:

operator= (implicitly declared) overwrites every element of the array with the corresponding element of another array (public member function)

http://coliru.stacked-crooked.com/a/8e664210b7f7f73b

我不确定这是否会像您预期的那样快速工作,gcc 会生成大量的 mov 指令:https://godbolt.org/g/tzUqC3 .我想使用 for 循环可能会更快,因为它需要更少的缓存。一如既往地分析您的代码。

关于c++ - 使用预处理器反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563381/

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