モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

C/C++ の const は修飾する位置で意味が異なる

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/07/09
最終更新最終更新
2015/11/14
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    C/C++やアルゴリズムに注目し、実践的な知識を発信しています!

    0
    ステッカーを贈るとは?

    ポインタではない場合

    初期化時に与えられた値は変更されないことを表現できます。

    const int num = 123;
    

    ポインタの場合

    いくつかの紛らわしい修飾パターンがあります。

    パターン1

    int num = 123;
    const int *ptr1 = #
    int const *ptr2 = #
    

    ptr1とptr2は同じ意味を持ちます:
    「ptr1 (あるいは ptr2) は read only な int (すなわち const int) へのポインタ」

    そのため、指す先の値を変更しようとして、

    *ptr1 = 777;
    

    などとするとエラーになります。ポインタの指す対象は const (read only) でないため

    int num2 = 777;
    ptr1 = &num2;
    

    とすることは可能です。初期化も不要で

    const int *ptr1;
    int num = 123;
    ptr1 = #
    

    とできます。

    サンプルコード

    指す先の値を変更しないことを明示するパターン1は、関数の引数で用いることができます。

    sample.cpp

    #include <iostream>
    using namespace std;
    
    void sum(const int *a, const int *b, int *res) {
        *res = *a + *b;
    }
    
    int main() {
        int a=1, b=2, res;
        sum(&a,&b,&res);
        cout << res << endl;
        return 0;
    }
    

    出力例

    $ g++ sample.cpp && ./a.out
    3
    

    パターン2

    int num = 123;
    int * const ptr3 = &num;
    

    これは「ptr3 が指す対象は変更できず (const)、int 型変数 num のアドレスを初期値として持つ」という意味になります。そのため、先程とは逆に

    *ptr3 = 777;
    

    は可能で

    int num2 = 777;
    ptr3 = &num2;
    

    はエラーとなります。

    パターン3

    パターン1とパターン2を組合せて、

    const int * const ptr4 = &num;
    

    とすると、指す対象も指す先の値も固定され変更できません。

    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    C/C++やアルゴリズムに注目し、実践的な知識を発信しています!

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事