次の 3 つの関数を C++ で記述しました。すべての戻り値の型がどのように異なるかを教えてください。また、戻り値はどのようにメモリに格納されますか? const キーワードがすぐ左にあるものすべてに適用されることはわかっていますが、さらに説明が必要です。
const int* sample1();
int* const sample2();
int const* sample3();
次の 3 つの関数を C++ で記述しました。すべての戻り値の型がどのように異なるかを教えてください。また、戻り値はどのようにメモリに格納されますか? const キーワードがすぐ左にあるものすべてに適用されることはわかっていますが、さらに説明が必要です。
const int* sample1();
int* const sample2();
int const* sample3();
const int* sample1();
int const* sample3();
これらの機能は同じです。これらは、定数メモリへのポインタを返します (このメモリは、このポインタを介して変更できません)。ただし、ポインタ自体は変更できます。たとえば、それを増やします。
int* const sample2();
この関数は、非定数メモリへの定数ポインタを返します。ポインタ自体を変更することはできませんが、ポイントであるメモリを変更することはできます。
constは、すぐ右にあるものに適用する必要はありません。例えば
class Foo
{
void Bar() const;
int var;
}
これにより、関数Bar in Fooがオブジェクト内のメンバー変数を変更することが禁止されます。このus2012のコメントに加えて、すべてが要約されています。
私は完全にそうかもしれませんが、これは学校の課題か何かのようですか?