質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3472閲覧

メソッドの左右にあるconst

torimingo

総合スコア122

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/01/21 11:36

メソッドの左右にあるconstには、どのような意味があるのでしょうか?
以下にコードを掲載します。

c++

1 class Cat{ 2 public: 3 const int func() const { 4 return i; 5 } 6 private: 7 int i = 1; 8 }; 9 10 int main(){ 11 Cat cat; 12 cout << cat.func() << endl; 13 return 0; 14 } 15

調べても、よくわかりませんでした・・・。
ご存知の方がおりましたら、教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

最初の方のconstは、メソッドの返り値型の一部です…が、const intを返しても受け取る側では単なるintと扱いが変わりませんので、ほとんど意味がありません(ポインタや参照、オブジェクトを返す場合には「変更不可なオブジェクトを返す」という意味があります)。

最後のconstは、「const Catに対しても呼べるメソッド」という宣言です。constでないメンバ関数を呼ぶ、メンバ変数を書き換えるなど、constを破壊するような操作はできません。

投稿2019/01/21 12:21

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2019/01/21 12:38

ご回答ありがとうございました。 constの使い方をはやく習得したいです。
guest

0

メンバ関数の左にあるconst

返り値をconst指定できます。Wandbox

C++

1int answer = 42; 2 3struct Spam { 4 const int& func() { 5 return answer; 6 } 7} spam; 8 9int main(void) { 10 spam.func() = 0; // エラー! assignment of read-only location 'spam.Spam::func()' 11}

メンバ関数の右にあるconst

当該メンバ関数内ではメンバ変数(mutable除く)がconst指定されます。Wandbox

C++

1struct Spam { 2 void func() const { 3 mutable_val = 42; // mutableメンバ変数はいじっても良い 4 private_val = 42; // エラー! assignment of member 'Spam::private_val' in read-only object 5 } 6 7private: 8 mutable int mutable_val = 0; 9 int private_val = 0; 10}; 11 12int main(void) { 13 14}

また、constなメンバ関数と非constなメンバ関数の両方を持つこともできます。

C++

1#include <iostream> 2 3struct Spam { 4 void func() const { 5 std::cout << "const func\n"; 6 } 7 8 void func() { 9 std::cout << "normal func\n"; 10 } 11}; 12 13int main(void) { 14 { 15 const Spam spam; 16 spam.func(); 17 } 18 { 19 Spam spam; 20 spam.func(); 21 } 22}

実行結果 Wandbox

const func normal func

投稿2019/01/21 12:20

編集2019/01/21 12:28
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問