タグ

C++に関するS0R5のブックマーク (12)

  • 2023年のコンパイル時レイトレーシング - in neuro

    これは qiita.com の12/16の記事です。やばいもう16日が終わってしまう! はじめに 太古の昔、あるC++プログラマ*1がtemplateの再帰と特殊化を使ってコンパイル時に計算ができることを「発見」*2*3したその日から、C++とコンパイル時計算は分かちがたく結びついています。 言語機能を来意図されていなかった方法で活用する曲芸的な技巧だったコンパイル時計算は、その強力さを買われコミュニティを席巻し、C++11での constexpr の導入によりある意味で公式に認められたものとなりました。 導入当初は return 文一つだけしか持てなかった constexpr 関数は、それでも三項演算子による条件分岐や再帰によってコンパイル時計算を大いに盛り上げました。 そしてC++14で条件分岐、ループ、変数の書き換えが、C++17ではラムダが、C++20では仮想関数と動的メモリ確保

    2023年のコンパイル時レイトレーシング - in neuro
    S0R5
    S0R5 2023/12/17
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • 江添亮のC++入門

    書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶためのである。書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。書はいわばC++における知識のブートストラップを目指しただ。これにより読者はを先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し

  • ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?

    回答 (11件中の1件目) gotoは悪なので論外として、 * ループ 命令型プログラミング * 再帰 関数型プログラミング の区分についてです。 岡部 健 (Ken Okabe)さんの関数型プログラミングでKISSへの投稿 から抜粋、再掲します。 フローとは、Control flow( 制御構造)のことで、 あらゆるフローは、 構造化プログラム定理(structured program theorem)によって たった3つの要素によって実現可能 です。 > 構造化定理(Structure theorem)、構造化プログラム定理(structured program t...

    ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?
  • C++でうっかり無限ループを書くと鼻から悪魔が出てくる - Qiita

    C++で副作用のない無限ループを書くと未定義動作になります。 「未定義動作」というのは口に出すだけでC++プログラマーを震え上がらせる力を持った言葉です。「鼻から悪魔が出てくる」という言葉で説明されるように、未定義動作を含むコードを実行した結果は何も保証することができず、バグの発見やデバッグすら困難にさせます。未定義動作下においてはコンパイラの気分によってコード片が消え、trueとfalseが同時に成立し、タイムトラベルを引き起こします1。 そのためC++ではうっかり未定義動作が埋め込まれないよう注意が払われるのが普通です。 さて、以下のC++のコードは未定義動作を引き起こします。 下の例は実際にclang/LLVMで最適化を有効にしてコンパイルするとでたらめな値を返す関数ができました。 この話をしたところ、何人かに驚かれたり異論を受け取ったりしたので、この話題について少しまとめてみました

    C++でうっかり無限ループを書くと鼻から悪魔が出てくる - Qiita
    S0R5
    S0R5 2019/01/25
  • C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? C++ Advent Calendar 2018 この記事はC++ Advent Calendar 2018 15日目の記事です。 14日目: VTKライブラリ 16日目: C++のエラー処理との付き合い方 当初見積もりよりも大幅に長い記事となり、投稿したのは12/22で1週間遅刻です。すみません。 お知らせ cpprefjpにchar8_t型追加について解説を書きました。ぎゅぎゅっとコンパクトに、また査読を受けて中立的な表現で書いていますので、よければどうぞ。 UTF-8エンコーディングされた文字の型としてchar8_tを追加 - c

    C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita
  • C++でアスタリスクをつけすぎると端末が落ちる - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    C++でアスタリスクをつけすぎると端末が落ちる - Qiita
  • 歌舞伎座.tech #8 「C++初心者会」を開催した

    歌舞伎座.tech#8「C++初心者会」 - connpass 5月17日に、歌舞伎座.thch #8 「C++初心者会」を開催した。 今回は、勉強会の初心者が発表できる場を設けようという意図から、発表枠には、初心者枠とガチ枠を設けた。これにより初心者が積極的に発表しやすくなるはずだ。さて、問題は参加者と発表者が集まるかどうかだ。いざフタを開けてみると閑古鳥が鳴いているようでは極めて痛い。 さて、connpassで告知と募集を開始すると、参加枠が即座に埋まっていく。どうやら勉強会の需要はあるようでまずは一安心だ。発表枠も埋まり始めたが、その参加者を見ると、どうも、技術的、勉強会的にみて、初心者とは思われない。 さて、公開直後の参加申し込みの波がひけてみると、参加枠と初心者枠は埋まっているものの、ガチ枠が埋まらない。どうやら、みなチョットデキル的な謙遜精神を発揮してしまったようだ。仕方がない

  • メンバー関数へのポインターを返すメンバー関数へのポインターを返すメンバー関数

    class Foo;が存在したとして(1)Fooのメンバ関数ポインタ(2)を戻すメンバ関数のポインタが欲しいと思った(なお(1)で戻すメンバ関数もFooのメンバ関数ポインタを戻す)のだが、どうあがいても記述出来ないものだったりするのだろうか? ようするに、以下のようなことがしたいわけだ。 class Foo { public : // メンバー関数a void a() { } // メンバー関数aへのポインターを返すメンバー関数b ??? b() { return &Foo::a ; } // メンバー関数aへのポインターを返すメンバー関数bへのポインターを返すメンバー関数c ??? c() { return &Foo::b ; } } ここで、???の部分に戻り値の型を記述しなければならない。 もちろんこれは記述できる。ただしその記述は、C++の規格のバージョンにより難易度が異なる。 C

    S0R5
    S0R5 2015/03/25
  • コンパイル時Brainfuckコンパイラ ――C++14 constexpr の進歩と限界―― - ボレロ村上 - ENiyGmaA Code

    中3女子です。 この記事は C++ Advent Claneder2014 23日の参加記事です。 constexpr とは この記事を読んでいる層には、いまさら言及するまでもないと思われるので省略する。 必要であれば このあたり の資料を参照のこと。 C++14 シンタックス上の進歩とセマンティクス上の進歩 巷では C++14 になり constexpr が簡単になったという話をしばしば耳にする。たしかに簡単になった。 では何が簡単になったかというと、もっともわかりやすいのは複文とローカル変数、制御構文の制限緩和だろう。 条件分岐やループを if, while, for, switch 等でガリガリ書くことができるようになった(ただし goto は不可だ)。 非常に簡単になったといえるが、これはあくまでシンタックス上の進歩だ。 これによって何ができるかというセマンティクス上の問題について

    S0R5
    S0R5 2014/12/25
  • C++でできる!OS自作入門

    PHPカンファレンス2012 & WordCampTokyo2012 LT発表資料です。 タイトルの元ネタ: http://www.amazon.co.jp/dp/4094512624

    C++でできる!OS自作入門
  • 極端な一様乱数ジェネレーターを作る

    C++11の乱数ジェネレーターは、自前で実装できる。要件さえ満たしていればいいのだ。 一様乱数ジェネレーター(Uniform random number generator)は、ディストリビューションで使う最低限の要求であり、これさえ満たしていれば、ディストリビューションで使える。より広いエンジンの要求は、初期化方法とかのディストリビューションからの利用には必要ない要件を定義している。 ジェネレーターに必要な要件は以下の通り Gをジェネレーターの型、gをGの値とする。TをGのresult_typeの型とする。 式G::result_typeの結果はT、Tは符号なし整数型(コンパイル時) g()はG::min()とG::max()の間の値を返す(償却定数時間) G::min()はGのoperator()が返す最低値(コンパイル時) G::max()はGのoperator()が返す最大値(コン

  • 1