C++
 Computer >> コンピューター >  >> プログラミング >> C++

C/C++における int と const int& の違いをわかりやすく解説

C/C++における int と const int& の違いとは?

この記事では、C言語およびC++における intconst int& の違いについて、具体例を交えながら詳しく解説します。

int 型の基本

int は、整数型データを表す最も基本的なデータ型です。宣言された変数には整数値を格納でき、プログラム内で自由に読み書きすることができます。

int x = 10;
x = 20; // 問題なく変更可能

const int&(定数参照)とは

const は、対象を定数として扱うための修飾子です。const int& は「定数整数への参照」を意味し、int const& と完全に同じ意味になります。つまり、この参照を通じて元の整数値を変更することはできません。

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    const int& ref = x;

    // ref = 20; // エラー:const 参照を通じた変更は不可
    x = 20;     // 元の変数を直接変更することは可能

    cout << ref << endl; // 出力:20
    return 0;
}

参照自体に const を付けるのは冗長

一方、int& const のように「参照そのもの」に対して const を付けるとどうなるでしょうか。C++において、参照は一度初期化すると別のオブジェクトを指し替えることができない仕様になっています。つまり、参照値自体はもともと不変であるため、ここに const を付けても意味がなく、冗長になります。多くのコンパイラでは、このような記述に対して警告やエラーが発生する可能性があります。

まとめ

  • int:整数値を格納する基本データ型。自由に読み書きできる。
  • const int& / int const&:定数への参照。参照先の値を変更できない。
  • int& const:参照自体は既に不変のため、const は冗長。コンパイラから警告される場合がある。

特にC++では、関数の引数として大きなオブジェクトを受け渡す際に const int& のような定数参照がよく使われます。不要なコピーを避けつつ、誤って値を変更してしまうバグも防げるため、実務上とても重要な概念です。

  1. 【C/C++】const int*、const int* const、int const* の違いをわかりやすく解説

    C言語やC++では、ポインタとconst修飾子の組み合わせ方によって、複数の異なる変数宣言が存在します。「const int*」「const int* const」「int const*」など、一見よく似たこれらの宣言の違いを正確に理解することは、安全でバグの少ないコードを書くうえで非常に重要です。本記事では、これら3つの宣言の違いを、複雑な宣言を読み解く際に役立つ「時計回り/らせんルール(Clockwise/Spiral Rule)」にも触れながら、コード例とともに分かりやすく解説します。時計回り/らせんルールとは宣言の中心にある識別子から出発し、時計回りに記号をなぞっていくことで、cons

  2. C#のintとInt32の違いとは?エイリアスの仕組みと使い分けを解説

    C#では、32ビット整数を扱う方法として「int」と「Int32」の2つの記述があります。一見すると別々の型のように見えますが、実は本質的な違いはほとんどありません。intとInt32の基本的な関係Int32は.NETフレームワークが提供する構造体(System.Int32)であり、intはC#言語においてInt32に付けられたエイリアス(別名)です。Int32 x = 5;int x = 5;上記の2つの宣言は、どちらも同じ32ビット整数を保持します。コンパイルされた結果は完全に同一のコードになるため、実行時のパフォーマンスや動作に一切の違いはありません。唯一の小さな違いわずかな違いとして、