タグ

C++とC++11に関するastk_fのブックマーク (15)

  • C++11からC++17を駆け抜けるC++講座 - Qiita

    初心者C++Advent Calendar 2017 この記事は初心者C++Advent Calendar 2017 15日目の記事です [<< 14日目|C++を学ぶにあたって参考にした書籍・Webサイト](https://qiita.com/S_H_/items/2a892fefa98ebbf38f28) || 16日目|何か書きます >> 今週3目、このAdCでも3目の記事です。期限に間に合わなかったでござる・・・。 今年の初心者AdC++は平和ですね・・・。 はじめに みなさま、ナマステ。さて、この記事のタイトルを見て、「時代・・・サトウキビ・・・忍者・・・うぅ、頭が」となった人は私と趣味が似ています・・・って話をするのは何回目だろうか。 先日ニコニコ(デクレッシェンド)が発表されましたが、Qiitaはクレッシェンドしていって貰いたいものです(なおデザイン改悪)。 (追記:と、

    C++11からC++17を駆け抜けるC++講座 - Qiita
  • 最高速のfizzbuzzを実装する話

    この前、Twitterで誰かが「コンパイラ言語でFizzbuzz書くなら、コンパイル時に全ての演算を済ませ、実行コストはI/O命令1個になるように最適化しないと」という話をしていた。いいこと言うな、と思ってスルーしていたのだが、体調不良で頭だけ動いている状態だったのでC++11でトライしてみることに。 案ずるより産むが易しというもので、割と簡単に綺麗に書けた。こんな感じ。 char配列を可変長のテンプレート引数として結合していって、文字列定数を生成するというテクニックは実際に使い所があるかもと思った。最近C++書いてないけど。 #include <cstdio> template <typename LHS, int N> struct numstr { template <char... Args> struct append { typedef typename numstr<LHS,

  • メルセンヌツイスタの性能差 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 初めに 背景 元々、C++でのメルセンヌツイスタ実装としてはboostのものがありましたが、乱数機能が貧弱であった標準ライブラリでは、C++11 規格で、このboostの実装を参考にしメルセンヌツイスタが導入されたようです。 ※参考:の虫:C++0xの新しい乱数ライブラリ、random という話から、両者の実装は同じだろうと考えていたのですが、どうも違うようだ…ということで、調べてみました。 結論 ということなのですが、先に結論です。 性能に関しては、あくまで手元の環境で、の話です。 boost::random::mt19937とg+

    メルセンヌツイスタの性能差 - 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
  • cpprefjp - C++日本語リファレンス

    サイトcpprefjpは、プログラミング言語C++のリファレンスを提供するWebサイトです。 最新C++バージョンのリファレンスを提供していきます。 運営方針 リファレンスサイトは、C++言語の最新のリファレンスを常に提供し続けることを目標にしています。 各クラス、関数にはそれぞれ1つ以上のサンプルコードを付けていく方針です。 サイトでは、他サイトおよび規格書の直接的な翻訳ではなく、編集者の調査と考えに基づいた解説を提供していきます。 HTMLデータのダウンロード cpprefjp.github.io-master.zip ローカルで閲覧できるHTMLを用意しています。 スポンサーシップ cpprefjp - Open Collective このプロジェクトは、持続的な活動のため、ユーザーの方々からのご支援をお待ちしております。上記Open Collectiveのプロジェクトでスポン

  • C++11: Syntax and Feature

    C++11の文法と機能(C++11: Syntax and Feature) Copyright (C) 2013 江添亮. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GN

  • C++11 の正規表現ライブラリの曖昧さ

    概要 C++11 の正規表現ライブラリの仕様の曖昧な部分を指摘し、現実の実装のぶれを例示します。 Multiline 定義 ECMA-262 では、Multiline について以下のような定義が存在します。 §15.10.2.6 (ECMA-262) Multiline が true の場合 ^ や $ は改行文字の直後や直前にもそれぞれマッチし、 false ならばマッチしない。(文字列の先頭と最後にはそれぞれ常にマッチする) §15.10.4.1, §15.10.7.4 (ECMA-262) 新しく作られた正規表現オブジェクトのフラグに "m" が指定されている場合、 multiline プロパティは true, そうでなければ false。 (つまり、デフォルトでは false) ところが C++11 n3485 には Multiline についての言及はありません。 したがって E

  • C++11 FAQ

    訳者注 下記の文章は C++0x - the next ISO C++ standard の暫定勝手和訳です。 翻訳は現在進行中であり、未完成かつ不正確である可能性があります。 っていうか未完成かつ不正確です。 正しい情報を必要とされる方は、原文を当たってくださいますようよろしくお願いします。 誤訳の指摘は大歓迎です。 2010年01月06日更新 (訳注: 和訳は2010年01月21日更新) この文書 (訳注: 原文) は Bjarne Stroustrup が記述、更新している。 建設的なコメント、訂正、参考資料、提案はもちろん大いに歓迎する。 現在、著者は参考資料の充実化と清書に取り組んでいる。 C++0x は次期 ISO C++ 標準である。 現時点の 草案 を、コメント募集のため公開している。 以前の (そして現在の) 標準は、しばしば C++98 や C++03 と呼ばれる; C

  • 特殊メンバ関数とコンパイラによる暗黙宣言 - yohhoyの日記

    プログラミング言語C++における特殊メンバ関数(special member functions)のユーザ宣言/コンパイラ暗黙宣言に関するメモ。記事の内容はACCU 2014でのHoward Hinnant氏プレゼン(PDF) "Everything You Ever Wanted To Know About Move Semantics (and then some)" に基づく。 下記6つが特殊メンバ関数として扱われる。これらのメンバ関数は、“宣言なし”、“暗黙の宣言(defaulted/deleted)”、“ユーザ宣言(=default/=delete/ユーザ定義)”のいずれかとなる。 デフォルト・コンストラクタ X() デストラクタ ~X() コピー・コンストラクタ X(const X&) コピー代入演算子 X& operator=(const X&) ムーブ・コンストラクタ X

    特殊メンバ関数とコンパイラによる暗黙宣言 - yohhoyの日記
  • C++11メモ @ std::functionで関数を汎用的に呼び出す - ラーメンは味噌汁

    2013-12-23 C++11メモ @ std::functionで関数を汎用的に呼び出す C++11 std::functionとは C++11では以下の様に複数の種類の関数が存在します。 通常の関数 ラムダ関数 関数オブジェクト クラスのメンバ関数 C++11までは通常の関数ポインタとメンバ関数ポインタの呼び出し方が異なるなど混乱することもありましたがstd::functionはこれらの関数の種類を気にせずに汎用的にラップして呼び出すことができます。関数をテーブル化したい、保持したい、引数や返り値で渡したいときなどに非常に便利です。 サンプル #include <functional> // 通常の関数 void normalFunction() { std::cout << "normalFunction" << std::endl; } void functionTest() {

    C++11メモ @ std::functionで関数を汎用的に呼び出す - ラーメンは味噌汁
  • 中3女子でもわかる constexpr

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

    中3女子でもわかる constexpr
  • ラムダ式 - C++入門

    ラムダ式 (lambda expression, 無名関数(anonymous function, nameless function)、匿名関数)とは、関数を定義するための記法、文法です。 読み方 ラムダ式 らむだしき lambda expresssion らむだ えくすぷれっしょん 無名関数 むめいかんすう anonymous function あのにます ふぁんくしょん nameless function ねいむれす ふぁんくしょん 匿名関数 とくめいかんすう 概要 ラムダ式は、無名関数 ラムダ式は、関数オブジェクトで、ラムダ式は、生成されたクラスのoperator()になります。 ラムダ式は、std::functionに代入できます。 ラムダ式は、STLの引数に使用できます。関数の引数として、ラムダ式を直接書けます。 以前は、関数をその場で定義できず、別途定義したものを利用していま

  • ゲーム開発者のための C++11/C++14

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

    ゲーム開発者のための C++11/C++14
  • シンプルな配列クラスを使って「右辺値参照」と「ムーブセマンティクス」を知る - Qiita

    C++11 の新しい機能に「右辺値参照」と「ムーブセマンティクス」があります。 ググればこれらに関して解説されてるサイトが結構ありますが、一般的には理解しづらいものとして扱われてるみたいです。 かくいう自分もよくわかりませんでした……。 ですので、今回は至ってシンプルな配列クラスを使って、これらが何を意味するのかを知ろうかと思います。 従来は「コピー」 まずは、「右辺値参照」と「ムーブセマンティクス」を使わないコードを見てみます。 # include <iostream> using namespace std; struct Array { typedef int ValueType; ValueType *p; int length; // コンストラクタ Array(int _length) : p(new ValueType[_length]) , length(_length)

    シンプルな配列クラスを使って「右辺値参照」と「ムーブセマンティクス」を知る - Qiita
  • Visual C++で使えるC++11

    2014年6月に開催されたSSII2014(http://www.ssii.jp/)のチュートリアル講演用資料です. 使用したコード等はこちら. https://github.com/norishigefukushima/SSII2014 アブストラクト 「CPUのクロック数が年月とともに増加する時代は終わり、プログラムの高速化をCPUの性能向上に任せることのできるフリーランチの時代は終わりを迎えています。しかしムーアの法則はいまだに続いており、CPUはマルチコア化、SIMD化という形で高性能化が続いています。チュートリアルでは、計算コストの高い画像処理を高速化するために、CPUの能力をあますことなく引き出す、マルチコアプログラミング、SIMDプログラミングを解説します。」

    Visual C++で使えるC++11
  • 1