![http://unanancyowen.com/pcl18/](https://cdn-ak-scissors.b.st-hatena.com/image/square/598d35da4578f6b04417b53d8ec6ca799f4bc0ee/height=288;version=1;width=512/http%3A%2F%2Funanancyowen.com%2Fwp-content%2Fuploads%2Fpointcloudlibrary_vert_large_pos.png)
ムーブコンストラクタがどういう動きをするのか調べるために下記のようなコードを書いてみた。 まずムーブコンストラクタなしの場合。 #include <iostream> #include <vector> using namespace std; struct Obj { Obj() { cout << "constructor" << endl; } Obj(const Obj& o) { cout << "copy constructor" << endl; } /* ムーブコンストラクタなしの場合 Obj(Obj&& o) { cout << "move constructor" << endl; } */ }; int main() { std::vector<Obj> v; cout << "1\n"; v.push_back(Obj()); cout << "2\n"; v.pu
ロベールのC++入門講座 09-03 ロベール本ではテンプレートの実装はヘッダに書かなければならないとさらりと書かれていましたが、何故そうしないといけないのかが本を読むだけでは今一良くわからなかったので色々調べてみたところ、理由がわかりました。 まず宣言と定義をファイルを分けて実装した場合、どういった状態になるかを見てみましょう。 // -- csample.h -- #ifndef __CSAMPLE_H__ #define __CSAMPLE_H__ template<class T> void template_swap(T& a, T&b); #endif // -- csample.cpp -- #include "csample.h" template<class T> void template_swap(T& a, T&b) { T t = a; a = b; b = t;
A presentation about inplace realloc at C++14 Study meeting in Japan.Read less
Linuxで共有ライブラリ(*.so)を作るようになったのでちょっと勉強してみた。今までは使うだけだったので、以下のようなことは知っていた。作るときはgccの-sharedオプションを使う。使うときはgccの"-lライブラリ名"でリンクするライブラリを指定する。リンク時のライブラリ探索パスは-Lオプションで指定する。実行時のライブラリ探索パスは/etc/ld.so.confに書いてあるディレクトリ。環境変数LD_LIBRARY_PATHでも指定可能。ライブラリを作るときは、.cから.oを作るときに-fPICをつけるといいらしい。新しくライブラリを入れたときはldconfigするといいらしい。逆に今まであまり知らなかったこと。ほとんどのライブラリはlibhoge.so, libhoge.so.1, libhoge.so.1.1のように3つくらいのファイルがあり、libhoge.soやlibh
中3女子です。 この記事は C++ Advent Claneder2014 23日の参加記事です。 constexpr とは この記事を読んでいる層には、いまさら言及するまでもないと思われるので省略する。 必要であれば このあたり の資料を参照のこと。 C++14 シンタックス上の進歩とセマンティクス上の進歩 巷では C++14 になり constexpr が簡単になったという話をしばしば耳にする。たしかに簡単になった。 では何が簡単になったかというと、もっともわかりやすいのは複文とローカル変数、制御構文の制限緩和だろう。 条件分岐やループを if, while, for, switch 等でガリガリ書くことができるようになった(ただし goto は不可だ)。 非常に簡単になったといえるが、これはあくまでシンタックス上の進歩だ。 これによって何ができるかというセマンティクス上の問題について
先日、github で crow という、python の flask からインスパイアされた C++ 製 micro web framework を見つけました。 ipkn/crow - GitHub https://github.com/ipkn/crow ルーティングの書き方が flask ぽく、かつモダンな C++ な書き方だったの気に入りました。 crow::Crow app; CROW_ROUTE(app, "/") .name("hello") ([]{ return "Hello World!"; }); app.port(18080) .multithreaded() .run(); 何か作ってみたくなったので、lingr の bot を書いてみました。crow には JSON パーサ(シリアライザ)が同梱されているので API サーバを作るのも簡単そうです。 #incl
Objective-C特有の型だってもちろん使えます。 ターゲット2 コレクション型 Swiftでは基本となるコンテナクラスは今のところDictionaryとArrayのみという極めて貧弱極まりない環境です。 しかしその点Objective-C++なら、Objective-Cのコレクションクラスはもちろん、 状況に応じてC++のよく熟成された標準ライブラリに簡単に統合することが可能ですね。 例えば以下のように #import <Foundation/Foundation.h> #include <map> int main(int argc, const char * argv[]) { @autoreleasepool { struct CompareNSString { bool operator()(NSString * lhs, NSString *rhs)const { retu
C++14で導入されるdecltype(auto)を使うと、returnとreturn (…)で戻り値の型が変わる。前者は値、後者は参照となる。 decltype(auto) f() { static int value = 3; return value; } decltype(auto) g() { static int value = 3; return (value); } int main() { int f_result = f(); int& g_result = g(); } 参照 C++11/14 and return( … ) vs return - StackOverflow C++14 通常の関数の戻り値型を推論
C++でCSVファイルを扱う方法を調べてみましたので、メモします。 ヘッダファイルには、以下のインクルードが必要。 #include<fstream> #include<iostream> using namespace std; 出力# ofstreamを使います。 ofstreamでファイルを出力ストリームとして開き、«演算子で書き出します。 書き出すときに、カンマを入れます。 開くときは、ofs(ファイル名)で開ける。ofs.close()処理はなくてもOK. 入力# ifstreamでファイルを入力ストリームとして開き、»演算子で読み込みます。 カンマで区切るのが少しテクニックが必要!getlineをつかって、カンマをウマク検出します。getlineのために、 #include<string> も必要となる。 getline関数は、文字列として読み込むので、文字列から数値に変換が必
iPhone 触ってみたいですねー。商標でもめてますが、いっそのこと Apple Phone でも良いような。 さて、C++ で独自フォーマットのテキストファイルを読み込む場合には、find_first_* と substr を組み合わせて泥臭く処理をすることが多かったのですが、『区切り文字を空白に置換する』という前処理を追加することで、stringstream を活用できることに気付きました。いくつか例を挙げて紹介していきます。 まず最初に、以下のようなカンマ区切りのファイルを読み込む例です。 ### ### sample.csv ### 1,tom,dvorak,1.0 1,bob,qwerty,0.5 ...コードは以下の通り。 struct csvdata { int type; std::string key; std::string value; float priority;
<string>ヘッダにあるstd::getline()関数は、行単位の読み取りだけでなく、区切り文字を指定するバージョンもあるので、splitの実装に使えたりする。 #include <iostream> #include <string> #include <sstream> #include <vector> std::vector<std::string> split(const std::string& input, char delimiter) { std::istringstream stream(input); std::string field; std::vector<std::string> result; while (std::getline(stream, field, delimiter)) { result.push_back(field); } retu
この記事は C++ AdventCalendar 2013 の 10 日目の記事です. 本記事では Vim で C++ を書いている人を対象として,逆引きで Vim の機能やプラグインについて紹介していきます. すべてについて細かく書いているとキリが無いので,基本的な使い方とプラグインのリポジトリへのポインタ,主要な記事へのリンクを載せています. より詳しく知りたい場合はリポジトリ内の README やドキュメント(/doc内にあります),プラグインインストール後の :help コマンドを利用してください. また,何か問題が発生した場合など,助けが必要な場合は Lingr というチャットサービスの Vim 部屋でも対応してもらえることがあります. http://lingr.com/room/vim 目次 シンタックスハイライト C++11 のシンタックスハイライト(cpp-vim) 補完す
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く