3

ポインタを介して関数に渡された変数を定数が保護しているとはどういう意味ですか?

例えば ​​:

int f ( const int vec[]);

次のコマンドは正しくありません。

vec[i] = exp;
4

7 に答える 7

0

変数値を直接変更しないようにするための修飾子です。ポインターなど、他の方法でメモリを変更することはできません。何かを変更したくない場合に使用するのは良いですが、依存するのは良くありません。

于 2013-06-10T15:47:20.003 に答える
0

const *他の人は、あなたの宣言に示されているパラメーターは、指定されたデータが読み取り専用であることをコンパイラーに伝えるとすでに言っています。関数のパラメーターをそのように宣言する理由について、より高いレベルの説明を提供したいと思います。この宣言の背後にある考え方は、関数が渡したデータを変更しないことをアプリケーションの読者に伝えることです。

これは、予期しない副作用が発生しないことを示す、インターフェイスの約束です。

逆に、const 宣言がないと、バッファーが変更される可能性があることが明らかになります。

const *これは、単純な * のみを期待する関数に渡すと警告が生成されますが、逆は生成されない理由でもあります。

例:strlenは from として宣言されsize_t strlen (const char *s)ているため、データを変更する危険なしに呼び出すことができると推測できます。 strtokそれから宣言さchar *strtok (char *s, const char *delim)れているのは、渡すバッファが変更されているため、注意する必要があると思います。

TL;DR const は、関数のプロパティに関する情報を追加します。

于 2013-06-10T15:56:17.127 に答える