【发布时间】:2018-03-16 10:50:03
【问题描述】:
在下面的示例代码中,ComputeSomething() 返回对数组的引用。
我被要求使用 C++ 核心指南(MSVC 工具链上的 NuGet 包)作为额外的静态分析工具。
在ComputeSomething() 的返回行上,静态分析工具警告说存在一个指向指针衰减的数组。我假设意图是更改它以使衰减明确(类似于&(computed_values[0])),但这会破坏通过引用返回数组的点。
对于这种通过引用返回数组的特定用例,这是一个有效的警告还是噪音?
(假设 C++98 约束)
float (&ComputeSomething( const seed_t(&seed_data)[num_of_elems_seeded] ))[num_of_elems_calculated]{
static float computed_values[num_of_elems_calculated];
// do something...
return computed_values;
}
【问题讨论】:
-
请在 SO 上简化您的代码 sn-ps!没有人需要您的命名空间、一长串初始化变量、您的计算等等。您只想返回参考并获得警告。所以请把你的例子简化为这个!
-
函数周围多余的(无意义的)括号是怎么回事?这很奇怪。
-
@JesperJuhl " int (&foo())[bar]; " 声明了一个函数 foo ,它返回对大小为 bar 的 int 数组的引用,我不确定这是否能回答您的问题/评论?
-
没有看到你如何调用我们无法回答的函数。函数本身返回一个引用。如果它衰减与否应该取决于你用它做什么。
标签: c++ c++98 cpp-core-guidelines