C++中如何通过引用传递类成员的固定大小数组
问题排查结论
你写的数组引用传参语法uint8_t (&arr)[5]本身是完全正确的,这种写法不会生成数组副本,会直接操作原数组内存,不存在语法层面的错误。你观察到数组没被修改,基本都是以下几个非语法问题导致的:
- 没有重新编译代码:改完代码后没有触发全量重编译,运行的还是旧版本的可执行文件,先清理编译缓存重新完整构建一次再验证。
- 调试器显示缓存问题:如果你是通过IDE调试器的变量窗口看的值,大概率是调试符号没更新导致的显示错误。不要只信调试窗口,直接在
doStuff调用后加打印代码输出数组元素实际值验证:
// 调用doStuff后加这段 for (size_t i = 0; i < 5; i++) { printf("%u ", myNode->mArray[i]); }
如果控制台输出是12 34 56 78 90,说明数组已经被正确修改,只是调试器显示错了。
- 调用了错误的同名函数:检查代码里有没有其他重载版本的
doStuff,或者有没有宏定义替换了当前函数,导致实际运行时根本没进你写的这个接收数组引用的版本。可以在这个doStuff函数第一行打个断点或者加打印,确认调用流程真的走到了这个函数里。
额外提一句:你贴的示例代码有两处会直接导致编译失败的笔误,如果你本地代码能正常编译运行,说明你已经在实际代码里修正了,不用在意:一是Node类定义的结尾大括号后少了分号,二是你把main写成了worker类的成员函数,C++程序入口的main必须是全局函数。
内容的提问来源于stack exchange,提问作者pnapster
相关产品推荐
相关产品推荐

