はじめに カブクの甘いもの担当の高橋憲一です。 相変わらず日々甘いものを食しながらC++でZ軸を触るコードを書いています。最近のお気に入りはローソンの「あんこ天国」という名前のあんぱんです。中のあんこが透けて見えるほど薄い生地にたっぷりのあんこが包まれていて満足度が高く、食べるとコーディングが捗ります 🙂 スマートポインタを使っていて遭遇した問題 C++プログラマにとってstd::shared_ptrやstd::unique_ptrなどのスマートポインタを使うことは、もはや疑う余地のないことではありますが、こんな場面に遭遇したことはありませんでしょうか。 std::make_shared<Foo>()でstd::shared_ptrとして生成したあと、そのFooのクラスの中で自分自身(this)をどこかのコンテナに入れたい。 そんな状況を作り出した自分のコード設計が悪いのかと最初は考えあ
namespace std { template <class CharT, class Traits = char_traits<CharT>> class basic_string_view; using string_view = basic_string_view<char>; using u8string_view = basic_string_view<char8_t>; // C++20から using u16string_view = basic_string_view<char16_t>; using u32string_view = basic_string_view<char32_t>; using wstring_view = basic_string_view<wchar_t>; } 概要 std::basic_string_viewは、文字列の所有権を保持せず、
職務質問裁判の控訴は棄却された。判決文は以下から読むことができる。 https://github.com/EzoeRyou/calling-110-is-suspicious 2年前の7月3日、職務質問を受けた。 警察官に職務質問をされた話し この職務質問は明らかに違法であると感じたので、弁護士に相談の上、東京都に対して国賠訴訟を起こした。警察官というのは各都道府県の下に位置する行政組織なので、警察を訴えるというのは、その警察の所属する都道府県を訴えるということになる。 一審判決は請求棄却。理由としては、「最初の10分間は不審事由がないが、刃物などの危険物を入れることができるリュックを背負っていたから声をかけ10分間その場にとどめて話をするのは違法ではない。このとき110番通報を要請したことは不審事由にあたりその後の1時間20分の職務質問は不審事由が存在するために合法である」というわけのわ
序 本書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶための本である。本書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。本書はいわばC++における知識のブートストラップを目指した本だ。これにより読者は本を先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し
def check(n) s = "*"*n f = open("test.cpp","w") f.puts <<EOS #include <cstdio> int main(){ (#{s}printf)("Hello World\\n"); } EOS f.close() return system("clang++ test.cpp") end check(ARGV[0].to_i) $ ruby check.rb 10000 clang: error: unable to execute command: Illegal instruction: 4 clang: error: clang frontend command failed due to signal (use -v to see invocation) Apple LLVM version 10.0.1 (clang
前の C++の初期化は分かりにくい - ぷろみん newしてもゼロクリアされる訳じゃない struct Foo{ int a; }; // デフォルト初期化、aは不定 auto foo1 = new Foo; // 値初期化、aは0 auto foo2 = new Foo(); 省略可能なのでまさかと思ったら、やっぱりnewにもデフォルト初期化と値初期化がありました。 気にせずに使ってしまっていたので意識していきたいです。
コンビニに行けば常に商品がずらりと並び、ECで買った商品は翌日届きます。消費者の利便性を優先して設計されてきたサプライチェーンは、過剰生産による資源ロスや、仕入れにかかる不均衡など、その綻びがいま深刻化しています。企業や消費者の共感を得ながら、サプライチェーンを再設計する方法を模索して、顧客体験設計の最前線を知るビービットの藤井保文氏と富士通 SVP 神 俊一が対談します。
オブジェクト指向プログラムで getter/setterメソッドを使わなければならない 10の理由 福盛 秀雄 fukumori at m.ieice.org JavaやC++などのオブジェクト指向言語でプログラムを書いているときに、単純なメンバ変数を参照したり操作するために anObject.getX() [以後これをgetterメソッドと呼ぶ] とか anotherObject.setY(y) [以後これをsetterメソッドと呼ぶ] と書くのはなぜだろうと思ったことはないだろうか? int型の変数ひとつを操作するのになぜわざわざメソッドを定義するのだろう? 単純に代入を使えばいいじゃないか? この文章はそんなあなた(かつての僕も含む)が、getter/setterメソッドを使うべきである理由についてまとめたものである。 ということで早速本論へ。 1. クラス内部のデータ表現を変えた場
はじめに 2019/7/10追記 NAMEOF_TYPEの例が0.8.0以降のバージョンで動かない問題を修正しました (Thanks! @tyu_ru_cppさん) C++だと「enumで定義した名前を文字列にしたい」というときに困ることがたまによくあります。他の言語だとToStringメソッドを使って文字列にできたりするのですが、C++だとそうはいきません。 Qtを使うと独自の黒魔術によって比較的楽に取得することができるのですけども、Qtを使わないピュアなC++な環境だとどーすんだろっていう感じです。 そこで、Siv3dの作者さんである@Reputelessさんが、まさにそのenumから文字列の変換ができるライブラリについて呟いておられまして、その機能と実装方法に感銘を受けたので、ここで紹介したいと思います。 C++ で enum の値を追加の記述無しで文字列にできるライブラリだ (MS
OpenCVをVagrant + Chef + CentOS6.5の開発環境にインストールするのに結構なハマり所が多かったので、メモしておきます。 OpenCVをインストールするレシピ 以下がopencvをインストールするためのレシピです。 for_opencv_pkgs = %w( gcc gtk+extra gtk+extra-devel pkgconfig python python-devel numpy libavc1394 libavc1394-devel libdc1394 libdc1394-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel sqlite-devel ) for_opencv_pkgs.each do |pkg| package pkg do action :install end end
[[deprecated]]属性とは、C++11で追加された属性の文法で指定できる機能である。 deprecated属性は、任意の名前やエンティティに指定できる。deprecated属性を指定された名前やエンティティは、依然として通常通り使用できるが、使用が非推奨になる。 [[deprecated]] int handy_global_variable ; int main() { handy_global_variable ; // 非推奨 } deprecated属性には、文字列リテラルを記述することもできる。 [[deprecated("Don't Use It!")]] int g ; deprecated属性は、クラス、typedef名、変数、非staticデータメンバー、関数、enum、テンプレートの特殊化に対して指定できる。それぞれの属性を記述する文法は以下の通り。 // ク
前回(g++)と前々回(gcc)のサンプルコードを使ったC++のマングリングや"C"リンケージに関するメモ. nmコマンドでサンプルコードのシンボルテーブルを覗いた後に、C++からCの関数を呼び出す場合のサンプルコードを示す. 特にリンケージ周りの説明は正確性を欠いているやもしれませんのでご容赦下さい.より詳細な説明は参考リンク等を参照して頂ければと思います. nmコマンド nm は、UNIXや類似のオペレーティングシステムに存在するコマンドであり、バイナリファイル(ライブラリ、実行ファイル、オブジェクトファイル)の中身を調べ、そこに格納されているシンボルテーブルなどの情報を表示する。デバッグに使われることが多く、識別子の名前の衝突問題やC++の名前修飾の問題を解決する際に補助として用いられる。 GNUプロジェクトでは、高機能の nm プログラムを GNU Binutils パッケージの一
プログラムが確保したリソースは,利用後,適切に解放しなければならない。確保したリソースを解放し忘れると,しばしばプログラムが予期せず終了することもある。ネットワークサービスを提供するプログラムにこのような不具合があると,サービスを提供できなくなる場合がある。 リソース解放忘れでもっとも有名な問題は,やはり「メモリリーク問題」だろう(関連記事『6-5. メモリリーク』)。システムのメモリ容量は有限だ。プログラムがメモリ領域を作業用に確保したいとき,malloc( )関数によりシステムからメモリ領域を借り入れる(確保)ことができる。借り入れたメモリ領域を使って作業を済ませたなら,必ずそのメモリ領域をfree( )関数でシステムへ返却(解放)しなければならない。メモリリーク問題は,プログラムが適切にfree( )関数でメモリ領域を解放しないことにより,システムの貸し出し可能なメモリがどんどん消費
オージス総研は2月28日、C言語プログラミング用の静的解析ツール「AdLint 1.0」を無償公開した。AdLint 1.0はオープンソース化されており、ライセンスとしてGNU GPL 3を採用している。ANSI C89、ISO C90、 ISO C99の一部に準拠したソースコードの解析ができるという。 AdLintではシングルモジュール解析、クロスモジュール解析、597種類の警告検知、14種類のコード情報抽出、15種類のコード品質メトリクス測定などを実装しており、コンパイラでは検出できない不具合の可能性を警告したり、「経路複雑度」、「被呼出し数」、「デッドコード数」などを測定してソースコードの品質を指標化したりできるとしている。また、同社が提供しているソースコード品質評価ツール「Adqua」と組み合わせることでソースコードの品質を視覚的なレポートで表示することもできるという。 AdLin
#include <iostream> #include <boost/optional.hpp> int main(int argc, char const* argv[]) { boost::optional<int> opt; return 0; } おもむろに g++ test.cpp でビルドする (=> a.out ができる) まずはそのままシンボルテーブルを見てみる(マングリングされている状態) 以下は readelf -s -W a.out の実行結果 Symbol table '.dynsym' contains 10 entries: Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 NOTYPE WEAK
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く