はてなブックマークアプリ

サクサク読めて、
アプリ限定の機能も多数!

アプリで開く

はてなブックマーク

  • はてなブックマークって?
  • アプリ・拡張の紹介
  • ユーザー登録
  • ログイン
  • Hatena

はてなブックマーク

トップへ戻る

  • 総合
    • 人気
    • 新着
    • IT
    • 最新ガジェット
    • 自然科学
    • 経済・金融
    • おもしろ
    • マンガ
    • ゲーム
    • はてなブログ(総合)
  • 一般
    • 人気
    • 新着
    • 社会ニュース
    • 地域
    • 国際
    • 天気
    • グルメ
    • 映画・音楽
    • スポーツ
    • はてな匿名ダイアリー
    • はてなブログ(一般)
  • 世の中
    • 人気
    • 新着
    • 新型コロナウイルス
    • 働き方
    • 生き方
    • 地域
    • 医療・ヘルス
    • 教育
    • はてな匿名ダイアリー
    • はてなブログ(世の中)
  • 政治と経済
    • 人気
    • 新着
    • 政治
    • 経済・金融
    • 企業
    • 仕事・就職
    • マーケット
    • 国際
    • はてなブログ(政治と経済)
  • 暮らし
    • 人気
    • 新着
    • カルチャー・ライフスタイル
    • ファッション
    • 運動・エクササイズ
    • 結婚・子育て
    • 住まい
    • グルメ
    • 相続
    • はてなブログ(暮らし)
    • 掃除・整理整頓
    • 雑貨
    • 買ってよかったもの
    • 旅行
    • アウトドア
    • 趣味
  • 学び
    • 人気
    • 新着
    • 人文科学
    • 社会科学
    • 自然科学
    • 語学
    • ビジネス・経営学
    • デザイン
    • 法律
    • 本・書評
    • 将棋・囲碁
    • はてなブログ(学び)
  • テクノロジー
    • 人気
    • 新着
    • IT
    • セキュリティ技術
    • はてなブログ(テクノロジー)
    • AI・機械学習
    • プログラミング
    • エンジニア
  • おもしろ
    • 人気
    • 新着
    • まとめ
    • ネタ
    • おもしろ
    • これはすごい
    • かわいい
    • 雑学
    • 癒やし
    • はてなブログ(おもしろ)
  • エンタメ
    • 人気
    • 新着
    • スポーツ
    • 映画
    • 音楽
    • アイドル
    • 芸能
    • お笑い
    • サッカー
    • 話題の動画
    • はてなブログ(エンタメ)
  • アニメとゲーム
    • 人気
    • 新着
    • マンガ
    • Webマンガ
    • ゲーム
    • 任天堂
    • PlayStation
    • アニメ
    • バーチャルYouTuber
    • オタクカルチャー
    • はてなブログ(アニメとゲーム)
    • はてなブログ(ゲーム)
  • おすすめ

    WWDC25

『闇夜のC++』

  • 人気
  • 新着
  • すべて
  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    7 users

    cpp.aquariuscode.com

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

    • テクノロジー
    • 2022/01/31 19:17
    • C++
    • あとで読む
    • インクルードガード | 闇夜のC++

      4 users

      cpp.aquariuscode.com

      c++の#include ディレクティブは、プリプロセスで解釈され、書かれたファイル名の内容を単にその場所に展開したものとして処理されます。

      • テクノロジー
      • 2016/07/26 19:09
      • c++
      • do-while(0)によるマクロラッピング | 闇夜のC++

        3 users

        cpp.aquariuscode.com

        inline関数やconst変数を使ってもC言語時代に#defineマクロによって実現していたことの全てをカバーできるわけではありません。 今でもCPP(C Pre Processor)の力は偉大です。 特に、ビルドレベルに応じて違う挙動になるような処理を実現するには#defineによるマクロは有効な選択です。 以下のような要件を満たすマクロを考えてみましょう 開発中のみ有効 ある条件を与えて結果が偽ならログ出力 #ifdef _DEBUG #define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0) #else #define DEBUG_LOG(exp, ...) do {(void)(exp);} while(0) #endif以下のように使います。 int main() { int

        • テクノロジー
        • 2015/08/23 03:07
        • privateメンバへ合法的にアクセス | 闇夜のC++

          6 users

          cpp.aquariuscode.com

          プライベートは大切にしたいほうです。 このアーティクルを書いている今、個人的な話ですが仕事がデスマーチでプライベートなんてありません。 普段なら、この時期はプライベートジェットでサイパンに飛んで、プライベートビーチに寝転がってiPadでプライベートライアンを見ているはずです。 自分のプライベートが守られない今、他人のクラスのプライベートも守りません。積極的に攻めていくスタイルです。 // 従業員 class Employer { float time_for_game_; // ゲームの時間 float time_for_anime_; // アニメの時間 float time_for_family_; // 家族との時間 public: float time_for_work_; // 仕事の時間 };雇われサラリーマンにも生活があります。 仕事の時間の他に自分の時間も必要なのです。そし

          • テクノロジー
          • 2015/07/11 02:26
          • C++
          • プログラミング
          • 非public継承の使いどころ | 闇夜のC++

            5 users

            cpp.aquariuscode.com

            継承には3つのレベルがあります。 public protected private オブジェクト指向的な考え方ではpublic継承はよくis-a関係を表すなどと言われたりしますね。 どら焼き is a 和菓子。 ベジータ is a サイヤ人。 B is a A(びーいずあえー)という関係なのでis-a関係です。 一方、private継承、protected継承はis-a関係ではありません。 is-a関係との対比でhas-a関係、またはis-implemented-in-terms-of関係なんて呼ばれたりします。 public継承以外はB is a Aの関係では無いため、AのポインタにBを代入することはできません。 class A {}; class B : A {}; int main() { A* = new B; // エラー!cannot cast 'B' to its priva

            • テクノロジー
            • 2015/06/12 20:46
            • ブレークポイントコード | 闇夜のC++

              4 users

              cpp.aquariuscode.com

              __asm int 3;これを見てピンと来た人は何人いるだろうか。 ああ、x86系CPU環境でブレークポイントと同じ効果をもたらすアセンブラコードだなーと思った人。正解ですが本質的ではありません。 ああ、闇夜のc++とか言いながらついにネタ切れでc++の話以外を書き始めたなーと思った人。正解だし本質的です。 xcodeやVisual Studioで以下のコードを実行してみましょう。 #include <cstdio> int main() { std::printf("abc"); __asm int 3; std::printf("def"); return 0; }int 3というアセンブラ命令はデバッガへのトラップ用の割り込みを発生させるので、5行目で勝手にデバッガがブレークします。 そこからステップトレースも、再実行も可能です。 マクロを作っておくと何かと便利です。 // 条件が成

              • テクノロジー
              • 2015/06/01 08:19
              • C++
              • tips
              • Argument Dependent Lookup | 闇夜のC++

                6 users

                cpp.aquariuscode.com

                C++言語の持つオシャレな機構の一つにADL(Argument Dependent Lookup)というものがあります。 和訳すると「実引数依存の名前検索」となり、読んで字の如く、「実引数」に依存した「名前検索」となります。なるほどわからん。 ADLの挙動 コードを見ながら順を追って理解してみましょう。

                • テクノロジー
                • 2015/04/22 00:56
                • C++
                • C++11
                • 闇夜のC++

                  15 users

                  cpp.aquariuscode.com

                  術者が高度に言語を理解している限りにおいては高度に最適化された術式を出力できる __アンサイクロペディア C++概要より [showwhatsnew] C++Language テンプレートの特殊化 共変型の戻り値とオーバーライドルールの緩和 非public継承の使いどころ virtualの伝播 禁忌の識別子 Plain Old Data Argument Dependent Lookup 最も速い数値型 ポータビリティの高い数値型 クラスの不定なメモリレイアウト newの実装 deleteの呼び出しと実装 真に安全なsafe_delete C++ Coding Technique privateメンバへ合法的にアクセス Pimplイディオム アクセス指定子の無効化 do-while(0)によるマクロラッピング インクルードガード レガシー環境でnullptr 配列の要素数の取得方法 ADL

                  • テクノロジー
                  • 2015/04/18 19:37
                  • C++
                  • プログラミング
                  • programming
                  • ポータビリティの高い数値型 | 闇夜のC++

                    4 users

                    cpp.aquariuscode.com

                    符号付か否か、あとは型の持つbit数などを踏まえたエイリアスを用意することでタイピング数の削減と統一的な名前規則でコードを分かりやすくしようという意図が感じられます。 一定規模以上のプロジェクトになると、ほぼ必ず上記のような型の再定義ファイルがあるように感じます。既視感のある人も多いのではないでしょうか。 ただ、上記の例は非常にポータビリティに欠ける為、行うべきではありません。 ユーザーが「intの別名はs32」と定義したところで、実際にs32のサイズが32bitになる保証はどこにもありません。 サイズが保証された数値型を標準が用意してくれているので、そちらを使うようにしましょう。

                    • テクノロジー
                    • 2015/04/18 12:25
                    • C++
                    • Return Value Optimization | 闇夜のC++

                      3 users

                      cpp.aquariuscode.com

                      オブジェクトの生成と破棄には莫大なコストがかかることがあります。 CPUによるメモリ割り当て、コンストラクタ・デストラクタの挙動等、オブジェクトが一つ生成され、破棄されるまでのコストは無視できません。あなたの目の届かないところで提供されたサードパーティ製のライブラリのクラスでは、コンストラクタ内で自分のメンバからCRC値を生成して勝手にツイートする実装になっているかもしれません。 コンパイラも、そんな我々の気持ちを汲んで、なるべく一時オブジェクトの生成を抑制=最適化しようとしてくれます。 そんな最適化の一つが今回説明するRVO(Return Value Optimization)です。 関数の戻り値を値で返す時に発生する一時オブジェクトをコンパイラは可能な限り消し去ります。 #include <cstdio> class Hoge { public: Hoge() { std::print

                      • テクノロジー
                      • 2015/04/17 18:39
                      • 前置インクリメント vs 後置インクリメント | 闇夜のC++

                        294 users

                        cpp.aquariuscode.com

                        後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

                        • テクノロジー
                        • 2015/04/13 18:48
                        • c++
                        • programming
                        • プログラミング
                        • CPU
                        • performance
                        • アルゴリズム
                        • プログラマ
                        • 思考
                        • あとで読む
                        • メソッド内でのthis最適化 | 闇夜のC++

                          12 users

                          cpp.aquariuscode.com

                          順調に動いていたはずのプログラムが突然ダンプを吐いてクラッシュする・・・。 まさに悲劇としか言えません。 ある調査機関によると成人男性の約89%がこの不幸に出会っているという報告もあります。[要出典] 最も多く、そして最も簡単に発生する原因としてnullポインタアクセスが挙げられます。以下のコードを見てみましょう。 // アクセルしか無い車。 ※リコールの対象になる恐れがある class Car { public: void accel() { speed_ += 1; // ガンガン加速する } private: int speed_; }; int main() { Car* car = nullptr; car->accel(); // nullptrに対してメソッドを呼ぶ。当然事故る return 0; }

                          • テクノロジー
                          • 2015/04/13 08:58
                          • c++

                          このページはまだ
                          ブックマークされていません

                          このページを最初にブックマークしてみませんか?

                          『闇夜のC++』の新着エントリーを見る

                          キーボードショートカット一覧

                          j次のブックマーク

                          k前のブックマーク

                          lあとで読む

                          eコメント一覧を開く

                          oページを開く

                          はてなブックマーク

                          • 総合
                          • 一般
                          • 世の中
                          • 政治と経済
                          • 暮らし
                          • 学び
                          • テクノロジー
                          • エンタメ
                          • アニメとゲーム
                          • おもしろ
                          • アプリ・拡張機能
                          • 開発ブログ
                          • ヘルプ
                          • お問い合わせ
                          • ガイドライン
                          • 利用規約
                          • プライバシーポリシー
                          • 利用者情報の外部送信について
                          • ガイドライン
                          • 利用規約
                          • プライバシーポリシー
                          • 利用者情報の外部送信について

                          公式Twitter

                          • 公式アカウント
                          • ホットエントリー

                          はてなのサービス

                          • はてなブログ
                          • はてなブログPro
                          • 人力検索はてな
                          • はてなブログ タグ
                          • はてなニュース
                          • ソレドコ
                          • App Storeからダウンロード
                          • Google Playで手に入れよう
                          Copyright © 2005-2025 Hatena. All Rights Reserved.
                          設定を変更しましたx