タグ

c++に関するkabakiyoのブックマーク (23)

  • おっさんのためのModernC++入門ガイド(草稿) - dec9ue's diary

    みなさんはC++の読み書きができますか? 自信がある方、いつ頃勉強しましたか?もし20世紀に勉強したのであれば、その知識は相当古いです。実質現在のModernC++(C++11以降のC++)とは概念上の互換性がないので脳のアップデートが必要です。 自信がない方、文法は知っているけどなんとなく使いこなせていない方、マサカリ屋にあーだこーだ言われて大混乱している方。必勝パターンを身につければもっと楽にコードを読み書きできるようになるかもしれません。 この文章の目的は、ModernC++におけるメンタルモデル(考え方)や必勝パターンをざっくりと導入することでみなさんが楽にModernC++を読み書きできるようなお手伝いをすることです。主要な内容としてはムーブセマンティクスと右辺値 とその次の章でだいたいA4換算で15ページくらい?ほかは正直流し読みしてもらえるような内容です。また、内容的にはその

    おっさんのためのModernC++入門ガイド(草稿) - dec9ue's diary
    kabakiyo
    kabakiyo 2021/11/15
  • [C++]Boost.PFRの実装の解説のような。 - 賢朽脳瘏

    動機 Boost 1.75.0からPFRが追加された。通常の構造体のメンバ変数に対してあたかもstd::tupleであるかのようにget<N>でアクセスできる、という謎機能ライブラリである。 このようなライブラリの存在は以前から知ってはいたのだが、白状すると、その機能を知った時は疑問符が大量に噴出した。実装方法が全く想像できなかったのである。私はC++のプロでもなんでもない学生なので分からなくたって別に何も問題ないのだが、気になって仕方がなかったのでソースコードを読んでみることにした。諸事情あってBoostを使えない私でも、根的構造を理解すれば自力で実装することもできるはずだ。 以下、C++17を想定している1。また以下で用いる"メンバ変数"は非staticなものを意味する。 解説 思いの外シンプルで、思いの外力技だった。よくもまあこんな実装方法を思いついたものだと感心するような、呆れる

    [C++]Boost.PFRの実装の解説のような。 - 賢朽脳瘏
    kabakiyo
    kabakiyo 2021/03/23
  • Modern C++チャレンジ

    数学の問題から、文字列処理、日付と時刻、並行処理、暗号、ネットワークまで、多岐にわたる100の問題を集め、その解法をC++で示します。ポピュラーで古典的な数学の問題をはじめ、C++17でのファイル操作やC++20での実行時間の計測、デザインパターン、テキスト翻訳、画像から顔検出など、身近で興味のわく魅力的な問題が多数収録されています。あらゆるレベルのC++プログラマはもちろん、これからC++を始める人にとっても、C++で何ができるのか、どのように書くのかを実際に手を動かしながら学び、プログラミングスキルをレベルアップすることができます。最新のC++17対応。 日語版まえがき まえがき 1章 数学の問題 問題 問題1 3または5で割り切れる正の整数の総和 問題2 最大公約数 問題3 最小公倍数 問題4 与えられた正の整数より小さい最大の素数 問題5 セクシー素数 問題6 過剰数 問題7 友

    Modern C++チャレンジ
    kabakiyo
    kabakiyo 2020/08/21
  • 値渡し、アドレス渡し、参照渡しの違いをメモリマップ的な視点で考える - 備忘録の裏のチラシ

    結論 値渡し 仮引数が確保したメモリの値に、引数として渡す変数の値部分をコピーする方法 アドレス渡し 仮引数が確保したメモリの値に、引数として渡す変数のアドレス部分をコピーする方法 参照渡し 仮引数に引数と同じメモリ領域を指させる方法 背景 値渡しや参照渡しのような「◯◯渡し」という言葉はよく耳にはしますが、その意味はよく理解できていませんでした。ググって解説記事を幾つか読んでみても、記事によって書いてあることが違ったり、言語によっても呼び方が違ったりと、なかなか混沌としている様子。 例えば Java では、メモリ上のインスタンスの場所を指し示す実体(変数が持つ値のこと)を「参照」と呼びます。ですから、この「参照」の値(アドレス番地)を関数に渡すことを「参照渡し」と呼ぶことに違和感はありませんが、C++ などの言語で言うところの参照渡しとは意味が違ったりします。このような状況から、どのよう

    値渡し、アドレス渡し、参照渡しの違いをメモリマップ的な視点で考える - 備忘録の裏のチラシ
    kabakiyo
    kabakiyo 2019/09/30
  • 江添亮のC++入門

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

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

    回答 (11件中の1件目) 追記 再帰のルールをよく理解してませんでした。 分かりやすい例として載せておきます。 [code]#include template struct print { print() { std::cout << N << std::endl; } }; template struct Print { Print() { Print(); print(); } }; template<> struct Print<0> { Print() {} ...

    ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?
    kabakiyo
    kabakiyo 2019/06/20
  • Serializing structs with C++17 structured bindings

    Serializing data in C++ is a surprisingly difficult problem. There are many libraries for it with varying degrees of finesse, power and ease of use. C++17 offers an unexpected simplification with structured bindings. The simplification does not lead to a universal solution, but it's applicability is wide none the less. First, what is this serialization problem? It may be the need to transfer data

    kabakiyo
    kabakiyo 2019/02/22
  • A Thread Pool with C++11 | Jakob's Devlog

    After showing a simple thread pool with Boost.Asio in the last post i’m going to have a look at doing the same thing with the threading facilities in C++11. The biggest difference is that we don’t have the Asio library so we have to reproduce the relevant functionality ourselves. The declarations remain mostly the same except that the ThreadPool class doesn’t have the io_service members anymore bu

    kabakiyo
    kabakiyo 2017/08/21
  • C/C++ 変数宣言の読み方入門 - プログラミングの教科書を置いておくところ

    読み方のコツ 具体例 const の読み方 読み方のコツ 規則は単純です。この二点だけ押さえましょう: ポインタの* より 配列の[] や 関数の() の方が優先順位が高い 日語の人は左から右へ読む。ただし () の中は後で読む 英語の人は逆に変数名(一番内側の括弧)から結合優先順位の高い順に外へ読む そしてそれぞれの記号が出てきたら下記のように読み替えましょう * 〜を指すポインタ, a pointer to 〜 [] 〜の配列, an array of 〜 () 〜を返す関数, a function returning 〜 〜を引数に取り〜を返す関数, a function taking 〜 and returning 〜 具体例 char* aaa; char aaa[10]; char *aaa[10]; char** aaa; char (*aaa)[10]; char (**

    C/C++ 変数宣言の読み方入門 - プログラミングの教科書を置いておくところ
    kabakiyo
    kabakiyo 2017/08/17
  • Clockwise/Spiral Rule

    [This was posted to comp.lang.c by its author, David Anderson, on 1994-05-06.] The ``Clockwise/Spiral Rule'' By David Anderson There is a technique known as the ``Clockwise/Spiral Rule'' which enables any C programmer to parse in their head any C declaration! There are three simple steps to follow: Starting with the unknown element, move in a spiral/clockwise direction; when ecountering the follow

    kabakiyo
    kabakiyo 2017/03/08
  • 【C++】列挙型をビット演算する方法【ビットマスク処理・整数演算】

    通常の列挙型(enum)とスコープ付きの列挙型クラス(enum class)でそれぞれ異なる方法を取る必要があります。「enum構造体」を活用した裏テクニックもあります。 列挙型 C言語由来の古くから使われている列挙体であれば、特に意識することなくANDやOR等の演算が可能ですが、演算結果を列挙体の変数に格納する際にはキャストが必要になります。 enum Animal { Cat = 1 << 0, Dog = 1 << 1, }; // ERROR: Cannot initialize a variable of type 'Animal' with an rvalue of type 'int' Animal a = Animal::Cat | Animal::Dog; // キャストが必要 Animal a = static_cast<Animal>(Animal::Cat | An

    kabakiyo
    kabakiyo 2017/03/08
  • GCC and MSVC C++ Demangler

    kabakiyo
    kabakiyo 2017/01/25
  • Visual C++ name mangling - Wikiversity

    Visual C++ name mangling is a mangling (decoration) scheme used in Microsoft's Visual C++ series of compilers. It provides a way of encoding the name and additional information about a function, structure, class or another datatype in order to pass more semantic information from the Microsoft Visual C++ compiler to its linker. Visual Studio and the Windows SDK (which includes the command line comp

    kabakiyo
    kabakiyo 2017/01/25
  • 関数の引数の型を取得する方法 - Qiita

    メタプログラミングをするときにたまに関数の引数の型がを知りたいときがあるのでメモ。 std::tupleとstd::tuple_elementを使って実装します。 #include <type_traits> #include <tuple> template <std::size_t N, class...Args> struct arg_type_impl { using type = typename std::tuple_element<N, std::tuple<Args...>>::type; }; // 可変個引数テンプレート template <std::size_t N, class... Args> struct arg_type { using type = typename arg_type_impl<N, Args...>::type; }; // 関数 temp

    関数の引数の型を取得する方法 - Qiita
    kabakiyo
    kabakiyo 2016/07/19
  • 自分用C++コーディングスタイル規約 - 魂をC++に捧げよ

    2015-12-03 自分用C++コーディングスタイル規約 C++ コーディング規約 C++コーディング規約 あくまでも個人開発用の主観バリバリコーディングスタイルである。記事中に書いた私の主観を他者に押し付けるつもりはない。宗教戦争はお断りしている。 当に大事なのは、開発プロジェクトのコーディング規約に則る事であり、どんなコーディング規約を押し付けられても受け入れる寛容な心を持つことを忘れないで欲しい。 ヘッダファイル ソースファイル名は.cppで終わり、ヘッダファイル名は.hppで終わる。 多重インクルードガード 多重インクルードを防止するため、ヘッダファイルには#defineマクロを用いたガードを入れるべきである。ただし、意図的に多重にインクルードさせる特異なコードを除く。 マクロ名は確実にユニークになるように、プロジェクト名_ソースコードフルパスの書式にするべきである。 例えばf

    自分用C++コーディングスタイル規約 - 魂をC++に捧げよ
    kabakiyo
    kabakiyo 2016/03/09
  • EffectiveC++入門

    C++プログラマにとって、『Effective C++』はバイブルのような存在です。どれくらいバイブルかというと、皆さんの使っているGNUのGCCコンパイラには、EffectiveC++のコーディングガイドラインに従っているかどうかチェックするためのコンパイラオプション『-Weffc++』が、あるくらいです。 しかし、その内容は決して初心者向きではなく、実際に買ったはいいが、書棚の肥やしになっているような人たちも多いと思います。そこで、そのような初心者の人たちに EffectiveC++ を読み解くために各章のエッセンスをまとめたガイドラインを書いてみました。 C++はもう時代遅れとよく言われますが、組み込み系からビジネスシステムまで、幅広くカバーできる言語は、C++以外にありません。C++を知っていれば、おそらくどのような業界にも通用するでしょう。ITプログラマを自負するのであれば、C+

    kabakiyo
    kabakiyo 2016/03/09
  • Bjarne Stroustrup: 標準C++を新しい言語として学ぶ

    原文: Learning Standard C++ as a New Language The C/C++ Users Journal, May 1999 Bjarne Stroustrup 神宮信太郎 訳 [訳注: この文書は、C++が標準化された翌年の1999年にThe C/C++ Users Journalに 掲載された、Bjarne Stroustrup氏の論文"Learning Standard C++ as a New Language"を 翻訳したものです] 要旨 標準C++[C++,1998]を最大限に活用するために、我々はC++プログラムの 書き方をもう一度よく考えてみる必要がある。そのような「再考」の取り組み として、C++の学び方(と教え方)について考えてみる。我々はどのような 設計テクニックとプログラミングテクニックを重視したいのだろうか。 言語のどの部分を最初に学

    kabakiyo
    kabakiyo 2016/03/09
  • 仮想関数テーブル - Wikipedia

    仮想関数テーブル(かそうかんすうテーブル、英: virtual method table)あるいはvtableは、プログラミング言語の実装において動的なポリモーフィズム、すなわち実行時のメソッドの束縛を実現するために用いられる機構である。 あるプログラムが、継承関係にある複数のクラス(データ型)を持っているとする。たとえばスーパークラス Cat と二つのサブクラス HouseCat と Lion において、クラス Cat が speak という仮想関数(仮想メソッド)を定義しており、サブクラスは適切な実装(鳴く、吠えるといった)を行うものとする。 プログラムがspeakメソッドをCatへのポインタp(Cat クラスおよび Cat の任意のサブクラスを指すことができる)に対して呼び出すと、実行環境は、pが指す実際のオブジェクトの種類(型)に応じてどの実装を呼び出すかを決定しなければならない。

  • Google C++スタイルガイド 日本語訳

    Text Drop 翻訳、プログラミング、写真、カメラなどについて書いてます。スタイルガイド/コーディング規約やチートシートなど、ちょっと便利なものを翻訳しています。 TEXTdropでは、C++プログラマーも利用できるパワフルな機能を搭載。C++のコードを書く際に行う手順や避けておきたい工程などを詳しく説明しています。コードスタイルラインの日語版では、日語訳やJ P Yへの換金もサポート。話題性があるオンラインカジノ 日円変換や入金の際のバグにも対応しています。統一性のあるコードを書くためのポイントや規約の種類を参考にする事ができます。

    kabakiyo
    kabakiyo 2008/12/24
  • C++ Style Guide

    Benjy Weinberger Craig Silverstein Gregory Eitzmann Mark Mentovai Tashana Landray This style guide contains many details that are initially hidden from view. They are marked by the triangle icon, which you see here on your left. Click it now. You should see "Hooray" appear below. Hooray! Now you know you can expand points to get more details. Alternatively, there's an "expand all" at the top o