タグ

C++に関するtanakaBoxのブックマーク (158)

  • [C++] 如何にしてエイリアスを作るか

    ここのとこ寒くなってきましたね。体調崩していませんか?僕は崩しました。お仕事がそこそこ忙しく、月一更新とはどこ吹く風ですが、少し時間が出来たので記事数を稼いでおこうかと思います。さて、今回はC++で型や変数、関数等のエイリアスをどうやって作るかをまとめてみたいと思います。 エイリアスを定義するのは意外と面倒 物によるんですが、C++でエイリアスを定義するのは意外と面倒だったりします。型なら簡単なんですけどね。というわけで、型、関数、変数についてそれぞれエイリアスを作ってみたいと思います。 型のエイリアス まずは一番簡単な型のエイリアスから。皆さんご存知のtypedefさんが活躍します。 typedef int type; こんな感じで"int"の別名を"type"にすることが出来ます。 // int a = 10; と同じ type a = 10; こうやって使えます。C++11からは"u

  • C++ の歩き方 | cppmap

    C++ の歩き方 | cppmap¶ 📢 CEDEC 2020 にて講演を行いました。発表資料を公開しています。 CEDEC 2020 | ゲーム開発者のための C++11~C++20, 将来の C++ の展望 📢 コンテンツ拡充のため【募集】タグのスレッドへ情報をお寄せください。 cppmap.docs | Issues 📢 サイトの運営は、GitHub Sponsors によって支えられています。 GitHub Sponsors | Become a sponsor to Reputeless このサイトについて¶ C++17, C++20, C++23, C++26 に関する情報を調査・提供します。 管理者 @Reputeless と、コントリビュータの皆様 によって執筆されています。 コントリビュート方法 ライセンス¶ サイトの記事とサンプルコードはパブリックドメインです

  • C++ Insights

    C++ Insights - See your source code with the eyes of a compiler.

    C++ Insights
    tanakaBox
    tanakaBox 2019/03/05
    こら凄い。暗黙の変換が見える。
  • C++20 Contract - Qiita

    この記事は、ブログ記事を色々した版です(提案文書読んでブログに書き終えてからドラフトに入ってることに気付いた)。 基的に、以下の文献に基づきます。 N4800 - Working Draft, Standard for Programming Language C++ P0542R3: Support for contract based programming in C++ by G. Dos Reis, J. D. Garcia, J. Lakos, A. Meredith, N. Myers, B. Stroustrup この機能はC++23に延期になりました、ご注意ください Contract programming 或は Design by Contract (DbC) とは Wikipedia - 契約プログラミング D4Cではない。 三行で Contract Programm

    C++20 Contract - Qiita
    tanakaBox
    tanakaBox 2019/02/26
    凄いなこれ。
  • モダンなC++におけるコンパイル時間削減のテクニック - Qiita

    はじめに C++は他の高級言語と比べると、run-time性能で優れています。C++11、C++14ではテンプレートを使ったテクニックが多く登場し、静的型言語特有のデメリットを大きく解消することとなりました。 しかし... ... ... ... ............. 遅い!!! コンパイルが終わらない!!! 複雑なテンプレートテクニックを使用したライブラリとかだと、どうしてもコンパイル時間が肥大化してしまう。 というわけで今回は、C++11以降の「モダンなC++」においてコンパイル時間を削減させるテクニックをいくつか紹介します。 対象となる読者 C++のテンプレートや共有ライブラリを使用した経験があり、C++の優れたテンプレートの機能を活用したいが、コンパイルに時間がかかって困っている人。あるいは、C++で書かれたライブラリの開発に携わっている人。 コンパイル時間削減のためのテクニ

    モダンなC++におけるコンパイル時間削減のテクニック - Qiita
  • 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++チャレンジ
  • Open Standards

    The site www.open-std.org is holding a number of web pages for groups producing open standards: ISO/IEC JTC1/SC2 - character sets WG3 - 7- and 8-bits character sets ISO/IEC JTC1/SC22 - Programming languages and, operating systems WG9 - Ada WG11 - Binding Techniques WG14 - C WG15 - POSIX WG16 - ISLISP WG19 - Formal Specification Languages WG20 - Internationalization WG21 - C++ WG23 - Programming La

    tanakaBox
    tanakaBox 2019/01/21
    規格
  • 2018-11のC++ドラフトの主要な変更

    N4792 C++20のドラフトが更新された。今回も強めの変更が入っている。 まずconstexprが大幅に強化された。 p1002r1.pdf Allowing dynamic_cast, polymorphic typeid in Constant Expressions C++20での最終的な目標は、std::vectorやstd::stringをconstexpr対応させることだ。そのために従来ならば実行時処理であった様々な機能がconstexprに対応している。今回の変更では、try/catchブロックやdynamic_cast/typeidがconstexprに対応した。また、unionの有効なメンバーの変更もconstexprに対応した。 try/catchブロックはコンパイル時評価される場合、単に無視される。 dyanmic_cast/typeidは当にconstexpr

    tanakaBox
    tanakaBox 2019/01/08
    やば
  • 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
  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

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

  • C++ のシンボルをデマングルする - bkブログ

    C++ のシンボルをデマングルする C++ コンパイラはシンボルが一意の名前を持つように名前マングル (name mangling) と呼ばれる処理を行います。記事では GNU の開発環境で C++ のシンボルをデマングル (demangle) する方法を紹介します。 マングルの方法はコンパイラ依存です。同じコンパイラでもバージョンによってマングルの方法が異なることがあります。たとえば GCC 3.x では int foo(int) を _Z3fooi に、 int foo(const char*) を _Z3fooPKc のようにマングルしますが、 GCC 2.95 ではそれぞれ foo__FPCc, foo__Fi となります。 コマンドラインからデマングル C++ のオブジェクトファイルに nm をかけると、デフォルトではマングルされた読みづらい形式でシンボルが出力されます。 %

  • C++のラムダで再帰する - koturnの日記

    はじめに C++において,ラムダで再帰したいと考えることはたまにある. この記事ではラムダで再帰する手法をいくつか紹介する. 例として扱う再帰関数はフィボナッチ数列の関数(もっとも単純な実装)とする. int fib(int n) noexcept { return n < 2 ? n : (fib(n - 1) + fib(n - 2)); } 生成コード ラムダで再帰を行いたいと考えるのは変数のキャプチャをしつつ再帰をしたい場面であると思う. 例えば,メモ化再帰を行うと考えた場合, グローバル変数としてメモ化配列を用意する メモ化再帰用のクラスを用意する(メンバにメモ化配列を用意する) 再帰関数の引数にメモ化配列を与える といった方法が考えられるが,グローバル変数や専用のクラス定義が必要であり,あまりやりたくない. 引数にメモ化配列を与えるとなると,全ての再帰呼び出し箇所の記述が冗長に

    C++のラムダで再帰する - koturnの日記
  • 競プロ初心者が書く「標準入出力からはじめる競プロ入門」 - Qiita

    この記事は、eeic Advent Calendar 2016 その2 の9日目の記事として書かれたものです。 競プロをまだやったことがない人や、競プロを始めて間もない人で、C/C++の入出力がよく分からないという人を対象とした記事です。執筆者が入出力で躓いたことがあるので、克服も兼ねて注意点を集積しました。したがって経験者の方(レッドコーダーの方、C++の言語仕様書を読破している方、あるいは「私はHaskellerだ」「私はJavaのプロだ」という方など)は得られるものはありません。 タイトルの通り、執筆者は競プロおよびC++の初心者ですので、不正確な情報を書いている場合があります。見つけた場合はコメント欄で適当につついてくださるとありがたいです。 競プロ(競技プログラミング)とは 実際の問題を見てもらうのが手っ取り早いので、これ(はじめてのあっとこーだー)を見てください。 各問題には、

    競プロ初心者が書く「標準入出力からはじめる競プロ入門」 - Qiita
  • C++でMaybeモナド - Faith and Brave - C++で遊ぼう

    今日 id:uskz に会ったときに「C++でもMaybeモナドできますよ」って言われたので調べたらこんなのあった Maybe monad in C++ #include <boost/variant.hpp> class Nothing {}; template <class T> class Just { public: T val; Just(T x) : val(x) {} }; template<class T, class F> boost::variant<Nothing, Just<T> > operator>>=(boost::variant<Nothing, Just<T> > x, F f) { return (boost::get<Nothing>(&x)==NULL) ? f(boost::get<Just<T> >(x).val) : Nothing(); }

    C++でMaybeモナド - Faith and Brave - C++で遊ぼう
  • Template Meta Programming入門から応用まで

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami

    Template Meta Programming入門から応用まで
  • 関数型言語としてのC++ Template MetaProgramming入門 - in neuro

    C++ではtemplateを使ってコンパイル時に計算を行うことができる。 今回は、関数型言語としての視点からC++テンプレートメタプログラミング(C++-TMP)の簡単な紹介をやってみたい。 注:私はHaskellとlispの経験がホンの少しだけあるが、どちらも使いこなせるようになっているわけではない。のでこの記事には関数型への誤解が含まれる恐れがあることを注意していただきたい。 値 C++TMPでは型、もしくはコンパイル時定数が値に相当する。つまり、C++TMPにおいて値の型は、型もしくはコンパイル時定数(の型)ということになる。値の型が型とかめっちゃ面白いな 例えば我々は以下のようにして型を値として用いることができる。 struct v1{}; struct v2{}; struct v3{}; ... template<typename T1, typename T2> struct

    関数型言語としてのC++ Template MetaProgramming入門 - in neuro
  • C++ の 再帰template を使ったあまり使えない競プロ用 std::vector 操作テク - koyumeishiのブログ

    template は再帰的に展開されるので工夫次第で色々できます。 出来るってだけで実用的かどうかは知りません。 自分が使っていたり、思いついたりした std::vector 操作テクを紹介します。 C++11です。 GCCです。 目次 vector の 入力を簡単に vector の 出力を簡単に 多重 vector の fill 多重 vector の resize 複数の vector にまとめて入力 vector の 入力を簡単に 競プロではよく標準入力から長さ $N$ の数列 $A$ が与えられたりします。 N A1 A2 ... AN C++競プロやるとこんな感じで受け取ると思います。 #include <iostream> #include <vector> using namespace std; int main(){ int n; cin >> n; vector<

    C++ の 再帰template を使ったあまり使えない競プロ用 std::vector 操作テク - koyumeishiのブログ
  • ゲーム開発者のための C++11/C++14

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami

    ゲーム開発者のための C++11/C++14
  • rvalue reference、move semanticsに挫折した人のための再入門解説 - Ideals and Reality

    この記事は C++11 Advent Calendar 14日目の記事です。 何がわかりにくいのか C++11から正式に導入される新機能である、move semanticsとrvalue referenceですが、なかなかこれを理解出来ないという人が多いようです。 ちょっと考えればなるほど、と思いますが私が思うにこのわかりにくい最大要因はやはりその名前のせいかと思います。 特にrvalue referenceですが、日語に訳すと右辺値参照という呼ばれ方をしています。 そもそも右辺値や左辺値という名称はC言語時代の流れでそのまま引き継いでいるものであり、右辺値参照という名称は言わば後付けで名称されたものです。 実際に使用する際に右辺値なのか左辺値なのかを意識している人は殆どおらず、これが余計な混乱を招いているのではないかと思います。 ではコードを書いてみて理解しましょう。 lvalueとr

    rvalue reference、move semanticsに挫折した人のための再入門解説 - Ideals and Reality
  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
    tanakaBox
    tanakaBox 2018/05/20
    わかりやすい。