use*_*999 6 c++ resharper-c++ cpp-core-guidelines
我试图在Microsoft Visual Studio中创建一些示例代码
int main()
{
const size_t size = 10;
int arr[size];
for (size_t i = 0; i < size; ++i)
arr[i] = i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在JetBrains ResharperC++发出以下警告 arr[i] = i;
我无法理解这意味着什么以及如何解决此警告.
由于这是我经常使用的方案,我有点担心警告.
任何人都可以建议或指出我正确的方向吗?
编辑:将循环更改为:
for (size_t i = 0; i < size; ++i)
arr[i] = 0;
Run Code Online (Sandbox Code Playgroud)
仍然会发出警告.
一般来说
for (size_t i = 0; i < size; ++i)
arr[i] = something;
Run Code Online (Sandbox Code Playgroud)
很危险。您无法判断是否arr[i]会超出数组范围。这就是C++ 核心指南建议您使用的原因gsl::at(),因为它将进行边界检查以确保您不会超出数组范围。
但这不是唯一的解决方案。如果您只需要在范围内迭代,您可以使用基于范围的 for 循环,例如
for (const auto& e : arr)
//e is each element of the array and is not mutable here
Run Code Online (Sandbox Code Playgroud)
或者
for (auto& e : arr)
//e is each element of the array and is mutable here
Run Code Online (Sandbox Code Playgroud)
对于像您这样的情况,您需要填充数组,您可以使用std::iota像
std::iota(std::begin(arr), std::end(arr), 0);
Run Code Online (Sandbox Code Playgroud)
并且所有这些都保证不会出界。
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |