使用 char** argv 时如何避免指针运算

How to avoid pointer arithmetic when using char** argv

尝试打印第一个命令行参数时:

std::cout << argv[0] << std::endl;

clang-tidy 发出警告:

warning: 'do not use pointer arithmetic' from [cppcoreguidelines-pro-bounds-pointer-arithmetic]

是否有其他方法可以在不使用指针算法的情况下使用 argv 的值?通过任何明智的方法访问 char** 难道不是必须使用指针算法吗?

我很欣赏有一些专门的函数来处理命令行参数,但它们对于简单地打印一个参数来说似乎太重量级了。

我正在 c++ 中编写,使用 clang 编译器并使用 cmake 构建。

来自clang-tidy - cppcoreguidelines-pro-bounds-pointer-arithmetic

Pointers should only refer to single objects, and pointer arithmetic is fragile and easy to get wrong. span<T> is a bounds-checked, safe type for accessing arrays of data.

是的:

Is there an alternative way to use the values of argv without using pointer arithmetic? Isn't accessing a char** by any sensible method going to have to use pointer arithmetic?

你完全正确。然而,指南是关于隐藏指针算法,让助手 class 在执行算法之前进行边界检查。您可以从 argvargc 构造一个 span<char*>。例如。在 C++20 中你会这样写:

auto args = std::span(argv, size_t(argc));

然后使用 args 而不是 argv