タグ

C++と変数に関するyowanoのブックマーク (4)

  • const教信者が頭の可愛そうな人たちと言われないために - 名古屋313の日記

    C++ | 12:21ローカル変数に対するconst - melpon日記 - C++すら(ryにて、厳しいご指摘をいただいたので、ここでconstを付ける意義をしっかりとまとめておきたいと思います。ただ妄信的にconstを付ける頭の可愛そうな人と思われないためには、constを付ける意義を的確に説明できとかないとというわけです。実際周りにもconst教???って人が多いので。ここではconst教の真髄であると思われる、ローカル変数、値渡しの引数、戻り値に対してconstを付けることについて触れることにします。#define代わりのconst、const参照渡し、constメンバ関数等は、const教でなくても誰もがやってくれていることだと信じているので触れません。constの意義まず、constを付ける意義としては、以下のものが挙げられるでしょう変数にある値を束縛したことの表明禁止したい

    yowano
    yowano 2014/03/05
    ローカル変数、値渡し引数へのconst付けは、無変更性の意味を付加するために必要。戻り値へのconst付けは、ムーブセマンティクスを阻害するため、演算子のオーバーロード等以外では付けない方が良い。
  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

    yowano
    yowano 2013/11/29
    volatileは、最適化を抑制する修飾子で、主に組み込み系ソフトウェアやマルチスレッドのアプリケーションで使われる。コンパイラの最適化によって、プログラムの挙動が意図したものから外れることを防ぐ。
  • 未初期化な領域とアラインメント - Cry's Blog

    http://d.hatena.ne.jp/Cryolite/20051021#p1 の問題に対する解答. まず大前提として,未初期化な領域に配置構文 new を用いてオブジェクトを構築する手法は潜在的な危険が多く,当にそれが必要な場合以外は用いないという方針が基であることを確認しておいてください. まず最初に自動変数として(スタック上に)確保した char の配列に任意のオブジェクトを構築する場合についてです. class MyClass { ..... }; int main() { char buf[sizeof(MyClass)]; MyClass *p = static_cast<MyClass *>(static_cast<void *>(buf)); ::new (p) MyClass(); ..... // #1 p->~MyClass(); }上のコードはアラインメン

    未初期化な領域とアラインメント - Cry's Blog
    yowano
    yowano 2013/11/15
    『char の配列を確保する new が返すアドレスは,その配列のサイズ以下のあらゆる型のオブジェクトが安全に構築できるアドレスであることが規格上要求されている』など、知りづらい有益な情報アリ。
  • 【C++】配列の大きさとして複数ファイルで使うグローバル変数を指定する方法 - 下記のように一つのソースで定数を宣言、ヘッダ... - Yahoo!知恵袋

    C++】配列の大きさとして複数ファイルで使うグローバル変数を指定する方法 下記のように一つのソースで定数を宣言、ヘッダでextern宣言、そのヘッダを複数ファイルでincludeして定数を配列の大きさとして指定したいのですが、エラーとなってしまいます。 このような事はどのようにして実現すればよいのでしょうか? ご存じの方いらっしゃいましたらご教示頂ければさいわいです。 どうぞよろしくお願い致します。 ====================================== //*** value.c ***/ const int val = 1; //*** value.h ***/ extern const int val; //*** a.c ***/ #include value.h int A[val ];//←エラー(式には定数値が必要です) //*** b.c ***/

    【C++】配列の大きさとして複数ファイルで使うグローバル変数を指定する方法 - 下記のように一つのソースで定数を宣言、ヘッダ... - Yahoo!知恵袋
    yowano
    yowano 2013/10/31
    “const int”だと、コンパイラは定数扱いする。変数の実体は作成されない。‘const’を付けると自動的に‘static’宣言もされたことになり、ファイルを超えるグローバル変数は扱いはされない。
  • 1