gpt4 book ai didi

c++ - 如何使用 gsl::span 修复 No array to pointer decay 警告?

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:58 25 4
gpt4 key购买 nike

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

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++ Core Guidelines 的极其有限的文档建议解决方案是使用跨度。

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++ 解释为什么从结构中获取数组会在使用自动变量时不会引起衰减。

很明显,这是分析工具中的错误,误报。

关于c++ - 如何使用 gsl::span 修复 No array to pointer decay 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819631/

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