1. ホーム
  2. c++

[解決済み] constポインタの意味とは?

2022-04-27 15:45:39

質問

const値へのポインタではなく、constポインタそのものの話です。

私はCとC++を非常に基本的なものを超えて勉強しており、ちょうど今日までポインタが関数に値で渡されることに気づき、それが理にかなっていることに気づきました。 つまり、関数内部では、呼び出し元のポインタに影響を与えることなく、コピーされたポインタを他の値にすることができるのです。

では、関数のヘッダーに書いてあることは何なのか。

void foo(int* const ptr);

このような関数の内部では、ptr は const であり、変更されたくないので、他のものを指すようにすることはできませんが、このような関数があります。

void foo(int* ptr);

なぜなら、ポインタは常にコピーされており、コピーを変更しても呼び出し側のポインタは影響を受けないからです。では、constの利点は何でしょうか?

どのように解決するのか?

const は、C++の非常に重要な概念を追求するために使用すべきツールです。

<ブロッククオート

実行時ではなく、コンパイル時にバグを見つけるには、コンパイラにあなたが意味することを強制させる必要があります。

機能は変わらなくても const は、意図しないことをしているときに、コンパイラのエラーを発生させます。次のようなタイプミスを想像してください。

void foo(int* ptr)
{
    ptr = 0;// oops, I meant *ptr = 0
}

を使用する場合 int* const に変更しているため、コンパイラーエラーが発生します。 ptr . 構文による制限を加えることは、一般的には良いことです。ただ、やりすぎは禁物です。あなたが挙げた例は、ほとんどの人がわざわざ const .