constを付けるべきか

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

constを付けるべきか

#1

投稿記事 by dom » 11年前

 私はクラスのメンバ関数に対して、constを付けられるなら付けるというコーディングをしていました。
つまり、メンバを変更しないものには必ずconstを付けていました。
 以下のようなクラスの場合、メンバ変数は変更しないものの、その後のクラスの挙動は変わっていしまいます。
constは付けるべきでしょうか?

コード:

#include "HogeLib.h"

class Hoge
{
public:
    void setColor(...)  // <-- constを付けるべきか?
    {
      HogeLib::SetColor(...);  // ライブラリの状態を変更する
    }    

    void draw() 
    {
         ...
         HogeLib::Draw(); // setColorの色で描画
         ...
    }
};

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

Re: constを付けるべきか

#2

投稿記事 by GRAM » 11年前

場合にもよるとおもいますが、そもそも論で
そこが気になるのであればラッパを一回かませればいいんじゃないかと思います。

コード:

#include <iostream>

class HogeLibWrapper
{
public:
	void SetColor(...)
	{
		HogeLib::SetColor(...);
	}

	void Draw() const
	{
		HogeLib::Draw();
	}
};

class Hoge
{
private:
	HogeLibWrapper hogeLib_;
public:
    void setColor()
    {
		hogeLib_.SetColor(...);
    }    
 
    void draw() const
    {
         hogeLib_.Draw();
    }

};
setColorがconst修飾されていれば、コンパイルエラーになります。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: constを付けるべきか

#3

投稿記事 by beatle » 11年前

DXライブラリのように、内部状態を持つライブラリは場合によって使い難いですよね。
GRAMさんも「場合による」と仰るように、constの意味が曖昧なのが問題なんですね。
「意味的な不変性」と「ビットレベルでの不変性」ですね。

個人的に普段は、constが付いたメンバ関数は外から見た挙動を変えないことを期待するので、「意味的な不変性」支持派ですかね。

dom

Re: constを付けるべきか

#4

投稿記事 by dom » 11年前

返信ありがとうございます。
「意味的な不変性」と「ビットレベルでの不変性」ですか、参考になりました!

閉鎖

“C言語何でも質問掲示板” へ戻る