web-dev-qa-db-ja.com

char ** argvを使用するときにポインタ演算を回避する方法

最初のコマンドライン引数を出力しようとすると、次のようになります。

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

clang-tidyは警告を出します:

警告: '[cppcoreguidelines-pro-bounds-pointer-arithmetic]の「ポインタ演算を使用しないでください」

ポインタ演算を使用せずにargvの値を使用する別の方法はありますか?ポインタ演算を使用する必要がある賢明な方法でchar**にアクセスしていませんか?

コマンドライン引数を処理するための特殊な関数がいくつかあることを感謝しますが、それらは単純に1つの引数を出力するには重すぎるようです。

clangコンパイラを使用し、cmakeでビルドして、c++で記述しています。

17
user7119460

から clang-tidy --cppcoreguidelines-pro-bounds-pointer-arithmetic

ポインタは単一のオブジェクトのみを参照する必要があり、ポインタ演算は壊れやすく、間違えやすいです。 span<T>は、データの配列にアクセスするための境界チェックされた安全なタイプです。

あ、はい:

ポインタ演算を使用せずにargvの値を使用する別の方法はありますか?ポインタ演算を使用する必要がある賢明な方法でchar **にアクセスしませんか?

あなたは完全に正しいです。ただし、ガイドラインは、そのポインタ演算を非表示にして、演算を実行する前にヘルパークラスに境界チェックを実行させることです。 argvargcからspan<char*>を作成できます。

10
user743382