C++のconstについての質問です。
値を変更しないというのがconstの役割のようですが、値を変更しないと分かっているものは全てconstを書くようにしていますか?
例えば以下のサイトではconstが省略されています。
http://www.alpha-net.ne.jp/users2/junchoon/tips0 …
このhwndはconstが省略されています。
static void on_create(HWND hwnd){
WM_TASKBARCREATED = RegisterWindowMessage("TaskbarCreated");
icon_add(hwnd);}
です。
これが特別というわけでもなく、どちらかというとconstが書かれていないことが多いようです。
あなたがconstを使う理由を教えてください。
No.3
- 回答日時:
# カテゴリ違い (JavaのカテゴリなのにC++の質問) なので、削除されるかもしれませんが......。
> 値を変更しないと分かっているものは
というより、「変更されては不都合なもの」、「変更があり得ないもの」をconstにすべきだと思います。
ご質問の例では、hwndは現在変更の必要がないから変更していないだけのように見えます。
そもそもhwndは動的に管理されているものですし、hwndを取得するAPIは (FindWindows を初めとして) 山ほどありますし......。
fighting40さん> 昔のC言語など、constがない言語では定数として扱っている変数に誤って代入してしまう
の場合は、マクロ定義 (#define) を使えばよいと思います。
固定リテラルに置換されるので、constと同機能とは言えませんが、値を書き換えさせない目的は果たせます。
ただし、かの高名なKernighan氏も現在は、「マクロよりconst、enumeを使うべき」と主張されているようです。(当然でしょうが)
# C言語は"Hello world!"程度の知識しかないので、あまり参考にならないと思いますが......。
No.2
- 回答日時:
>static void on_create(HWND hwnd){
>WM_TASKBARCREATED = RegisterWindowMessage("TaskbarCreated");
>icon_add(hwnd);}
ここの例の場合、誰が”どこの”値を変更できないようにする必要があるかでは?
今回の場合、HWNDは値をそのまま渡しているので、呼び出し元のHWNDの値は関数側からは変更不可能ですよね。
わかりやすい例ですと、lstrcpyかと。
宣言見ると、
lstrcpy(LPTSTR , LPCTSTR)
ですが、こうなっていると、第2引数が指す文字列はAPI内で変更することはできませんよね。
また、MFCのCStringでは、LPCTSTRのキャスト演算子は定義されていても、LPTSTRのキャスト演算子は定義されていません。
これは、取得したポインタが指す内容を、呼び出しプログラム側から変更されては困るからです。
No.1ベストアンサー
- 回答日時:
私は積極的にconstを使っています。
constはプログラミングする際に誤りを減らすためのものです。
昔のC言語など、constがない言語では定数として扱っている変数に誤って代入してしまうことがありますが、constを使うことによってそういったバグは、コンパイル段階で発見できます。
また関数そのものをconstにすることによって、メンバー変数の内容を変更しないということを保障できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# Cの関数の引数のconst *charについて 5 2023/04/25 13:05
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
ダブルクォーテーションを含む...
-
javaというか文字列について少...
-
hiddenの値を消したくない!
-
wsprintf関数の使い方について
-
matchesを否定文として使う方法...
-
JSPでの計算結果表示
-
Javascriptでマシン固有の情報...
-
VB6,論理演算子Orの使い方がわ...
-
C言語の変数(LSB)の合わせ込...
-
直し方について教えて頂きたい...
-
Evaluate()に文字列の形式の数...
-
実行シェルからCOBOLへパラメー...
-
テキストボックスの数値チェック
-
(Javaで)第1コマンドライン...
-
String型の値が大文字か小文字...
-
初回のスピンボタンの挙動
-
文字列で読み込んだ計算式で値...
-
excel vba 時間計算と条件分岐...
-
javaのCSVデータ読込についてです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Stringクラスの変数の格納アド...
-
結合した文字列をファイル名に...
-
BCD形式で時刻を!
-
DateTimePickerに値を入れたい...
-
Evaluate()に文字列の形式の数...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
DOSバッチで変数の値を変数名に...
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
Javaの問題なのですが、「3文字...
-
matchesを否定文として使う方法...
-
8桁整数を限りなく短い文字列に...
-
JSPでの計算結果表示
-
指定した日付が何日前なのかを...
おすすめ情報