タグ

constに関するyukimori_726のブックマーク (9)

  • C++ const 修飾子 入門

    const 修飾子とは 「const」は「constant」の省略形で、「定数」という意味だ。値が変化しないこと、つまり「変更不可」を意味する。 下記の様に変数宣言または関数宣言時に「const」を付加することで、付加された変数または関数が定数であることを宣言する。 const int var = 123; const char *ptr = 0; class Hoge { void func() const; }; const 修飾子を付加することで、変数・引数・関数などに変更不可という制限を課すことで、ソースコードの安全性を向上させることが出来る。 と言っても何のことかすぐにはすぐにはピンと来ないかもしれないが、稿を読み進めば理解できるようになるはずだ。 稿では、それぞれの種類について具体的に解説し、お約束の演習問題も用意している。 理解しづらい概念も、手を動かして演習問題を解いて

  • C++の基礎 : const 修飾子

    BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア / 携帯 Java アプリ圧縮ツール : 株式会社 ソフィア・クレイドル English FAQ C++の基礎 : const 修飾子 const 修飾子 C++ 言語には、定数を表現するための const 修飾子が用意されています。ここでは const 修飾子のさまざまな使い方について説明します。 const 修飾子を使う目的は、コンパイラによる最適化を促進するためと、プログラムの意味をより明確にすることです。 const 変数 変数の宣言に const をつけることで、その変数の値が書き換えられないようにできます。 const SIntN max_foods = 120; max_foods = 130; // コンパイル エラー const 引数 関数の引数に const を指定すると、その関数の中で

  • 関数の引数がT * const&とT const* const&では結果が変わるという話 - Qiita

    #include <iostream> template <typename T> void f(T const&) { std::cout << "f<T>()" << std::endl; } template <typename T> void f(T const* const&) { std::cout << "f<T*>()" << std::endl; } template <typename T> void g(T const&) { std::cout << "g<T>()" << std::endl; } template <typename T> void g(T * const&) { std::cout << "g<T*>()" << std::endl; } int main() { int a{0}; f(a); f(&a); g(a); g(&a); std:

    関数の引数がT * const&とT const* const&では結果が変わるという話 - Qiita
  • C/C++の思わぬ落とし穴(まーた、ハマっちまったぜ) - 檜山正幸のキマイラ飼育記 (はてなBlog)

    C/C++のとんだ落とし穴(ハマっちまったよ) 上記の記事で、Shift_JIS(CP932)のコメントにまつわるトラブルを紹介しました。あまり時をおかずして、C/C++でまたハマりました。コメント事件ほどの意外性はないにしろ、事情を知らないと対処しにくいトラブルなので顛末を記しておきます。 この記事の内容は、僕が実際に体験した状況そのものではありませんが、それらしい例題を仕立てたので、ストーリーを追いかけてみてください。 内容: 例題:時刻付きのメッセージキュー 実装を変えてみると なんで、こんなことに 誰が悪いのか 例題:時刻付きのメッセージキュー 例題として、次のような機能を持つクラスを考えます。 文字列メッセージを、時刻(タイムスタンプ)を添えてキューで管理する。 クラスのインターフェースを、次のようなヘッダーファイルに記述します。 // msgq.h #ifndef MSGQ_H

    C/C++の思わぬ落とし穴(まーた、ハマっちまったぜ) - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • C++のconstメンバ関数の挙動を直感的に理解する - Qiita

    C++のconstメンバ関数ってなんとなく「そのメンバ関数の呼び出しによってオブジェクトの内容を変更しないことを宣言する」程度に理解していて、オブジェクトの内容を変更しないというのが具体的にどういう操作なのかきちんと理解していませんでした。 そのため、例えばなぜこれがエラーで:

    C++のconstメンバ関数の挙動を直感的に理解する - Qiita
  • C++のshared_ptrを関数への引数として渡す場合はconst参照で | YOHEI's BLOG

    Channel9にて公開されているC++ and Beyond 2011の動画にて、Andrei Alexandrescu、Scott Meyers、Herb Sutterの三名が、C++ and Beyond 2011の参加者からの質問に回答している。 その中で4:34からの「On shared_ptr performance and correctness」が興味深い。 質問の主旨としては、shared_ptrを関数やメソッドへ渡す場合、const参照で渡すべきかどうかということらしい。つまり、 void func(std::shared_ptr<std::string> s) { ... } int main(int argc, char* argv[]) { std::shared_ptr<std::string> s = ...; func(s); } とするか、const参照に

  • メンバ関数につけるconst修飾子、&(&&)修飾子の考察 - Qiita

    メンバ関数にconst修飾って何ぞやとという質問を受けました。メンバ変数を変更できないよって印…なのは分かっているのだそう。ここで、もう少しC++と仲良くなるために、もう少し深く彼らと付き合ってみたいと思います。オマケで、&(&&)修飾子についても考えます。 メンバ関数に付ける修飾子は、static, virtual, inline/constexpr, const/volatile, &/&&, noexcept/throw, override/final があります。このうち、今回取り扱うconst/volatile, &/&&は似た特性のものであるため、一緒に扱いたいと思います。 これら修飾子が実際に修飾するのは、メンバ関数に暗黙的に渡される第0引数とも言うべき、thisポインタです。 このthisポインタさえ解決してしまえば、メンバ関数も通常の関数と同じように扱うことができます。

    メンバ関数につけるconst修飾子、&(&&)修飾子の考察 - Qiita
  • Pythonのコマンドライン引数処理の決定版 docopt (あとJuliaに移植したよ) - りんごがでている

    Pythonをよく使う人にはよく知ってる人も多いのですが、docoptという便利ライブラリがあります。 docoptはargparseやoptparseのようなコマンドライン引数をパースするライブラリなのですが、その発想がコロンブスの卵なのです。 例えばPython標準のargparseだと、argparseのAPIを組み合わせてパーサを組み立てるわけです。するとパーサと一緒にヘルプも作ってくれて、"program --help"などとすると自動生成されたヘルプを表示してくれるようになります。 しかし、そのAPIを覚えるのが大変で、毎回ドキュメントを読まないと忘れちゃうわけです。 import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument

    Pythonのコマンドライン引数処理の決定版 docopt (あとJuliaに移植したよ) - りんごがでている
  • const修飾子について

    ここでは、私、酒井理雄( TSUGU)がconst修飾子について解説したいと思います。 ご意見やご感想、また、ここおかしいんじゃない?というような所が あれば連絡していただけると作者が喜びます。 constの基 ポインタ変数に対するconst宣言 メンバ変数に対するconst宣言 (作成凍結) メンバ関数に対するconst宣言 TOP C言語においてconst修飾子では指定した変数が定数である(中身を変更 できない)ことを指定します。これによってプログラマの不注意による バグの混入を防ぐことが出来ます。 const修飾子を用いたもっとも簡単な例を次に示します。 const int i = 0; i = 1; //const指定した変数(定数)に値を代入しようとしたため、コンパイルエラー この例のように定数にしたい(値を変更したくない)変数の型名の前に const修飾子を付

  • 1