はじめに
C++で関数を書くとき、引数にconstをつけたりつけなかったりしますよね。
どういうときにつけて、どういうときにつけないの?という基準は人によって違うと思います。
この記事では、私なりの考え方を紹介します。
2025-06-23
C++で関数を書くとき、引数にconstをつけたりつけなかったりしますよね。
どういうときにつけて、どういうときにつけないの?という基準は人によって違うと思います。
この記事では、私なりの考え方を紹介します。
結論を述べると、「引数の値を変更したくないとき」にconstをつけるべきです。
次のコードを見てください。
これは、モデル・テクスチャー・位置・回転・スケールの情報を元にオブジェクトを生成する関数です。
void EditorViewport::AddFBXModelObject(const FilePath& modelPath, const FilePath& texturePath, const Vec3& pos, const Quaternion& q, const Vec3& scale)
{
auto newObject = GameObjectFactory::CreateFBXModelObject(modelPath, pos, texturePath);
newObject->SetName(FileSystem::BaseName(modelPath));
newObject->SetRotation(q);
newObject->SetScale(scale);
fbxModelObjects << newObject;
gameObjectManager->AddEditorObject(newObject);
}
引数には全て「const」をつけています。
これは、絶対に関数内で値を変更してほしくないからです。
関数の役割を考えてみましょう。
この関数は「モデル・テクスチャー・位置・回転・スケールの情報を受け取ってセットする」役割です。
このとき、モデルのパスや位置の値を変えてほしくはないです。
参照で渡されているので、関数内で誤って値を変更してしまうと、呼び出し元の変数にも影響が出てしまいます。
逆にいうと、関数内で引数の値を使って処理を変えたり、書き換える場合はconstをつけない方が自然です。
「この引数は関数内でどう使うんだろうか?」を考えるとconstをつけるべきかどうか分かると思います!
「constをつけなくても動作するから別につけなくても良くない?」と思う人もいるかもしれません。
確かに、constをつけなくても動きます。
しかし、constをつけておくと、別の人が見たときに「この値は変更しないんだな」「読み取り専用なんだな」とぱっと見て分かります。
でもなんかconstつけるの怖くないですか?
私にはその気持ち、わかります。
私は元々UnityでC#を使っていました。
C++でゲームを作り始めて、constがいろんな所にでてきてびっくりしています。
いろんなパターンがあってどれが正解なんだよ!と思いますよね。
でもそれに負けず、間違っていても良いからconstをつけてみましょう。
おかしかったらエラーが出ます。
だいじょうぶ!!
この記事では、引数にconstをつけるときの私なりの基準を紹介しました。
同じようなconst初心者の参考になれば幸いです。