Q:WOW @ tumblrdatinggame(.)com WTF is this.. my little brother's roommate is on this and I think I saw you too lol
fuck off :-)
ps -ef x| grep “MyHeart” | awk ‘{print $2 }’ | head -n 1 | xargs kill
220 名前:名無しさん@涙目です。(茨城県)[sage] 投稿日:2011/04/22(金) 01:31:10.42 ID:UGcv/psN0
初級者「C++全然わからんw」
中級者「C++全然わからんw」
上級者「C++全然わからんw」
標準化委員会「C++全然わからんw」
出典: caravanserai
A.V.A近況
Evernoteにまとめた。
そういや最近技術系の件はModern C++ Designを今頃読み進めている。で、考察とかもガシガシ入れてるのだが完読してからリンクとか貼ろうと思う。今半分は読み終わっているがじっくり読み進めていきたい。
clangとかlinux
今頃。取りあえず面倒なので
sudo apt-get install clang
したのだがバージョンが3.0。いろ いろサポートの具合を見てみたが実装してないとかあるみたいなのでしょうがないビルドしようという事でビルド。initializer-listのサポートがoverflowの方には3.0でとアンサーされてるけどsupport in clang見る限りは3.1とあるのだが….よう分からん。
取りあえず取得にはgit用いた。Getting Startedそのままで。後は適当にビルド作業用ディレクトリ作って普通にconfigureしてmakeしてmake install。凄く時間かかった。でまぁUser defined literalとか弄ったり。後、これからすることメモ
ところでこの前Ubuntuを12.04にアップグレードしたのだが無線LANの速度が異常に遅い。しかしつなげる事には繋げるので何かドライバ誤認識でもしてるんだろう…後に見ないと。
後linux mintの日本語関連で参考になった:http://pc-usr.seesaa.net/article/239894581.html
なんかグダグダなエントリだ……
最近Evernoteの方に参考書読みながらの考察などをまとめている。実に便利だ。
そういえばGTX690がもう発表されたとか友人から。…というか取りあえずグラボ欲しいでござる。
cplusplus.comからメールが返ってきた
cplusplus.comへメールをポストの件。返信きた。
Hello, and sorry for the late reply.
I have just corrected this error.
Thanks for reporting it!
Best regards,
とあるので指摘通りページが修正されたみたい。確認したところ修正されていた。良かった良かった。
修正前:

修正後:

http://www.cplusplus.com/reference/std/iterator/back_insert_iterator/
まぁ修正されたので良かった。それにしても、何故に誰も指摘しなかったのだろうか。
GNU GLOBAL
http://www.machu.jp/diary/20090307.html#p01
参考に導入。本家からwgetした。殆どそのままでおkだが僕の環境でコンフィグ通そうとしたらcurses library is required but not foundと言われたので多分いらないものも紛れ込んでいるだろうが、
$ sudo apt-get install ncures*
としてconfigureを通した。 後vimプラグインのコピーのパスも若干記事と違ったのでメモ。まぁ2009年の記事だし違って当然。
$ cp /usr/local/share/gtags/gtags.vim $HOME/.vim/plugin $ cp /usr/local/share/gtags/gtags-cscope.vim $HOME/.vim/plugin
GNU GLOBALを使うとGPATH,GRTAGS,GSYMS,GTAGSというファイルが出来る。操作中は良いのだが個人的には操作後は邪魔なので消すことになるだろうと。gtags_cleanとaliasしておいた。
$ echo "alias gtags_clean='ls | egrep -v -E \".cpp$|.hpp$|.java$|.class$|.php$\" | xargs rm'" >> ~/.bashrc
奇妙で怖いC++
2010年の7月頃に納涼! プログラミング怪談大会!というのをやってみたみたいで、もう結構前の事だがまとめを見て一人でうおおとなってますた。
取りあえずまずADL。function arguments typeによってcallするfunctionを探索するというのは分かってたが
template argumentsにfunction typeを渡すとそれのargumentまでassociated namespaceになるんだとか。template argumentsに渡した全てを把握しきってしまうという….。
template argument が関数の型の場合、その引数の型の名前空間もassociated namespaceになるってことかなこれ… http://ideone.com/pLK0g
— でちまるさん(実際かわいい)さん (@decimalbloat) 7月 3, 2010
ゾクゾクするなぁ…。ただし
3.4.2 読んでも基底クラスがtemplate-idのときにそのtemplate argumentsに関するnamespacesがassociated namespacesになるようには読めないのだけれど #proghost
— 梶本裕介さん (@uskz) 7月 3, 2010
念のためComeau C++で試したところやはり最初のやつのfは弾かれた。やっぱGCCのバグっぽい。C++コンパイラのバグに遭遇するのはこれでいったい何度目だろう。 #proghost
— 梶本裕介さん (@uskz) 7月 3, 2010
多分http://ideone.com/C8XnYのxxx::fの事で継承先のtemplate argumentsの関数型内のパラメータでxxx::aaaとしているがそこまではassociated namespacesには入らないということ….なのかな…。なるほどわからん。
次にこんなの。
switch(2) { case 1,2,3: puts(“1 or 2 or 3”); default: puts(“others”); } このコードを Borland C++ でコンパイルおよび実行するとその出力結果は “others” となります。 #proghost
— 道化師HDさん (@wraith13) 7月 3, 2010
あ、break; が抜けてた。ちなみに switch(3) だと “1 or 2 or 3” が出力されます。これはどういう事かと言うと case 1, 2, 3: がどうもカンマ演算子によって case 3: のように解決されてしまっているものと思われます。 #proghost
— 道化師HDさん (@wraith13) 7月 3, 2010
そうなんだ…手元にBorland無いのでアレですが。怖い。
GCCはstd::vector<int> v; for (int i = 0; i < v.size(); ++i)みたいなsignedとunsignedの比較で警告出してくれないので怖い #proghost
— Faith and Braveさん (@cpp_akira) 7月 3, 2010
そうですな… -Wallオプションつければ警告吐いてくれるようにはなりますが、標準でするべき。
次。
え。4.1.2がw まぁ最新だと1と出力されます。次。
これは何も出力されない。僕は何分か考えて理解できた。多分あってると思うので一応解説。まず11行目。これはコンストラクタを呼び出しているように見えるがそうではなくHoge型が戻り値のパラメータ無しローカル関数プロトタイプ宣言という意味になる。これは普通に理解できる。理解に時間がかかったのは12行目。これもコピーコンストラクタが呼び出されるようにも思える。lvalueに対してconst&で受け取ることも可能だ。しかし出力はされない。
h2 はなぜ出力無いのか分からない…。んん…? RT: @melponn: 以前の奴をネタとしてタグ付けておこう http://ideone.com/EmXrO #proghost
— RiSKさん (@sscrisk) 6月 14, 2010
どうなってるのかというと結論からいうとこれも関数宣言とみなされてしまうということ。Hoge型が戻り値の関数宣言となる。でlvalueを渡しているかのように見える部分はそうではなく、Hoge型が戻り値のパラメータ無しの識別子のない抽象宣言子となる。つまり12行目の
Hoge h2(Hoge());
は
Hoge h2(Hoge(*)());
と同じということになる。….のだと思う。そう考えた。あってるのかどうかアレだけどこうとしか僕は思いつきませんでした。
これは…リンクとかの関係だろうと。
….と色々面白かった。
最後にちょっと巡回してADLに関して取り上げている分かりやすい/おもしろいページをば。
- ADL簡単解説:http://d.hatena.ne.jp/faith_and_brave/20071219/1198055224
- using-directive/declarationによるADL回避の整理:http://d.hatena.ne.jp/uskz/20060712/p1
- n2930:Range-based for loopについて:http://cpplover.blogspot.jp/2009/08/n2930-range-based-for-loop.html
一番上が分かりやすく解説されているサイト。二つ目がusing namespace~、usingを用いてADLを回避し意図しない動作をさせる前にエラーを出させるまとめ。最後がRange base forのADLによって起こるC++03との互換性問題とこれからも起こりうるassociated namespaceに入ることによる問題を解説してくださっている。
後ADLをまとめた感じのコード。これなら誰でもわかる気がする。
#include<cstdio>
namespace aho{
struct X{};
template<class T>
void call(T&){std::puts("UHO!");}
};
namespace Foo{
template<class T>
struct foo{};
}
int main()
{
{
Foo::foo<aho::X> x;
call(x);
}
{
Foo::foo<void(aho::X)> x;
call(x);
}
{
aho::X x;
call(x);
}
}
C++怖い。というか皆さん凄すぎて怖い
#追記
@uskzさんが言っていた、なるほどわからんだった件について。書いて検討してみた。
#include<iostream> namespace ns{ struct hoge{}; template<class T> void f(T&){std::cout<<"ns::f()"<<std::endl;} } namespace ns1{ template<class T> struct hoge1{}; template<class T> void f1(T&){std::cout<<"ns1::f1()"<<std::endl;} } namespace ns2{ struct hoge2:ns1::hoge1<void(ns::hoge (*)())>{}; template<class T> void f2(T&){std::cout<<"ns2::f2()"<<std::endl;} } namespace ns3{ template<class T> struct hoge3{}; } int main() { ns3::hoge3<ns2::hoge2> a; //f(a); // ns is not associated namespace f1(a); // ns1 is associated namespace f2(a); // ns2 is associated namespace }
書いた結果を見てみる限りは上記に書いてある認識でよさげ。
コードの下にあるnote内英文の単語とかのexpressionがあっているかは知らない( attainとかってこうやって使う単語なのだろうか。
そういや何日か前にevernoteはじめた。普通の勉強のことやらdisりやらスクラップ化する予定。(既にしている)
mmap()やbrk()などのメモリ確保システムコールには、manページに書かれていない重要なお約束があります。それは「確保されたページはゼロ初期化してからユーザー空間に返さないといけない」ということです。
カーネルは、自分が使わないページにどんなゴミが入っていても気にしないし、ユーザー空間アプリもmalloc()の戻りアドレスがゼロ初期化されていることなんて期待していません。にもかかわらずなぜこれが必要かというと、メモリを確保できるってことは、そのメモリを解放したプロセスが存在していたということを意味するからです。
解放されたメモリには、クレジットカードの番号やパスワード、「いちゃいちゃうふふ」な内容の恥ずかしいメールやらが入っているかもしれません。悪意のあるプロセスがmmap/munmapを繰り返すだけで個人情報が収集できてしまうのは問題ですね。そういう事情もあり、典型的なLinuxデスクトップでは、「ゼロしか入ってないページ」を何千ページも持っています。大きめにバッファをmalloc()するアプリなんて山ほどありますからね。
出典: atmarkit.co.jp
emplace系統のinserterとか
emplace_back_inserterとかあるだろうなーとか思ってたら無かったので作った。こんな感じに普通に。
#include<miko/rall_cout.hpp>
#include<miko/iterator.hpp>
#include<memory>
#include<functional>
#include<algorithm>
#include<vector>
#include<list>
#include<array>
#include<string>
int main()
{
std::array<std::string,4> strings{"hoge","aho","foo","uho"};
std::list<std::string> li;
std::copy(std::begin(strings),std::end(strings),
miko::emplace_front_inserter(li));
miko::rall_cout<<li; // "uho","foo","aho","hoge"
std::vector<size_t> v;
std::transform(std::begin(strings),std::end(strings),
miko::emplace_back_inserter(v),
std::mem_fn(&std::string::length));
miko::rall_cout<<v; // 3,3,3,4
std::vector<std::string> m;
for(auto i:strings)
miko::emplace_inserter(m,m.end())=i;
miko::rall_cout<<m; // "hoge","aho","foo","uho"
}
しかしgccのコンテナあたりを見てみたらC++0xオプション付いてたらpush_backだろうがなんだろうか内部的にはemplace_backしてるのとかあってちょっと…と思った。 後gcc4.6.1ではsetやらあたりにemplaceがまだ無いのか? vectorにはあったが。….なんという。とにかく4.7にしよう。
cplusplus.comへメールをポスト
した。初めてこれ間違ってるんじゃないのメールを英語で送ったのでなんだか緊張したが。
まず自分が間違っていると思っていることがあっているのかどうかに自信が無いというわけではないが初めてなのでこういうの不安でしょうがないのでフォーラムに投稿。falgonが僕。0x35の前はfalgonでやっていたのでそのまま前のものになっているが。
http://www.cplusplus.com/forum/lounge/68479/
falgon (2)
Apr 16, 2012 at 10:15amHello.
I am contribution with this first. And I am a Japanese high school student so,I can’t write English well. sorry….
It is main subject from the following.
It is about the item of back_insert_iterator which has taken this site.
URI:http://www.cplusplus.com/reference/std/iterator/back_insert_iterator/
I think that member initializer of that is wrong.explicit back_insert_iterator (Container& x) : container(x) {}
I think this code is wrong.explicit back_insert_iterator (Container& x) : container(&x) {}
I think that it is the upper code surely.
I am sorry if it has said that it is wrong.
cplusplus.comを今現在2011/4/16に見るとback_insert_iteratorのメンバイニシャライザがアドレスを取っているのではなくオブジェクト自体になってしまっている。なのでそれを指摘してみた。 すると。
firedraco (4874)
Apr 16, 2012 at 10:28amふむ、そうですね。falgonさんは正解だと思います。
ページの下に「Spotted an error? contact us」で、そんなことを伝えられます。
悪い日本語ですみません。私も勉強中ですが・・・。
Should probably put English here…
Hm, I think you are correct.
You can report this kind of stuff using the “Spotted an error? contact us” at the bottom of the page.
Sorry for my poor Japanese. I’m still learning too.
返信きたと思ったらいきなり日本語書いてあってビビったw
一応それに対して僕の返信。
falgon (2)
Apr 16, 2012 at 10:32amI understood.
Thank you.
分かりました。ありがとうございます。
全く悪くはありません。とても上手だと思います:-)
というわけみたいなので早速cplusplus.comにメールを送った。どれくらいで返信くるんだろーう。
何か取りあえず英語はまぁ若干自信あるけどいざネイティブの方へ向けてとかプロフェッショナルな方へ向けて英文を書くとなるとやはりなんだか緊張した。まぁ伝わったみたいなので良かった。
しかしこれ一番はじめの動名詞に少なくともすべきだったな….


旧ブログはこちら