如何使用GSL :: SPAN来修复任何数组以降低指示警告



我正在尝试解决以下警告。

warning C26485: Expression 'pNMLink->item.szUrl':
No array to pointer decay. (bounds.3...)

此警告是由以下代码引起的。

auto pNMLink = reinterpret_cast<PNMLINK>(pNMHDR);
ShellExecuteW(nullptr, L"open", pNMLink->item.szUrl, nullptr, nullptr, SW_SHOWNORMAL);

C 核心指南的非常有限的文档表明该解决方案是使用跨度。

array decay -- use span (from the GSL)

不幸的是,它没有提供有关如何从数组中构造跨度的信息。

我尝试了以下内容。

gsl::span<wchar_t> url(pNMLink->item.szUrl);

我还尝试了许多其他选项。它们都会产生相同的确切警告。我需要使用什么神奇的咒语来避免警告?

这似乎是静态分析工具中的错误。我怎么知道?因为如果这样做,您将不会收到此警告:

int arr[10];
gsl::span<int> sp1(arr);

,但是如果这样做,您确实会收到警告:

struct Arr { int arr[10]; };
Arr test;
gsl::span<int> sp2(test.arr);

gsl::span具有一个构造函数,该构造函数通过引用采用数组参数,因此,当您直接传递数组时,就不应腐烂。如sp1所示,没有任何警告。并且没有C 的原因为什么使用自动变量时从结构中获取数组会引起衰减。

很清楚,这是分析工具中的错误,一个误报。

相关内容

  • 没有找到相关文章

最新更新