尝试打印第一个命令行参数时:
std::cout << argv[0] << std::endl;
clang-tidy发出警告:
警告:'不要使用指针算术' 来自[cppcoreguidelines-pro-bounds-pointer-arithmetic]
是否有另一种方法可以在不使用指针算法的情况下使用argv
的值?是不是通过任何合理的方法访问char**
必须使用指针算法?
我很欣赏有一些专门的函数来处理命令行参数,但它们似乎太重了,只需打印一个参数。
我在c++
写作,使用clang
编译器并使用cmake
构建。
答案 0 :(得分:8)
来自clang-tidy - cppcoreguidelines-pro-bounds-pointer-arithmetic:
指针应该只引用单个对象,指针算法很脆弱且容易出错。
span<T>
是一种用于访问数据数组的边界检查的安全类型。
是的:
是否有另一种方法可以在不使用指针算法的情况下使用argv的值?是不是通过任何合理的方法访问char **必须使用指针算法?
你完全正确。但是,指南是关于隐藏指针算法,让助手类在执行算术之前进行边界检查。您可以从span<char*>
和argv
构建argc
。