このページはC++17に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 従来for文しか使用できなかった初期化をif文とswitch文でも使えるようになった。 for文は下記のように初期化と条件式を同時に書くことができる。 初期化で宣言した変数はfor文のスコープのみで有効でありfor文の外では参照できない特徴がある。 if (status_code c = bar(); c != SUCCESS) { //ステータスコード c が成功ではなかったら、何かして、処理を終了する … return c; } else { //ステータスコード c が成功だったら、何かして、処理を続行する … } //この時点で c は無効 switch (Foo gadget{args}; auto s = gadget.stat
22:22 21/11/20 ボレロ村上(村上原野)さんと constexpr のこと 去る2020年2月、縄文陶芸家にしてC++プログラマという希有な二つの顔を持つ人物がこの世を去りました。 ボレロ村上 (村上原野) 氏です。 正直なところ、陶芸家としての彼の側面については私はほとんど何も知らないに等しいです。 残された作品を見て何かを語れるほど芸術に通じているわけでもありません。 いつか機会があれば見に行こうと思っていた村上さんの作品を目にする最初の機会も、 昨年訪れた追悼展になってしまいました。 ただ、それでも私は、彼自身の登壇発表の資料 であったり、 そして何よりも縄文・陶芸に造詣の深い方々の記された幾つかの文章によって、 彼が一体何を成し遂げたのか、成し遂げようとしていたのかに触れることができています。 この夏にはクラウドファンディングで 作品集 も出版され、誰でも手にとって縄文
みなさんはC++の読み書きができますか? 自信がある方、いつ頃勉強しましたか?もし20世紀に勉強したのであれば、その知識は相当古いです。実質現在のModernC++(C++11以降のC++)とは概念上の互換性がないので脳のアップデートが必要です。 自信がない方、文法は知っているけどなんとなく使いこなせていない方、マサカリ屋にあーだこーだ言われて大混乱している方。必勝パターンを身につければもっと楽にコードを読み書きできるようになるかもしれません。 この文章の目的は、ModernC++におけるメンタルモデル(考え方)や必勝パターンをざっくりと導入することでみなさんが楽にModernC++を読み書きできるようなお手伝いをすることです。主要な内容としてはムーブセマンティクスと右辺値 とその次の章でだいたいA4換算で15ページくらい?ほかは正直流し読みしてもらえるような内容です。また、内容的にはその
はじめに TL;DR. Intel oneAPIとClangは競合する可能性があります iccが無償になって,yumやaptで簡単に入るよって書いてる記事が増えてきました. 気軽な気持ちで入れられるような顔をしていますが,これは罠です. setvars.sh とかいうクソスクリプトがシステムの環境変数設定をぶち壊す可能性があります. 自分のマシンなら良いですが,何も考えずに共用のマシンにインストールするのは考え直してください. この記事は以下2つの記事の続きです.何のためにインストール記事なんて書いたかって,実はこの記事をちゃんと書きたかったからです. Intel oneAPIのIntelコンパイラやDPC++についてちょっと調べた Intel oneAPIのUbuntuへのインストールとToolkitのサイズでかすぎ問題 20210829追記 LLVMベースの新しいコンパイラはicx/i
The common theme in many time-travel movies is to go back in time to find out what went wrong and fix it. Developers also have that desire to go back in time and find why the code broke and fix it. But, often, that crucial step where everything went wrong happened long ago, and the information is no longer available. The rr project lets programmers examine the entire life of a C or C++ program run
はじめに 皆さんは競技プログラミングで「テンプレート」は使っていますか? rep や chmin 、 modpow など、よく使う処理を事前に用意したもののことです。 この記事では、C/C++で使える「テンプレート」1の記述方法について紹介します。 C/C++のテンプレートは邪魔! テンプレートはとても便利です。コンテスト時に書くコードが少なくなり、解答スピードが速くなります。 実装方法を忘れてコンテスト中に調べ直す、なんてこともなくなります。 しかし、便利さを追い求めて様々な関数やクラスの追加を重ねるうちに、テンプレートが膨大な行数になってしまいがちです。 また、C/C++ではどうしても使うより先に宣言が必要です。すると、 main 関数はテンプレートの下に書かなくてはならず、いちばん下の main 関数にたどり着くまでのスクロールでイライラしてしまいます。 さらに、参考にしようとあなた
おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 何も見ずにC++でjsonパーサが書けるか試してみた。 C言語から使えるJSONパーサ、JSMNを試してみた。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。 C言語から使えるJSONパーサ、jansson がとても直感的で良い C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」 これまで C++ から扱
TL;DR 文字列から浮動小数点数に変換するならfastfloat使いましょう。 私が試せる環境で比較する限り、とても速いです。 細かいことが気になります C++でちょっとしたプログラムを書くときにいつも気になるのが 「文字列データから指定データ型への変換処理をどうやって効率的に書くか」 です。私だけかもしれませんが。 特に悩んでしまうのが「文字列→浮動小数点」です。 std::scanf, std::stringstreamを使うものは大抵すごく遅い std::strtodstd::stodはstd::stringへの変換が入るので避けたい std::from_charsは(libstdc++が)浮動小数点型に対応していない boost::sprit::qiが何故か速いのだけれどこのためにboost::sprit使うのは重い と色々制約が多いのです。どうにかならないものか。 fast_f
Android Advent Calendar 2020の20日目はAndroid NDK方面で今開発が進んでいるPrefabパッケージ機構についていろいろまとめます。タイトルに書いている「ネイティブ」とはC/C++等のコンパイラが生成するCPUネイティブなコードの意味です*1。 目次 Prefabとは? AARパッケージの仕組みと、それだけでは足りない部分 Prefabツールによる状況の改善 prefabメタデータとprefabツールの役割 Prefabアーカイブの汎用性 モジュール Android StudioでPrefabパッケージを使う・作る PrefabとAGPのPrefabサポートの現在の課題 build.gradleでヘッダーディレクトリが1つしか指定できない Prefabパッケージとnon-Prefabパッケージの排他的関係 全てのネイティブライブラリで同一のlibc++_
動機 Boost 1.75.0からPFRが追加された。通常の構造体のメンバ変数に対してあたかもstd::tupleであるかのようにget<N>でアクセスできる、という謎機能ライブラリである。 このようなライブラリの存在は以前から知ってはいたのだが、白状すると、その機能を知った時は疑問符が大量に噴出した。実装方法が全く想像できなかったのである。私はC++のプロでもなんでもない学生なので分からなくたって別に何も問題ないのだが、気になって仕方がなかったのでソースコードを読んでみることにした。諸事情あってBoostを使えない私でも、根本的構造を理解すれば自力で実装することもできるはずだ。 以下、C++17を想定している1。また以下で用いる"メンバ変数"は非staticなものを意味する。 解説 思いの外シンプルで、思いの外力技だった。よくもまあこんな実装方法を思いついたものだと感心するような、呆れる
現代のプログラミング言語ではポインタは単なるアドレスではなく,provenanceを伴った参照として扱われています. 世界は既に変わっています. 概要 ポインタは単なるアドレスではありません. ポインタにはprovenanceという,どのオブジェクト由来かの情報が含まれています. Provenanceを使うことで,最適化が効きやすくなったり,堅牢なプログラムを書きやすくなったりします. 追記: 次の英語記事を読むとprovenanceが必要な理由についてもっとよく知ることができます.クリックしよう!!!!(2020-12-15) https://www.ralfj.de/blog/2020/12/14/provenance.html ポインタはアドレスではない 次のCプログラムを見てみましょう. #include <stdio.h> #include <string.h> int main
C++1z(C++17)標準ライブラリの文字列型std::basic_string<charT>クラステンプレートでは、ポインタ型charT*を返す 非const版 dataメンバ関数が追加される。(ポインタ型const charT*を返すconst版dataメンバ関数はC++98から存在している。) まとめ: C++98/03標準ライブラリでは仕様による保証が無いものの、実用上は&buf[0]を利用できる。*1 C++11/14標準ライブラリでは&buf[0]を利用する。 C++1z標準ライブラリでは&buf[0]またはbuf.data()を利用する。 下記例のようなレガシーAPIに対して、配列の代わりにstd::stringオブジェクトを文字列取得バッファとして渡す方法。 // バッファsにNUL終端文字列を取得(size=バッファ長) // 戻り値:バッファに格納された文字数(NUL
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く