タグ

programmingとC++に関するtyosuke2011のブックマーク (74)

  • プログラム高速化の禁術 - Qiita

    はじめに これは昔(2010年頃)自分が使っていた高速化技法について書いたものです. 今となってはレガシーだったり,通用しないものもあるかもしれませんが,こういう知識も無くなってしまったり,自分も忘れてしまう気がしたので,メモ代わりに書いておきます. ただ言えることは,「最適化はするな」ということです.最適化すると,保守性が大幅に失われる危険性があります.そして,これから書く項目を1つ1つ行って,高速化できたとしても,せいぜい2倍程度です.ただその2倍程度の速度も欲しい!そのためには悪魔に魂と保守性を売る!という方はご覧ください.これらの高速化は割といろいろな言語に当てはまることも多いですが,大体C++で書くことを念頭に置いていただければ,幸いです.あと,個人的には競技プログラミングだったり,計算科学をやっていた時期に見つけた経験則なので間違ってる場合もあります. コンパイルオプションをこ

    プログラム高速化の禁術 - Qiita
  • Rust (プログラミング言語) - Wikipedia

    Rust(ラスト)は、性能、メモリ安全性、安全な並行性を目指して設計されたマルチパラダイムのプログラミング言語である。C言語、C++に代わるシステムプログラミング言語を目指しており[2]、構文的にはC++に似ているが[3]、「ボローチェッカー」(borrow checker) で参照の有効性を検証することによってメモリ安全性を保証できる。Rustはガベージコレクションなしでのメモリ安全性を達成しており、必要な場面で参照カウントを使うこともできる[4][5]。 Rustプロジェクトはオープンソースのコミュニティベース開発で進行しており[6]、言語仕様(検討段階含む)、ソースコード、ドキュメントはオープンソースライセンスで公開されている[7]。2006年の開発初期は、Mozillaの従業員のグレイドン・ホアレ(Graydon Hoare)[8]の個人プロジェクトだったが、2009年にMozil

    Rust (プログラミング言語) - Wikipedia
    tyosuke2011
    tyosuke2011 2023/07/04
    C++を理解してないのにRustに手を出すのはよくない
  • 闇夜のC++

    術者が高度に言語を理解している限りにおいては高度に最適化された術式を出力できる __アンサイクロペディア 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

  • Learn Contemporary C++ | Concise&Visual Examples

    Learn up-to-date, idiomatic C++ with code examples, concise explanations, cheat sheets and infographics. -- Lerne aktuelles, idiomatisches C++ mit Code-Beispielen, knappen Erklärungen und Infografiken. -- 学现代的C++ // 代码示例,简洁的说明和图表

    Learn Contemporary C++ | Concise&Visual Examples
  • C++ Cheat Sheets & Infographics

    Standard Algorithms

    C++ Cheat Sheets & Infographics
  • インライン関数

    関数のインライン展開 Cプログラマの多くは、1行程度で終了する簡易関数はマクロで実装したと思います C言語のマクロ関数は、短い関数で関数のオーバーヘッドを避ける手段の一つでした しかし、マクロ関数は仮引数の展開を正確に行うために括弧をつけます そこでC++で、マクロ関数のような処理を必要とする場合インライン関数が有効です (もちろん、Cに慣れ親しんでいるのならマクロでもかまわないが) インライン関数は、実際に呼び出すことはなく呼び出しごとにインラインで展開する関数です マクロとは異なり関数と同様の扱いで仮引数などを指定することが可能です これによって、関数の呼び出しや仮引数のオーバヘッドタイムを減少させることができます インライン関数の宣言は、関数の先頭に inline 指定子を指定します inline type function(); これで、短い関数の呼び出しにかかるオーバヘッドをなく

  • 非推奨だった bool 型に対するインクリメント演算子を削除 [P0002R1] - cpprefjp C++日本語リファレンス

    このページはC++17に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 C++17ではbool型に対する前置および後置のoperator ++を削除する。 bool型に対する前置および後置のoperator ++とはC++98の時点で非推奨になっていた機能である。 具体的にどのような働きをするのかというと、以下のように値をtrueに書き換える機能をもつ。 #include <iostream> int main() { bool b = false; const bool b1 = ++b; std::cout << std::boolalpha << b1 << std::endl; // => true const bool b2 = ++b; std::cout << std::boolalpha <<

  • ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 前編 - ひげぽん OSとか作っちゃうかMona-

    前置き 自分の C++ レベルに絶望したので「ロベールのC++入門講座」を読んで再入門していく過程を日記に書いていきます。 「おまえはそんなことも知らずにコードを書いていたのか!」「それは間違い!」など叱咤激励募集中です:-) 読んでみたら、たくさんの驚きがありました。 スルーせずに読んでもらえると1つくらい役に立つことを提供できるかもしれません。 例えば5章のデフォルト引数に関数を使える例とか。 ルール 前置きはともかくはじめましょう。13:48にスタバで始めました。 読んで行くうえでいくつかルールを決めます。 知らなかったことは正直に知らなかったと書き、自分が読んで分かる説明を書く。 知識が曖昧だった所も同様に明確な説明を書く。 悩んだ内容を書く。 理解が怪しい所は必ずコードを書く。 さあ1章から読んでみよう。 1章 まずは使い方(13:50) 各 OS 毎に C++ の開発ツールを紹

  • Rust開発者のためのC++入門書:所有権と借用について | POSTD

    今日、ソーシャルサイト「reddit」を見ていたら、“ Rustの基礎を学んでからC++を始める場合 、何を勉強すればいいか”と問う投稿があり、私は自分のブログを復活させ、その中で質問への答えを書いたら面白いのではと考えました。 私にはRustを学んだ後にC++を扱う仕事に就いた経験があるため、Rustの経験を持つ人がC++に移行していく様子をまとめてみたいと思ったのです。 稿はC++の構文と特徴を既に知っていて、RustからC++の世界に移行する方法に興味を持っている読者を対象とします。 しかし、私は全てに精通しているわけではないので、稿では所有権(ownership)、借用(borrowing)、ライフタイム(lifetime)に焦点を当てて説明していきます。 所有権と移動 Rustの一番大きな特徴は所有権です。所有権は、プリミティブ型ではない値に対するデフォルトの動作として、コピ

    Rust開発者のためのC++入門書:所有権と借用について | POSTD
  • オフライン版ダウンロード | Programming Place Plus

    申し訳ありません。お探しのページが見つかりません。 ページが削除されているか、将来作成される予定のページに対するリンクを選択されたかもしれません。 以下のリンクから、目的に近いページへ移動されるか、検索窓を使ってページをお探しください。 Programming Place Plus のトップページ C言語編のトップページ (旧)C++編のトップページ 新C++編のトップページ アルゴリズムとデータ構造編のトップページ 用語集のトップページ 参考書籍のトップページ

    オフライン版ダウンロード | Programming Place Plus
  • C++0x の右辺値参照がこんなに難しいわけがない。 - C++でゲームプログラミング

    C++0xのアレです。 これに関してはさんざん解説がされているとは思いますが、自分がイマイチ理解していなかったのでまとめてみました。 概念や細かい仕様なんかは書いてないのでありからず…。 あとテスト用のコンパイラは、gcc-4.5.0 です。 ☆参照渡し C++ では、型名に & を付けることでオブジェクトのアドレスを受け取り、値の参照を行うことが出来ます。 int n = 10; int& ref = n; // int* ref = &n; を行っているイメージ ref = 3; // ref は n を指しているので、代入すれば n も変わる ここで重要なのは、参照渡しは値のコピーを行わない事です。 まぁこれに関しては、ポインタ渡しと同じですね。 関数の引数を参照で受け取るのは、無駄なコピーを行わない為です。 void hoge(std::string& str){} std::st

    C++0x の右辺値参照がこんなに難しいわけがない。 - C++でゲームプログラミング
  • C++マニアック,ハンガリアン記法,ハンガリアンノーテーション,C++入門,C++言語講座

    ハンガリアン記法とは変数名などを命名するときに、先頭に変数型を示すプレフィックスを書くようにする記法です。考案者がハンガリー人だったのでハンガリアン記法とかハンガリアン・ノーテーションというようです。 C++ は、変数には変数型が厳格に決まっているので、ハンガリアン記法を使うことは、プログラムの見通しをよくするために大いに意味があります。ハンガリアン記法は、その命名法が厳格に決まっているわけではなく、プログラマ毎に記述の方法が異なるというのが現状です。ここでは、このサイトで私が使用している記法について解説します。一つの例としてご覧いただいて、気に入ったらそのまま使ってみてください。 また、システムハンガリアン記法の応用として、変数をプリントするコードの自動生成が可能なので、そのためのツールを公開します。使ってみてください。 また、ハンガリアン記法以外にも、プログラミング上好ましい書き方とい

  • その14 ドキドキしないプリコンパイル済みヘッダ

    ホーム < ゲームつくろー! < C++踏み込み編 その14 ドキドキしないプリコンパイル済みヘッダー ちょっとしたテストやサンプルの為に書き捨てるプログラムではなく、大規模なプログラムを作成するとコンパイル時間が馬鹿にならなくなってきます。商用ゲームだと、規模は様々ですが、コンシューマ機で販売するような規模のプログラムになるとフルビルドで数時間からヘタをすると1日近くかかる場合もあります。ゲームプログラマになって初めて超絶に大規模なコードに触れ、さらにそれをフルビルドした時には、それはそれは延々と続くビルドにただただ驚いたのを覚えています。 そこまで大規模とは言わないまでも、ある程度規模が大きくなるとビルド時間を短縮したくなってくるものです。そういう時、割とお手軽で効果的にビルド時間を短くしてくれる仕組みが「プリコンパイル済みヘッダー」です。 C++はコードをコンパイルしリンクすることで

  • ゲーム開発におけるメモリアロケーションの実装について - Qiita

    inline void* operator new( std::size_t size, TGL::Memory::AREA_TYPE newFlag,const char* pszFile,s32 nLine ) throw() { void* ptr = TGL::Memory::Allocater::Malloc( size ,newFlag,pszFile,nLine); #if 0 #ifdef _USE_EXCEPTION // 例外処理を許可しているときのみコンパイル if ( NULL == ptr ) { throw std::bad_alloc(); } #endif #endif return ptr; } inline void* operator new[]( std::size_t size, TGL::Memory::AREA_TYPE newFlag,con

    ゲーム開発におけるメモリアロケーションの実装について - Qiita
  • C++11スマートポインタで避けるべき過ち Top10 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) 私は新しいC++11のスマートポインタをとても気に入っています。自分でメモリを管理するのが嫌だと感じる多くの仲間たちにとって、これはいろいろな面で天の助けでした。私の場合、このおかげで新人にC++を教えるのがずっと楽になりました。 しかし、C++11のスマートポインタを幅広く使っていた2年ちょっとの間で、使い方を誤ると、プログラムの効率が落ちたりクラッシュして壊れたりするという事態に何度も遭遇しました。参照用に、以下に例を載せました。 まずはこれらの”過ち”を、簡単なAircraftクラスを例に取って見てみましょう。 class Aircraft { private: string m_model; public: int m_flyCount; weak_p

    C++11スマートポインタで避けるべき過ち Top10 | POSTD
  • C 言語にポインタがある理由は省メモリ化・高速化・開発作業の省力化です - 偏見プログラマの語り!

    前回の記事『プログラム初心者にC言語のポインタを不意ながら教える羽目になったなら、こう教えると良いよ』でポインタの教え方を書きました。ソレに対して「そもそもどうしてポインタっていう仕組みがあるの?」という質問をもらったので、つらつらと書こうと思います。稿は「ポインタがある理由の教え方」ではなく「ポインタがある理由」です。分かっている人には相当に退屈な文章ですのでそういう人は読まずにお帰りください。 で、えーと、結論だけ先に言うと省メモリ化のため、次に速度アップのため、そして生産性アップのためです。 1. メモリは有限である。 マシンに搭載されているメモリには限りがあります。メモリ空間は広大ですが、無限ではないのです。 好き放題にどんどんメモリを使ってデータを格納するわけにはいかないというわけです。しかしプログラムは計算のためにメモリ空間を占有します。仮に↓こんな感じに、わずかな有限メモ

    tyosuke2011
    tyosuke2011 2016/06/20
    ポインタに何を入れるかによる
  • Entangled Space

    説明 私の活動の内電子化されているもので、 人様の役にひょっとしたらたてそうなものを やみくもに陳列している場所です。 適当にくっつけていっているのでもう何が何やら。 更新情報 更新履歴兼雑記 (はてな) / 更新情報だけ / 古い更新履歴兼雑記 作ったもの 私の作っているものについて 弾避け系 弾除けゲーム「白い弾幕くん」 シンプルな弾避け練習ゲームです。 BulletML を弾幕記述言語として採用しているので、 そこそこ手軽に自分の避けたい弾幕を記述できます。 以下のシューティングはこの技術を利用しています。 psyno 妙に気合いの入ったジャンル不明ゲー。 Bullet Philharmonic Orchestra mp3 とかいろんなフォーマットの音楽ファイルに合わせて弾幕を 生成する弾避けです。 斑鳩シミュレーター「業平」 (ネイティブ版) 斑鳩シミュレーターです。 ABAさん

    tyosuke2011
    tyosuke2011 2016/06/17
    斑鳩っぽいのもあるな
  • Programming TIPs編

    ホーム < ゲームつくろー! < Programming TIPs編 Programming TIPs編 細かいところです(^-^) その1 GetGlyphOutline関数のフォント位置 その2 WinMain関数からメインウィンドウハンドルを手に入れるまでのおさらい その3 クラスのメンバ変数のオフセット値を取得してしまおう! その4 ここまでできる超極短Windows基盤プログラム その5 ここまでできる超極短DirectX基盤プログラム その6 HTML Help Workshopでヘルプファイルを作ろう! 2006. 9. 8 その7 メモリリークの検出方法 2006. 11. 18 その8 STLで日語ファイルが開けない時の対処法 2006. 12. 3 その9 d3d9types.hのwarning C4819「Unicodeに云々」の回避方法 2007. 3. 8 その

  • WisdomSoft

    初心者からのプログラミング入門、ソフトウェア開発の学習を支援する WisdomSoft のホームページです。

  • 植山 類

    仕事を説明するときに「Google仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している」というと、???という反応になることが多いので、こういう仕事をしているんだよということをちょっと説明してみます。...

    植山 類