サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
onihusube.hatenablog.com
初期化せずに初期化する。一見矛盾しているようにしか思えない行いはしかし、生配列の場合は次のように初期化しながら初期化しないことによって行うことができます int main() { int array_uninit[5]; // 各要素は未初期化 int array_zeroinit[5]{}; // 各要素は0で初期化 } この時std::arrayで同様に初期化しながら初期化しないことを行うにはどうすればいいのでしょうか?クラス型の場合、初期化をしない初期化(デフォルト初期化)の場合でもデフォルトコンストラクタが呼ばれてしまうため、なんとなくできないような気がしてしまいます。 先に結論を書いておくと、生配列と全く同様の書き方によって全く同様の初期化を行うことができます。 int main() { std::array<int, 5> array_uninit; // 各要素は未初期化 s
この記事はC++アドベントカレンダー2023 25日目の記事です。ご参加の皆様お疲れ様でした! C++ Contracts C++20 Contracts 問題点とMVP(Minimum Viable Product) 最初のMVP仕様 関数の再宣言と契約注釈 引数の事後条件からの参照 契約条件式の副作用 C++26に向けたロードマップ 契約注釈のセマンティクス 違反ハンドラ 構文 C++26に向けて、残りの問題 2023年末時点でのMVP 参考文献 C++ Contracts ContractとはContract programmingの略称で、C++ ContractsとはC++における契約プログラミング機能を指す言葉です(sは付いたり付かなかったりします)。 C++ Contractsとは、契約プログラミングという考え方に基づいた設計(契約による設計)をより自然に行えるようにするため
この記事は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))); } つまりは、オブジェクトの配置されているストレージのポインタを
文書の一覧 JTC1/SC22/WG21 - Papers 2024 mailing2024-01 全部で22本あります。 もくじ P1255R11 A view of 0 or 1 elements: views::maybe P1255R12 A view of 0 or 1 elements: views::maybe P1709R5 Graph Library P2019R5 Thread attributes P2527R3 std::variant_alternative_index and std::tuple_element_index P2664R6 Proposal to extend std::simd with permutation API P2748R3 Disallow Binding a Returned Glvalue to a Temporary P27
文書の一覧 JTC1/SC22/WG21 - Papers 2022 mailing2022-05 全部で36本あります。 N4912 2022-11 Kona hybrid meeting information N4913 PL22.16/WG21 agenda: 25 July 2022, Virtual Meeting P0543R1 Saturation arithmetic P0792R9 function_ref: a non-owning reference to a Callable P0901R9 Size feedback in operator new P1021R6 Filling holes in Class Template Argument Deduction P1255R7 A view of 0 or 1 elements: views::maybe P
C++のテンプレートの用語は日本語に優しくなく、似た言葉がこんがらがってよく分からなくなります。分からないのでメモしておきます。 特殊化(specialization) 明示的特殊化(explicit specialization) 完全特殊化 部分特殊化(partial specialization) プライマリテンプレート(primary template) インスタンス化(実体化:instantiation) 明示的インスタンス化(explicit instantiation) 明示的インスタンス化の定義と宣言 参考文献 謝辞 特殊化(specialization) 単に特殊化と言ったら、あるテンプレートに対してそのテンプレート引数を全て埋めた状態のものをさします。つまり、テンプレートを使った時、その使っている(もはやテンプレートではない)テンプレートのことをテンプレートの特殊化と呼
inline名前空間はC++11から追加された機能で、その中にあるものは透過的に(名前空間がないかのように)アクセスすることができます。一見使いどころがなく見られがちですが、うまく使えばとても便利に活用することができます。 1. using namespaceの範囲を限定する 2. APIのバージョニング 3. ABIのバージョニング リンクエラーにする ABI互換性を確保する 4. 名前の衝突を回避する 参考文献 1. using namespaceの範囲を限定する これは標準ライブラリではユーザー定義リテラルの定義と利用でよく利用されます。 例えば、std::string_viewを簡易利用するためのsvリテラルは次のように宣言されています。 namespace std { // string_view本体 template <class CharT, class Traits = c
C++20以降の必須教養となるであろうカスタマイゼーションポイントオブジェクトですが、その利便性の高さとは裏腹に理解が難しいものでもあります。これはその理解の一助となるべく私の頭の中の理解を書き出したメモ帳です。 C++17までのカスタマイゼーションポイントの問題点 Customization Point Object(CPO) 関数オブジェクトとADL Template Method inline名前空間 その他の性質 実装してみよう! ケース1 右辺値 ケース3 配列型、ケース2 不完全型の配列 ケース4 ユーザー定義型のメンバbegin ケース5 ユーザー定義型の非メンバbegin() 完成! これまでのカスタマイゼーションポイント C++20のカスタマイゼーションポイントオブジェクト C++23以降の標準ライブラリ カスタマイゼーションポイントオブジェクトという言葉 参考文献 C+
<charconv>ヘッダはC++17から導入されたヘッダで、ロケール非依存、動的確保なし、例外なげない、などを謳ういいことづくめで高速な文字列⇄数値変換を謳う関数が提供されています。現在フルで実装しているのはMSVCだけですが、実際速いってどのくらいなの?既存の手段と比べてどうなの??という辺りが気になったので調べてみた次第です。 計測環境 std::to_chars() 測定方法 整数(std::int64_t) 浮動小数点数(double) std::from_chars() 測定方法 整数(std::int64_t) 浮動小数点数(double) グラフで見てみる std::to_chars() std::from_chars() 相対比較 std::to_chars() std::from_chars() 結論 注意点 参考文献 計測環境 Core i7 7700T HT有効OC
非Windows Windowsのコンソール出力と標準出力 標準IOストリームのモード コンソールのコードページ スクリーンバッファ 1. 素直に変換してstd::coutする 1.2 UTF-16に変換してstd::wcoutする 2. UTF-16に変換してWriteConsoleW()する 3. 標準出力をユニコードモードにする 4. コンソールのコードページを変更してUTF-8バイト列を直接流し込む 5. Boost.Nowideを使用する UTF-8の直接出力 in Windows 絵文字の表示 in Windows 検証環境 参考文献 謝辞 非Windows おそらくほとんどの場合、非Windows環境ではcharのエンコードがUTF-8なのでそのまま出力できるはずです。しかし、C++20では標準出力ストリームに対するchar8_t char16_t char32_tのoper
前書き この記事はC++標準化委員会の2019年12月公開の論文の1つ、Bjarne Stroustrupさんが書かれた「P1962R0 How can you be so certain?」という論文の和訳です。 この文章はC++標準化委員会における機能追加時の議論を念頭において、C++標準化委員会メンバーに向けて書かれています。したがって、読むにあたってはC++の機能などについてある程度知っている必要があるかと思います。 私の英語力はひよこ以下なので訳の正確性には全く保証がありません。特に、細部のニュアンスの解釈は大いに間違っている可能性があります(修正してやる!という方がいましたら、この記事のMarkdownソースからお願いします)。 以下の方に修正を賜りました k-satodaさん なお、翻訳の公開についてBjarne Stroustrupさんに連絡を取った所、問題ないとのお返事を
※この内容はC++20から利用可能予定の情報であり、内容が変更される可能性があります。また、constexprなアロケータを作る類の内容ではないです。 前回の記事の「コンパイル時メモリアロケーション」の所に入りきらなかったP0784の内容をまとめたものです。 constexprデストラクタ リテラル型の要件変更 virtual constexpr destructor constexprなnew式/delete式 std::allocator<T>、std::allocator_traits std::construct_atとstd::destroy_at コンパイル時確保メモリの解放タイミング Transient allocation(一時的な割り当て) Non-transient allocation(非一時的な割り当て) Non-transient allocationに関する以前
※この記事はC++20を相談しながら調べる会 #3の成果として書かれました。 P1152R4 : Deprecating volatileを読み解く過程に生じたvolatileについての調査(脱線)メモです。ほぼ文章です。 C++におけるvolatileの効果 マルチスレッドとvolatile 用途と副次的効果 アウトオブオーダー実行とvolatile 参考文献 謝辞 C++におけるvolatileの効果 C++におけるvolatile指定の効果は次のように規定されています(6.9.1 Sequential execution [intro.execution])。 Reading an object designated by a volatile glvalue ([basic.lval]), modifying an object, calling a library I/O fun
※この内容はC++20より有効なものです。現行(C++17)ではまだ1ミリも利用可能な情報ではありません。また、随時記述が変更される可能性があります。 Spaceship Operator(宇宙船演算子)とは 自動生成される演算子 対称性 default実装 暗黙deleteされるケース 戻り値型 その他比較演算子のdefault実装 Comparison category types(比較カテゴリ型) weakとstrong substitutability(代入可能性、代入原理) 狭義の弱順序との関係 共通比較カテゴリ型(Common comparison category type) 比較カテゴリ型と==,<を利用した宇宙船演算子の合成 合成のレシピ 戻り値型指定と==は必要? 組み込み型の宇宙船演算子 operator==について 任意のクラス型の非型テンプレートパラメータとしての
※この内容はC++20から利用可能になる予定の情報であり、一部の変更がC++23以降に先延ばしになるなど、内容が変更される可能性があります。 C++11でconstexprが導入されて以降、あらゆる処理をconstexprで行うことを目指すかのように(おそらく実際そう)constexprは着実に強化されてきました。 C++20ではC++14以来の大幅な強化が行われ、constexprの世界はさらに広がることになります。 constexprな仮想関数 dynamic_castとtype_id コンパイル時メモリアロケーション unionのアクティブメンバの切り替え try-catch std::is_constant_evaluated() trueと評価されるところ 定数式内で、trivially default constructibleな型をデフォルト初期化する constexpr関数
STLにおいて値の大小比較が必要なところでは、operator<を使うかCompare型の関数オブジェクトを渡すことで任意の型についての順序を決定できるようになっています。その時、その順序付けの性質として「狭義の弱順序(もしくは厳密で弱い順序、strict weak orderings)」が要求されますが、これがどういう意味が一目でわかるのは数学科行った人くらいでしょう。cpprefjpのAlgorithmヘッダのところには一応説明が書いてありましたので見てみますと algorithm - cpprefjp C++日本語リファレンス 二分探索以外のアルゴリズムでは、comp は「狭義の弱順序 (strict weak ordering) 」を示さなければならない。 ここでの用語「狭義 (strict) 」 は非反射関係 (irreflexive relation) (全ての x について
このページを最初にブックマークしてみませんか?
『地面を見下ろす少年の足蹴にされる私』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く