タグ

C++に関するs_hiiragiのブックマーク (50)

  • [C++]沼底のvoidify() - 地面を見下ろす少年の足蹴にされる私

    この記事はC++ Advent Calendar 2022の14日目の記事です。 規格書中の特定領域に突如出現する謎の説明専用関数voidify()、その謎を解明するため、我々調査隊はアマゾンの奥地へと向かった――。 謎の関数voidify voidfy()の入力 voidify()の役割 voidify()の実装 反voidify()運動 参考文献 謎の関数voidify voidify()とは規格書中に登場する謎の関数で、次のように定義されています。 template<class T> constexpr void* voidify(T& ptr) noexcept { return const_cast<void*>(static_cast<const volatile void*>(addressof(ptr))); } つまりは、オブジェクトの配置されているストレージのポインタを

    [C++]沼底のvoidify() - 地面を見下ろす少年の足蹴にされる私
  • enum の最後で列挙子の数を定義することの是非 - Qiita

    ※この記事は http://k_satoda.users.sourceforge.net/article/cxx-enum-last-num.html を元に実験的に転載したもので、内容は基的に同じです。 何の話? C, C++ での列挙宣言 enum について、列挙子の数が欲しいことがよくあります。例えば各列挙子に対応する情報を取り出すためのテーブルを以下のように簡単な配列で定義して対応付けを行いたい場合などです。 int PriceOf(enum Item x) { static int const price[NumItems] = { 123, // Item_A の値段 456, // Item_B の値段 789, // Item_C の値段 }; return price[x]; }

    enum の最後で列挙子の数を定義することの是非 - Qiita
  • ロベールのC++教室 - 第56章 クロスキャスト -

  • malloc() が返すアドレスの下位数ビットは常に0って知ってます?

    当は「malloc() が返すアドレスは8の倍数って知ってます?」 にしたかったんだけど,「8」というのは CPU 依存の数字だし, 一般には2の冪乗なのでこういうタイトルにした. そもそもこの記事を書くきっかけは, YLUG の 「第67回カーネル読書会 (glibc malloc について)」の ビデオと資料を見たこと. 1985年頃に Lisp の処理系を作ろうとして (結局作らなかったけど(^^;)) メモリ管理方法について色々考えたアイディアと同じものもいくつか出てきて, 懐かしくもあり,またとても面白かったが, 私にとって目新しいアイディアは少なかった. malloc() の内部実装に興味を持つ人であっても, 意外と上記タイトルに書いた事実を知らない人が多いようなので, 「ビデオと資料」のページに色々とコメントした. この記事はそれを整理してまとめたものである. 2016/0

  • cpp-aligned-allocate

    C/C++でコーティングしていると、特定のサイズにアライメントされた領域が必要なることがありますよね。ハードウェアに近いところを実装してると「4KiBでアラインせよ」とか普通にありますね。 このようなアライメントされた領域を確保する方法はいくつかありますが、今回は可搬性の高い方法をいくつか紹介します。 posix_memalign 関数 これは名前の通り、POSIX準拠の関数ですので Unix や Linux などほとんどの環境で動作します。プロトタイプ宣言は int posix_memalign(void **memptr, size_t alignment, size_t size); です。 この関数は、引数 size(Byte)の大きさの領域を確保し、引数 memptr の指す先へ領域へのポインタを格納します。その領域は引数 alignment で指定した値でアライメントされていま

    cpp-aligned-allocate
    s_hiiragi
    s_hiiragi 2023/12/04
    “さらに、引数 size は 引数 alignment の倍数である必要があります。”
  • 実践C++応用講座 第19回 CRTPを使ってみよう! | Theolizer®

    こんにちは。田原です。 CRTPとはCuriously Recurring Template Patternの頭文字で「奇妙に再帰したテンプレートパターン」とも訳されるようです。「奇妙」は「おかしな」とか「変な」のニュアンスではなくて「不思議な」が近いように思います。C++の様々な機能と同様、知らないと困るものではないですが、デメリットなくプログラムを高速化できるケースがあるので、有用なテクニックの1つです。(もちろん、他の機能同様使えないケースもありますので選択肢の1つと捉えて下さい。) 1.基構造 「パターン」と呼ばれるように、要するにプログラムの定型的な構造です。CRTPの構造自体は単純です。 クラス・テンプレートを基底クラスとし、そのテンプレート・パラメータに派生クラスを与えるという構造です。 template<class tDerived> class CrtpBase { }

    実践C++応用講座 第19回 CRTPを使ってみよう! | Theolizer®
  • C++17のクラスのテンプレート実引数推定

    テンプレートは以下のように定義する。 template < typename T > class C { C ( T t ) { } } ; template < typename T > void f( T t ) { } テンプレートは以下のように使う。 int main() { C<int> c(42) ; f<int>(42) ; } しかし、C++プログラマーの大半は、関数テンプレートfをこのように使うことはない。大抵は、f(42)のように使う。このように、テンプレート名を書いた場合、C++コンパイラーはテンプレートの実引数推定と呼ばれる仕組みを使ってテンプレート実引数を推定する。 その詳しい仕組みは難解だが、考え方としてはこうだ。42の型はintである。すると、tの型はintである。tの型はTとされているので、Tはintである。Tはテンプレート仮引数である。するとテンプレート仮

  • プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話

    プログラム解析入門 もしくはC/C++を安全に書くのが難しすぎる話 Last updated: Jul 30, 2022 Kinuko Yasuda <@kinu>

    プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話
  • Google C++ スタイルガイド(日本語全訳) Google C++ Style Guide (Japanese)

    Google C++ スタイルガイド 日語全訳 ドキュメントはhttps://github.com/google/styleguide/ にて公開されているGoogle C++ Style Guideを日語に訳したものです。 commit 6ebcd8c (Oct 24, 2023) 時点のものを底としています。 オリジナルの最新版は https://google.github.io/styleguide/cppguide.htmlで読むことができます。 オリジナルと同様 CC-By 3.0 Licenseで頒布します。 免責: 訳者はGoogleと無関係です。私訳や誤訳を含んでいる恐れがあります。 訳文にマウスを重ねると原文が表示されますので、そちらもあわせて参照してください。 誤訳の指摘・改善案は Issues or Pull Requestsまでお願いします。 ガイドの背景

  • decltype(e)とdecltype((e))のキモチ - yohhoyの日記

    プログラミング言語C++における decltype指定子(decltype-specifier) の振る舞いについてメモ。 int x = 42; // 括弧なしの変数名 x decltype( x ) y = x; // int 型 // 括弧付きの式 (x) decltype((x)) z = x; // int& 型 一見すると奇妙に思えるdecltype(e)型導出ルールは、「式eの型宣言を探す」という指針に基づいている。 変数名x:ソースコード上に直接登場する変数x宣言時の型intとなる。 式(x):式(x)はソースコード上の宣言には現れない。式(x)の左辺値としての性質(lvalueness)を保持する参照型int&となる。*1 C++11言語仕様へのdecltype導入当時の提案文書(PDF) N2115 Decltype (revision 6): proposed wor

    decltype(e)とdecltype((e))のキモチ - yohhoyの日記
  • 役に立つリソース - cppreference.com

    [編集] C++ の FAQ isocpp.org C++ FAQ - The Standard C++ Foundation により統合された FAQ Bjarne Stroustrup FAQ - 言語の作者による FAQ への回答 Bjarne Stroustrup C++11 FAQ - C++ 言語標準の最近の変更に関する追加の FAQ StackOverflow.com C++ FAQ - プログラマの Q&A ウェブサイト StackOverflow.com でよく訊かれる C++ の質問に対するベストアンサー [編集] C++ の言語およびライブラリのリファレンス JTC1/SC22/WG21 - C++ 標準化委員会 (C++ 言語標準、提案および欠陥報告を含みます) n3337.pdf - C++11 発行後の最初のドラフト n4140.pdf - C++14 の最終ワ

  • Tool to track #include dependencies

  • リダイレクトの警告

    表示中のページから https://codeyarns.com/2015/10/27/how-to-find-included-header-files-using-showincludes/ にリダイレクトしようとしています。 このページにリダイレクトしないようにする場合は、前のページに戻ってください。

  • ラムダ式 - cpprefjp C++日本語リファレンス

    概要 「ラムダ式(lambda expressions)」は、簡易的な関数オブジェクトをその場で定義するための機能である。 この機能によって、「高階関数(関数を引数もしくは戻り値とする関数)」をより使いやすくできる。 auto plus = [](int a, int b) { return a + b; }; int result = plus(2, 3); // result == 5 ここでは、[](int a, int b) { return a + b; }というコードがラムダ式に当たる。このラムダ式は、「int型のパラメータを2つとり、それらを足し合わせたint型オブジェクトを返す関数オブジェクト」を定義している。ここでは戻り値の型を明記していないが、その場合はラムダ式のreturn文から、戻り値の型が推論される。 このラムダ式によって、その場に以下のような関数オブジェクトが定

    s_hiiragi
    s_hiiragi 2018/12/27
    “ラムダ式がひとつ以上の変数を参照キャプチャしている場合、参照している変数の寿命が切れたあとの、ラムダ式のコピーと呼び出しの動作は未定義。”
  • 多次元の std::array を楽に扱う - koturnの日記

    はじめに 前回の記事では,多次元の std::vector について書いた. 今回は多次元の std::array について書こうと思う. まず,std::array は組み込み配列と同等の機能を提供するクラスである(というより,組み込み配列のラッパークラスである). 使用方法としては std::array<int, 4> arr のように,第1テンプレート引数に要素型,第2テンプレート引数に要素数を渡す. std::array<int, 4> arr は int arr[4] に相当する宣言となる. しかし,std::array を多次元にする場合を考えると, std::array<std::array<std::array<int, 30>, 20>, 10> arr; と宣言が長い宣言が必要になる. また,上記の3次元の std::array と同等の組み込み配列は int arr[

    多次元の std::array を楽に扱う - koturnの日記
    s_hiiragi
    s_hiiragi 2018/12/26
    “いなむ神に以下のような実装を教えていただいた.”
  • C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita

    C++ Advent Calendar 2018 この記事はC++ Advent Calendar 2018 15日目の記事です。 14日目: VTKライブラリ 16日目: C++のエラー処理との付き合い方 当初見積もりよりも大幅に長い記事となり、投稿したのは12/22で1週間遅刻です。すみません。 お知らせ cpprefjpにchar8_t型追加について解説を書きました。ぎゅぎゅっとコンパクトに、また査読を受けて中立的な表現で書いていますので、よければどうぞ。 UTF-8エンコーディングされた文字の型としてchar8_tを追加 - cpprefjp C++語リファレンス 追記 全ての開発者が知っておくべきUnicodeについての最低限の知識 - GIGAZINE Unicodeについて簡潔にまとまってるいい記事を見つけました。 Caution この文章には以下の要素が含まれます。苦手

    C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita
  • C++20時代のポリモーフィズム - ぷろみん

    概要 ポリモーフィズム良いですよね。 でも、継承嫌ですよね。 MixInみたいな綺麗な継承が使える場面も現実的なサービスを考えると難しい。 そこで簡単に追加、削除ができ可読性も悪くないstd::variantとconceptを使ったC++20時代のポリモーフィズムを紹介します。 コード #include <iostream> #include <vector> #include <string> #include <variant> struct A{}; struct B { std::string ToString() { return "B"; } }; struct C{}; struct D{}; struct E{}; using VariantType = std::variant<A, B, C, D, E>; template<class T> concept bool

    C++20時代のポリモーフィズム - ぷろみん
  • Bjarne Stroustrup インタビュー (?)

    これは物なのかなあ…。Computer 誌(IEEE 発行)が C++ 言語の開発者 Bjarne Stroustrup 氏に行ったインタビューの記録だそうです。内容に非常に問題があるため実際には掲載されなかったのが、どこからかリークされたものだとか。 物かどうかは自分で判断してください。私としては何とも言えません。Usenet のニュースグループ rec.games.roguelike.angband への投稿記事が原文です。(英語原文はこちら) インタビューア(以下「I」):  あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。 Stroustrup(以下「S」):  実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが C 言語を使っていたけど、問題はみんな結構うまくコーディングしていたことだった。大学も C

    s_hiiragi
    s_hiiragi 2018/11/13
    “C++ プログラマというものはね、どういうわけか、どんなプロジェクトであろうと C++ のあらゆる要素を片っ端から使わなきゃいけないと信じ込んでいるんだ。”
  • IBM Knowledge Center

    IBM Documentation.

    s_hiiragi
    s_hiiragi 2018/11/09
    "デフォルトのテンプレート引数のセットは、任意のテンプレートの宣言すべてに累積していきます。"
  • 『Linuxにおけるカバレッジテスト』

    ~Rhythmical Life~ ・Music Life / ・Soccer Life / ・Trip Life アコースティックギター一サッカーボール一つ、 そして身一つで、 世界を楽しむのには十分だ。 【Linuxにおけるカバレッジテスト】 ■gcovを使用したカバレッジテストについて □gcovとは C言語で書かれたプログラムのカバレッジを測定するツールで、gccに付属 □gcovのインストール 不要。gccに付属 □ざっくり使い方 ①測定するテストコードをコンパイルする際に、-coverageを付加すると、gcov用オブジェクトファイル(*.gcno)が生成される。 但し、古いバージョンのgcc(3.4.6ではこちらに該当)では-fprofile-arcs -ftest-coverage と書く必要がある(以下についても同様) ②テストアプリを実行すると、カバレッジのログを

    『Linuxにおけるカバレッジテスト』