C++0x 9
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/03/27(土) 02:13:56http://www.open-std.org/jtc1/sc22/wg21/
Wikipedia
http://ja.wikipedia.org/wiki/C%2B%2B0x
C++0x
http://pc11.2ch.net/test/read.cgi/tech/1149440647/
C++0x 2
http://pc11.2ch.net/test/read.cgi/tech/1191842951/
C++0x 3
http://pc11.2ch.net/test/read.cgi/tech/1204808027/
C++0x 4
http://pc11.2ch.net/test/read.cgi/tech/1214407525/
C++0x 5
http://pc12.2ch.net/test/read.cgi/tech/1232460649/
C++0x 6
http://pc12.2ch.net/test/read.cgi/tech/1245092251/
C++0x 7
http://pc12.2ch.net/test/read.cgi/tech/1253280377/
C++0x 8
http://pc12.2ch.net/test/read.cgi/tech/1262874195/
0002デフォルトの名無しさん
2010/03/27(土) 02:29:18校長先生。
不老不死も研究していて、350年後に問題点を全て解決した新パラダイムのC++をリリースする事になる。
ただし頭髪は復活しない。
0003デフォルトの名無しさん
2010/03/27(土) 02:33:23○コンセプトさん(幽霊)
かつての痕跡が校内から着々と消されつつあるのを草葉の影で眺めている。
彼女の居た14.10番教室はオバケが出るという噂で閉鎖中。
○ラムダさん
そろそろみんな制服の柄にも慣れたらしく、何も言われなくなってきた。
それどころか、関数さんがラムダさんとお揃いの服を着たいと言いだして物議を醸している。
○右辺値参照さん
ここへ来て急に彼女のせいで校則が変わることになったらしい。
彼女自身はすっかり学園に馴染みつつあるが、聴講生へのイジメが酷くならないか心配している。
○拡張for文さん
服がクリーニングされそうな様子は一向にない。
屋上で「死にたい」と虚ろな目をして呟く様子がよく目撃されている。心配である。
○constexprさん
従姉妹のconstさんと同じく地味な実力派。しかし意外と頭が悪く、単純な話しか理解できない。
「りかーしぶ」の振り回し方次第ではカオスになりかねないので、周りの大人のサポートが大事である。
なぜかstatic_assertさんとは仲が悪い。
○type_traitsさん
最近ますます調子に乗って手が付けられなくなっている。
この間は「私だけで良かったんや!コンセプトなんか最初からいらんかったんや!」と言い放ち
static_assertさんにドロップキックを食らった。
○static_assertさん
暴走するtype_traitsさんとテンプレ部に振り回されて気苦労が絶えない。
姉貴はリリースコンパイルで逃げ出せるからいいよなーと愚痴りつつ仕事を真面目にこなす苦労人。
0004デフォルトの名無しさん
2010/03/27(土) 02:33:55「ねえねえ配列さん、なんでコンストラクタさんと仲良くしないの?」「新入生が来たら仲良くするよ!」
定番と化しつつあるこのやりとりの繰り返しで過剰な期待が勝手に高まりつつある。
本人はあまり何も考えていない。
○テンプレート可変長引数さん
テンプレ部にはすっかり馴染んだが、相変わらず一般生徒からは「あんた何の役に立つの?」
と受けが悪い。最近はもう面倒臭いのでいちいち説明するのをやめた。
○autoさん
苦楽を共にしたregisterさんはついにD組に落第してしまった。
しかし一報を聞いたautoさんの反応は「ふーん、そう」という素っ気ないものだった。
昔の彼女はもういない。
○decltypeさん
一人前の型としての振る舞いも身につけ、いよいよ活躍が期待される所だが、
服の違いで性格が変わる悪癖はまだ直っていない。
いつか必ず問題を起こすと一部の先生からマークされている。
○ユーザー定義リテラルさん
「まだいたのか」と先生に暴言を吐かれ、体育館の陰で泣いていた。
○nullptrさん
誰もNULLさんと見分けが付かないので、既にこっそり通学していると噂されている。
○long longさん
intさんに「ほら!あんたはこっちでしょ!」と間違えて上級生のクラスに連れて行かれた。
○Raw String Literalさん
「お前全然Rawじゃねえじゃん」という状況は、トライグラフさんが譲る形で解決しつつある。
ちなみにトライグラフさんはしぶとく落第を免れ続けてるらしい。
0005デフォルトの名無しさん
2010/03/27(土) 02:34:55コンテナ部とも仲良くできます!あの女とは違うんです!と自分を売り込んでいるが、
みんなのauto_ptrさんのトラウマはなかなか払拭しきれず、苦戦している。
○shared_ptrさん
ライブラリ部が誇るご存じ優等生中の優等生。早く来てくれ。
○unordered_map・unordered_setさん姉妹
名字はhashが良かったが、大人の事情で付けられなかった。
おかげでmap・setさん姉妹との違いをいちいち説明する羽目に。
○Regular expressionさん
Perl学園ではバカにされていたが、ここでは大歓迎。
満更ではないものの、学園の行く末に一抹の不安を抱いている。
○Atomic operationさん
彼女と話していて業を煮やしたとある生徒が「こまけえこたぁいいんだよ!」と叫んで飛び出し
10分後に未定義動作にボコボコにされて帰ってきた。
○threadさん
最大のライバルであるpthreadさんを蹴落とすべく日々努力しているが、
親友のラムダさんがpthreadさんとも親しくなりそうで焦っている。
○System error supportさん
ユーザー定義リテラルさんとよく一緒に弁当を食べている。
○progress_displayたん
System error supportさん達と一緒に弁当を食べようとしたら断られた。
0006デフォルトの名無しさん
2010/03/27(土) 03:43:10他の学校に、かならず一人はいる娘なので、学校側としても、しかたなく、入校させた。
服のセンスが、lambdaさんに負けず劣らず、相当悪い。
lambdaさんと、かぶっている帽子が、見る角度によっては、似ていることがあり、少々問題になっている。
lambdaさんとの区別は、帽子以外で判断すべきだと叫ばれている。
○noexceptちゃん
入学試験の選考の最後になって、急に合格した赤ちゃん。
豪華にも、独自の制服を作ってもらった。
○Inheriting Constructorさん
地味にできる娘。何で今までいなかったのか、不思議に思われている。
○__VA_ARGS__さん
クラス分けで、プリプロセッサ組に通うことになった娘。
プリプロセッサ組は、落ちこぼれだとも、最強だともいわれている、変わったクラス。
その外見はあまりにもブサイクだが、密かにファンもいるらしい。
○exportさん
進級できなかった。
○Exception specificationさん
進級できなかったが、彼女の産んだ、まだ一歳にもならない赤ちゃんが、いきなり入校してきた。
0007デフォルトの名無しさん
2010/03/27(土) 11:15:210008デフォルトの名無しさん
2010/03/27(土) 11:15:470009デフォルトの名無しさん
2010/03/27(土) 12:15:0236(ry
0010デフォルトの名無しさん
2010/03/27(土) 12:51:430011デフォルトの名無しさん
2010/03/27(土) 12:57:110012デフォルトの名無しさん
2010/03/27(土) 13:22:54type_info君と仲が良いらしい。
噂では、いくとこまでいったとかいってないとか。
ただし、開校前のクラス分けで離ればなれになってしまった。
・System error supportさん
いじめられて転校してきたらしい。
たぶん、どの学校でも相手にされない子。
ほとんどの学校には、学校独自の、もっとマシな子がいるし。
・Tupleさん
博愛平等主義者。ほとんどのクラスメートと仲が良い。
・Binder姉妹(bind1st,bind2nd)
落第。一応、まだ学校にはいる。
・Function template bindさんと、Polymorphic function wrapperさん
二人とも、とても頭が良い。
なんでも、「ぶーすと」という一流の進学校から転校してきたらしい。
あまりに成績が良かったために偏差値を押し上げて、Binder姉妹を落第させる原因をつくった。
・Time utilitieさん
2038年問題も3000年問題も大丈夫と豪語。
・Compile-time rational arithmetic君
Time utilitieさんと仲が良いらしい。
0013デフォルトの名無しさん
2010/03/27(土) 14:25:020014デフォルトの名無しさん
2010/03/27(土) 21:17:02>lambdaさんとの区別は、帽子以外で判断すべきだと叫ばれている。
まあ、校舎が違うからいいんでないの?
0015デフォルトの名無しさん
2010/03/28(日) 17:28:01あーだこーだ言ってるけど、結局ひよって、あとからコンストラクトする方法を用意してるんじゃん
だったら普通にp->Hoge();を使わせてくれよって思う
placementのわかりにくい仕様よりも、メモリ領域をキャストして普通にコンストラクタ呼ぶほうが直感的で理解しやすいし
0016デフォルトの名無しさん
2010/03/28(日) 17:33:14意図的に面倒くさくしてんだよ
0017デフォルトの名無しさん
2010/03/28(日) 17:39:160018デフォルトの名無しさん
2010/03/28(日) 21:50:05lamda を返したときの lambda の型はどう書くんですか?
つか, 返る型で dispatch してくれるようになるんだっけ???
0019デフォルトの名無しさん
2010/03/28(日) 21:57:120020デフォルトの名無しさん
2010/03/28(日) 21:57:480021デフォルトの名無しさん
2010/03/28(日) 22:17:09その auto が信用できてないんだが
関数の戻り型ってめんどう見てくれるようになたんだっけか?
0022デフォルトの名無しさん
2010/03/28(日) 22:20:170023デフォルトの名無しさん
2010/03/28(日) 22:20:27信用できないって、コンパイラは右辺値の型を正確に求められるんだからautoがミスることはなくね?
0024デフォルトの名無しさん
2010/03/28(日) 22:22:030025デフォルトの名無しさん
2010/03/28(日) 22:23:180026デフォルトの名無しさん
2010/03/29(月) 00:56:28文法的に無理ですか、そうですか。でもウザイよね。
0027デフォルトの名無しさん
2010/03/29(月) 00:57:32クラス書いてコンパイルすると5割くらいはそのエラーだな。。。
0028デフォルトの名無しさん
2010/03/29(月) 01:20:330029デフォルトの名無しさん
2010/03/29(月) 01:41:10配列とか構造体の初期化データの末尾とか?
int a[] = { ... }; ←コレ
0030デフォルトの名無しさん
2010/03/29(月) 01:55:490031デフォルトの名無しさん
2010/03/30(火) 16:13:43http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/#mailing2010-03
0032デフォルトの名無しさん
2010/03/30(火) 20:49:22例外指定あぼーんキタ━━━━━━━(゚∀゚)━━━━━━━!!!
noexceptキタ━━━━━━━(゚∀゚)━━━━━━━!!!
ナントカvalue地獄キタ━━━━━━━(゚∀゚)━━━━━━━!!!
decltype超強化キタ━━━━━━━(゚∀゚)━━━━━━━!!!
デフォルトムーブコンストラクタ&代入演算子キタ━━━━━━━(゚∀゚)━━━━━━━!!!
Unified function syntaxコネ━━━━━━━('A`)━━━━━━━!!!
0033デフォルトの名無しさん
2010/03/30(火) 21:10:510034デフォルトの名無しさん
2010/03/30(火) 21:32:48> ナントカvalue地獄
wwwwww
0035デフォルトの名無しさん
2010/03/30(火) 21:33:420036デフォルトの名無しさん
2010/03/30(火) 21:48:520037デフォルトの名無しさん
2010/03/30(火) 22:08:01exportはともかく無例外指定は使ってるコード多いと思うのだが。
0038デフォルトの名無しさん
2010/03/30(火) 22:31:27これからはnoexceptを使いましょう
でもexportはD行きをすっ飛ばしていきなり抹殺された
Comeau涙目
0039デフォルトの名無しさん
2010/03/30(火) 22:33:540040デフォルトの名無しさん
2010/03/30(火) 22:36:190041デフォルトの名無しさん
2010/03/30(火) 22:37:170042デフォルトの名無しさん
2010/03/30(火) 22:40:06throw()は違反するとstd::unexpected()を呼ぶ
noexceptはstd::terminate()を呼ぶ
多分違いはそれだけ
0043デフォルトの名無しさん
2010/03/30(火) 22:43:36> xvalue(eXpiring value)
> rvalue referenceに束縛した結果を、xvalueという。これは、eXpiring valueである。rvalue referenceというのは、valueのリソースをmoveするのに使われることから、このように名付けられた。
> lvalue
> 以前と変わらず。
> prvalues(pure rvalues)
> 既存のrvalue、つまり、C++03の意味のrvalueを、prvaluesという。
> rvalues
> xvalueとprvaluesをあわせて、rvaluesという。
> glvalues(generalized lvalue)
> xvalueとlvalueをあわせて、glvaluesと言う。
> lvalue, rvalueを、左辺値、右辺値などというのは間違っているように、これらは、あえて訳さない方が良い。
2周読んでも今ひとつしっくりこねぇwwwwwww
0044デフォルトの名無しさん
2010/03/30(火) 22:45:580045デフォルトの名無しさん
2010/03/30(火) 22:56:37から始まるくだりか。
確かに分かりやすいっちゃ分かりやすい
…ような気がするだけヽ(`Д')ノウワアアン
0046デフォルトの名無しさん
2010/03/31(水) 00:29:22class Base{
public:
Base(){}
~Base() { End(); }
private:
virtual void End() = 0;
};
ってことがやりたいんだけど・・・。
End()では、newした領域deleteしたり、なんやかんやと、
派生クラスごとに異なった処理します。
0047デフォルトの名無しさん
2010/03/31(水) 00:32:380048デフォルトの名無しさん
2010/03/31(水) 00:46:06~Baseが呼ばれるころには派生クラスのデストラクタが呼ばれている。その状態で仮想関数を呼ぶと未定義状態になる。
おとなしく、各派生クラスのデストラクタでdeleteするように設計を見直す。殆どの場合はそれで解決する。
0049デフォルトの名無しさん
2010/03/31(水) 00:49:540050デフォルトの名無しさん
2010/03/31(水) 01:10:39え?コンパイルエラーにならないの?
わざわざキーワード追加してそのザマなの?
っていうか unexpected() が terminate() になったからって誰が喜ぶの?
0051デフォルトの名無しさん
2010/03/31(水) 01:14:13知るか
俺だって何かの間違いだと思って何度も読み直して失望したんだ
0052デフォルトの名無しさん
2010/03/31(水) 01:24:50コンパイルエラーにならないってマジ??使えねー 絶望した。
0053デフォルトの名無しさん
2010/03/31(水) 01:38:280054デフォルトの名無しさん
2010/03/31(水) 01:47:53void bar() noexcept(false) { throw 42; } //投げると表明してる関数
void f() noexcept { foo(); } //well-formed(!?)
void g() noexcept { bar(); } //well-formed(!!!???)
void h() noexcept { throw 1; } //well-formed(笑)
なんだこの哀れな機能は……
0055デフォルトの名無しさん
2010/03/31(水) 03:03:570056デフォルトの名無しさん
2010/03/31(水) 06:40:040057デフォルトの名無しさん
2010/03/31(水) 11:10:17>>52
クソバカ共みっけw
0058デフォルトの名無しさん
2010/03/31(水) 11:14:51> ただし、exportというキーワードは、予約語として残す。
だれか、exportキーワードを便利に活用する案を出そうぜ
0059デフォルトの名無しさん
2010/03/31(水) 11:16:240060デフォルトの名無しさん
2010/03/31(水) 11:18:30> Raw string literalは、本当に、Rawになる。
> つまり、UCNのエスケープシーケンスや、トライグラフ、プリプロセッサの、行末に\を指定することによる、
> 改行の削除の影響すら、受けなくなる。
> char const * ptr = R"delimiter(\u1234
> \
> )delimiter" ;
> これは、従来の文字列リテラルでは、
> "\\u1234\n\\\n"
> と同じである。つまり、UCNも気にしなくていいし、
> プリプロセッサによる改行の削除の影響も、気にしなくてよくなる。
> ついに、本当の意味でRawになった。
プリプロセッサによる改行の削除の影響を受けないって、すごすぎねぇか?
0061デフォルトの名無しさん
2010/03/31(水) 11:19:56賢い人には unexpected() が terminate() になったら何がうれしいのかわかるの?
0062デフォルトの名無しさん
2010/03/31(水) 11:21:49行連結は Raw string literal を解釈するフェーズより前のはずなんだが、
どうなってるんだろう?
0065デフォルトの名無しさん
2010/03/31(水) 11:28:35じゃあ noexcept で何がうれしいのかわかってる人はいないってこと?
0066デフォルトの名無しさん
2010/03/31(水) 11:30:590067デフォルトの名無しさん
2010/03/31(水) 11:32:45え?だって例外発生したら terminate() 呼ばなきゃいけないんでしょ?
今まで unexpected() 呼ばなきゃいけなくて余計なコードが出てたのと同じじゃないの?
この違いに基づいてどういう最適化ができるの?
0068デフォルトの名無しさん
2010/03/31(水) 11:33:45<: :> を使用する時どうするのかと思ってたが解決したな。
0069デフォルトの名無しさん
2010/03/31(水) 11:37:42いままで規格上 throw() で最適化することは期待されてなかったんだから
前進したのは事実だろう。terminate() 云々はコストはほぼないって感じらしい。
0070デフォルトの名無しさん
2010/03/31(水) 11:40:58少しは足りない脳で考えて見ろよ
0071デフォルトの名無しさん
2010/03/31(水) 11:46:51noexceptの原論文を読みなよ。
リアクションが馬鹿っぽいから説明してやる気にはなれない。
>>54
それが意味がある局面だってある。
0072デフォルトの名無しさん
2010/03/31(水) 11:46:55throw[ \t]*([ \t]*)[ \t]*
をgrepしてnoexceptに書き換えていけばいいの?
0073デフォルトの名無しさん
2010/03/31(水) 11:47:44今までだって throw() が付いてる関数から呼び出してる関数が全部 throw() なら
unexpected() の呼び出しコードは不要、といった類の最適化はできたでしょ?
不測の例外発生に伴って terminate() を呼ぶコストが unexpected() を呼ぶコストと
違うのは何によるのかもわかってないのに「最適化に役立つ」とか言い切っちゃって良いの?
0074デフォルトの名無しさん
2010/03/31(水) 11:48:02N2855 noexceptについて - xyuyuxの日記
ttp://d.hatena.ne.jp/xyuyux/20090630/1246360766
0075デフォルトの名無しさん
2010/03/31(水) 11:48:46俺はたぶん職を失う
0076デフォルトの名無しさん
2010/03/31(水) 12:11:09>>71
0077デフォルトの名無しさん
2010/03/31(水) 12:13:05http://cpplover.blogspot.com/2010/03/blog-post_31.html
0078デフォルトの名無しさん
2010/03/31(水) 12:41:34わかったよ。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html#an-optimization-hint
以下の2点が throw() とは違う。
- noexcept 違反の場合、 terminate() が呼ばれるまでにスタックの巻き戻しが
済んでいるかどうかをを実装依存とすること。
- xxx_nothrow_xxx<> メタ関数によって情報にアクセスできること。
つまり >>42 を素直に信じて考えてしまったのが間違いだったわけだ。ごめんよ。
前者については、ほんとうにこのスタックの巻き戻しが最適化の妨げだったのか
(暗黙のハンドラの存在が問題だったのではないのか?)という点で疑問が残るが、
後者については大幅な状況の改善が期待できる。
任意の式について例外を投げうるかどうか判定する noexcept 演算子なんてあるんだな。
・・・あれ?
これと同じことを関数の中身についてコンパイラが勝手にやってくれればいいだけなのになぁ。
↓こんなのがイディオムになっちゃったりするのかなぁ・・・
#define FUNCTION_BODY_EXPR \
expr1,\
expr2,\
expr3,\
...
void f() noexcept { FUNCTION_BODY_EXPR; }
static_assert(noexcept(FUNCTION_BODY_EXPR), "noexcept violation");
0079デフォルトの名無しさん
2010/03/31(水) 12:48:36unexpected()とterminate()の違いを理解してないね。
0080デフォルトの名無しさん
2010/03/31(水) 12:51:27例えばベクトル演算系のクラスライブラリ書いてる時。
0081デフォルトの名無しさん
2010/03/31(水) 12:54:17008278
2010/03/31(水) 12:59:47xxx_nothrow_xxx<> は noexcept 演算子で定義されてて、 noexcept 演算子は
例外指定については throw() も noexcept(true) も同じになるんで、 >>78 の2点目は
違わないね。
例外仕様としての noexcept よりも演算子としての noexcept のほうが肝心な気が
してきた。
0083デフォルトの名無しさん
2010/03/31(水) 13:25:41リフトしまくって計算量は増えるわ、情報は劣化するわ。
0084デフォルトの名無しさん
2010/03/31(水) 13:39:440085デフォルトの名無しさん
2010/03/31(水) 13:45:54× 例外は
○ 例外仕様は
かな?
0086デフォルトの名無しさん
2010/03/31(水) 17:57:09noexcept演算子はthrow?とかじゃダメだったのかなぁ
ラムダ用の予約語はあんなに強硬に反対してたのに、こんな下らない機能に予約語とか意味が分からない
0087デフォルトの名無しさん
2010/03/31(水) 18:01:28nothrow_move_constructorなどなど、非常に重要な概念。
下らないなんてとんでもない。
0088デフォルトの名無しさん
2010/03/31(水) 18:03:27008987
2010/03/31(水) 18:05:130090デフォルトの名無しさん
2010/03/31(水) 18:09:41そんな都合で決めないで欲しいけど
0091デフォルトの名無しさん
2010/03/31(水) 18:12:02void hoge() ~throw; //投げないらしい
これでいいじゃん
それか!throwとか
0092デフォルトの名無しさん
2010/03/31(水) 18:22:21デストラクタにならって~throwとか?www
>>90
> 時間がないから、構文上のトラブルを避けるためにぶち込んだんだろうな
> そんな都合で決めないで欲しいけど
激しく同感。
いいよ、もう来年まで持ち越してもいいからちゃんとまともにしてくれ!
0093デフォルトの名無しさん
2010/03/31(水) 18:25:03noexcept(false)って何だよ二重否定かよ
0094デフォルトの名無しさん
2010/03/31(水) 18:26:31あるいは、そのクラスから派生クラスを作ろうとしたときもインターフェイスに強い制限をかけることになる。
とHarb Sutter 氏がおっしゃっていますが、
それはnoexceptでも同じじゃねえか?
何が良いの???
0095デフォルトの名無しさん
2010/03/31(水) 18:27:27宣言の方でexceptだと困る、
operatorの方も同じ予約語にしたい、
こんな感じでは?
0096デフォルトの名無しさん
2010/03/31(水) 18:32:25つ 14.7.2.2
0098デフォルトの名無しさん
2010/03/31(水) 18:53:58メモリ確保などの、失敗がありえない&致命的な処理で失敗したら即ログ吐いてabort。
これでいいでしょ。
0099デフォルトの名無しさん
2010/03/31(水) 19:17:28そのうちBOOST_NOEXCEPT( )みたいなマクロが流行るんじゃない?
0100デフォルトの名無しさん
2010/03/31(水) 19:24:560101デフォルトの名無しさん
2010/03/31(水) 19:45:14そもそもnoexceptを記載する場所と throw()を記載する場所って同じなのか?
0102デフォルトの名無しさん
2010/03/31(水) 20:22:030103デフォルトの名無しさん
2010/03/31(水) 20:23:570104デフォルトの名無しさん
2010/03/31(水) 20:51:242.CD (Committee Draft): ISOとしての承認過程スタート
3.CDに対し各国規格団体による投票
4.投票時のコメントを考慮して作業部会で修正
5.FCD (Final CD)
6.FCDに対し各国規格団体による投票
7.投票時のコメントを考慮して作業部会で修正
8.FDIS (Final Draft International Standard)
9.FDISに対し各国規格団体による投票
10.成立
今5から6へ移行中
0106デフォルトの名無しさん
2010/03/31(水) 20:58:02既に来年かwwww
0107デフォルトの名無しさん
2010/03/31(水) 20:58:310108デフォルトの名無しさん
2010/03/31(水) 20:59:500109デフォルトの名無しさん
2010/03/31(水) 21:56:280110デフォルトの名無しさん
2010/03/31(水) 22:21:20デストラクタをprivateにして、
明示的にEnd()を呼ばせるようにしたら?
0111デフォルトの名無しさん
2010/03/31(水) 22:24:06良くある実装だけど何となくウザイ…。
0112デフォルトの名無しさん
2010/03/31(水) 22:26:02いちいちEnd呼ぶのまんどくせ。
でもいい案思いつかね。
0113デフォルトの名無しさん
2010/03/31(水) 22:43:57例外安全性を宣言したつもりが、キャッチもできずにクラッシュしてしまう。安全にするつもりが超危険。なんて罠?
throw()の関数は例外を投げる可能性があればコンパイルエラーになるほうが便利じゃね?そうであればthrow()はすごく強力だ。VC8は例外仕様を無視するからキャッチするけど、この反規格の判断は正解かもね。
#include <exception>
#include <iostream>
void func1()
{
throw std::exception();
}
void func2()throw()
{
func1(); //ここでコンパイルエラーが出れば丸く収まる。
}
int _tmain(int argc, _TCHAR* argv[])
{
try
{
func2();
}
catch(...)
{
std::cout<<"きゃっち"<<std::endl;
}
return 0;
}
0114デフォルトの名無しさん
2010/03/31(水) 23:00:22「俺の書いたコードを信用して! もし間違ってたら殺していいよ!」
というプログラマの自己責任による表明だから。
コンパイルエラーが出れば便利、てのは同意だけど。
0115デフォルトの名無しさん
2010/03/31(水) 23:02:06assertとstatic_assertみたいにすればよかったんじゃね
0116デフォルトの名無しさん
2010/03/31(水) 23:08:22C++には関数ポインタがある。
だから、コンパイル時には実行時にどのコードが走る可能性があるか決定できない。
つーことは、コンパイル時に例外が投げられる可能性があるか無いかは判断できない。
0117デフォルトの名無しさん
2010/03/31(水) 23:10:44適当なポインタを適当な関数型にキャストして適当に()書いたらそこのコードが走るような言語だぞ。
あまり無理を言うな。
0118デフォルトの名無しさん
2010/03/31(水) 23:29:28> 「俺の書いたコードを信用して! もし間違ってたら殺していいよ!」
> というプログラマの自己責任による表明だから。
分かりやすいな、例え。
0119デフォルトの名無しさん
2010/03/31(水) 23:36:56俺にも分かるようにしてくれ!
0120デフォルトの名無しさん
2010/03/31(水) 23:37:28noexceptからはnoexceptしか呼び出せない、とかにする必要があるな。
これはちょうど今のconstと同じ扱いになるな。
てことは、下位互換のためにnoexcept_castが追加されるな。
noexcept関数から、例外を投げないことが分かっているnoexcept指定の無い関数を呼び出す場合は、
noexcept_castをしてください、みたいな。
ウザいな。
012174
2010/03/31(水) 23:40:33つまり>>74で言われていたみたいにcv修飾子みたいにするわけですね。
・・・ちょっと待て!
テンプレートの時にどう解決するんだそれは!?
メタプログラミングが「前提」となるなんていやだぞ
C++0xを実装できるコンパイラが少なくなるようでは、
「規格どおりに書いたのに移植性が全然ありません」
とかC++を使う意義が無くなってしまうじゃないか!
0122デフォルトの名無しさん
2010/03/31(水) 23:49:53そうなると、テンプレートは、noexceptとそうじゃない奴の二種類ずつメソッドを用意する事になるな。
constとの組み合わせもあるから、沢山定義しないといけないね(笑
0123デフォルトの名無しさん
2010/04/01(木) 01:01:33templete<typename T>
void swap(T& a, T& b) noexcept(has_nothrow_copy_construcor<T>::value && has_nothrow_copy_assign<T>::value)
{ T x(a); a = b; b = x; }
0124デフォルトの名無しさん
2010/04/01(木) 01:06:090125デフォルトの名無しさん
2010/04/01(木) 04:24:39> 2.2 Phases of translation [lex.phases] p3
> Within the r-char-sequence of a raw string literal, any transformations
> performed in phases 1 and 2 (trigraphs, universal-character-names, and
> line splicing) are reverted.
巻き戻すって、一旦行連結しちゃったらもうどこに改行があったかなんて
わからないんじゃないの?どういう実装を想定してるんだろう?
012660
2010/04/01(木) 07:46:20> 巻き戻すって、一旦行連結しちゃったらもうどこに改行があったかなんて
> わからないんじゃないの?どういう実装を想定してるんだろう?
そう、俺もそう思って>>60の発言になった。
びっくりだわー
0127デフォルトの名無しさん
2010/04/01(木) 09:34:170128デフォルトの名無しさん
2010/04/01(木) 11:40:080129デフォルトの名無しさん
2010/04/01(木) 19:10:02#include"foo.h"
)EOS";
phase2が終わった直後にfoo.hを書き換えるとどうなるの?
ねえねえ
0130デフォルトの名無しさん
2010/04/02(金) 09:38:56実のところ "Phases of translation" は as is であって、実際のコンパイル動作とは関係ない。
というか馬鹿正直に守っているコンパイラは事実上無い。
>phase2が終わった直後にfoo.hを書き換えるとどうなるの?
言語仕様の外。そういうときの動作は規定していない。
とくにこまらないだろ。
0131デフォルトの名無しさん
2010/04/02(金) 09:58:13distcc や ccache などのツールはプリプロセスがコンパイルと分離された
フェーズであることに依存して、一旦プリプロセス結果を生成し、それを
コンパイルは別の独立したプロセスに投げたりする。
プリプロセスまでは gcc などの無償利用できるプリプロセッサを使い、
コード生成は専用のクロスコンパイラを使うようなことも、 Raw String Literal の
仕様さえなければこれまでどおり可能。
やっぱり心配だ。
0132デフォルトの名無しさん
2010/04/02(金) 10:12:19それ include されるの? 単に「#include"foo.h"\n」って文字列に解釈されるんじゃないの?
0133デフォルトの名無しさん
2010/04/02(金) 13:25:02doubleで10のN乗をmath.hのPowで実装したんだが、N=100位で何でか細かい誤差が出る。
doubleから、指数部を切った値(=残った仮数部)をとる方法無いだろうか。なるべく誤差の出ない方法で・・・。
Decimal& operator =(double Val){
Sign_ = (Val<0)? false:true;
if(Sign_ == false) Val*=-1;
Digit_=static_cast<long long int>(log(Val)/log(10.0));//これで、Log10(Val)になるらしい。
int VD= static_cast<int>((log(static_cast<long double>(Val))/log(10.0)));
int ID= static_cast<int>((log(static_cast<double>(static_cast<unsigned int>(-1)))/log(10.0)));
double Pow = (VD>=ID) ? pow(10.0,(VD-ID)):1;
Value_ = Val / Pow;
return (*this);
}
0134デフォルトの名無しさん
2010/04/02(金) 16:20:07お邪魔しました〜。
0135デフォルトの名無しさん
2010/04/02(金) 16:53:060x だけで探せるでしょ。
>>133
定義域を明確にして↓のスレに行ったほうがいい。
【FPU】 浮動小数点 【SSE】
http://pc12.2ch.net/test/read.cgi/tech/1199424344/l50
ム板ではどのスレでも三時間で答えが来る確率は低いが。
0136デフォルトの名無しさん
2010/04/02(金) 18:15:26一旦includeしてから"revert"するんでしょ
125によると
0137133
2010/04/02(金) 20:13:26ぁぃゃ〜。しまったです。
普通の質問スレと勘違いしてしまいしましたです。
ホントに申し訳ない。Orz
それと、誘導ありがとうです。
0138デフォルトの名無しさん
2010/04/02(金) 21:48:36できますか?
a *= bの行列演算では、裏側で一時オブジェクトを導入しない限り
正しい計算結果は得られないはずですが( a += bとはわけが違う )、
右辺値参照でもこれと同じような事は起きませんか?
「いや、C=prod(A,B)のような使い方しか想定してない。」と言うのなら
仕方ないですが。
※「右辺値参照」の右辺値という言葉はかえってわかりにくいと思うの
ですが、皆さんはどうですか?
0139デフォルトの名無しさん
2010/04/02(金) 22:55:150140デフォルトの名無しさん
2010/04/02(金) 23:49:290141デフォルトの名無しさん
2010/04/02(金) 23:51:290142デフォルトの名無しさん
2010/04/03(土) 00:52:24> スレタイから C++ とったほうがいいかもね。
> 0x だけで探せるでしょ。
しかし
C++0xからC++をとって、その上2009年中に終わらなかったのだから0xを取ると
何もなくなってしまうじゃないかw
0144デフォルトの名無しさん
2010/04/05(月) 01:18:540145デフォルトの名無しさん
2010/04/05(月) 07:40:06> unique_ptrってコンテナに使っても大丈夫だったのか
C++0x - Wikipedia, the free encyclopedia
ttp://en.wikipedia.org/wiki/C%2B%2B0x
unique_ptr will be provided as a replacement for auto_ptr which will be deprecated.
It provides all the features of auto_ptr with the exception of unsafe implicit moving from lvalues.
Unlike auto_ptr, unique_ptr can be used with the C++0x move-aware containers.
だとさ。
0146デフォルトの名無しさん
2010/04/05(月) 10:27:190147デフォルトの名無しさん
2010/04/05(月) 10:51:450148デフォルトの名無しさん
2010/04/05(月) 11:24:120149デフォルトの名無しさん
2010/04/05(月) 11:27:170150デフォルトの名無しさん
2010/04/05(月) 11:39:360151デフォルトの名無しさん
2010/04/05(月) 20:22:09stdに入っているauto_ptrと、boostに入っているshared_ptrとで
どっこいどっこいぐらいかな。
stdにshared_ptrが入れば無敵。
ところで何でscoped_ptrがstdに入らなかったの?
最も軽いスマポだったりしない?
0152デフォルトの名無しさん
2010/04/05(月) 20:45:590153デフォルトの名無しさん
2010/04/06(火) 02:16:360154デフォルトの名無しさん
2010/04/06(火) 21:36:550155デフォルトの名無しさん
2010/04/06(火) 21:40:06ポインタを使う分にはinline化が効くから生のポインタと同じ
0156デフォルトの名無しさん
2010/04/06(火) 21:43:22オーバーヘッドはない。そう実装されている。
0157154
2010/04/06(火) 21:46:07ありがとう。
なんか変なメンバを持ってたりすると無駄に重くなるかな、と心配だった。
(もちろんboostやstdの有名スマポの話です。)
> 必要な機能に必要十分なものを使えば、オーバーヘッドはない。
なるほど。つまり単にstd::auto_ptrで済む所にstd::tr1::shared_ptrを使用すると
無駄な参照カウント分が無駄なオーバーヘッドとなるが、
それは必要十分じゃないから、ってことね。
0158デフォルトの名無しさん
2010/04/07(水) 00:19:47そんなんでなけりゃスマポのオーバーヘッドなんて何でもないよ
0159デフォルトの名無しさん
2010/04/07(水) 01:10:46auto_ptrのムーブ(=演算子)はshared_ptrではswapを使うのでやはり参照カウンタのオーバーヘッドが無い。
0160デフォルトの名無しさん
2010/04/07(水) 01:12:120161デフォルトの名無しさん
2010/04/07(水) 01:13:090162デフォルトの名無しさん
2010/04/07(水) 01:18:00auto_ptrのムーブ(=演算子)は(何、auto_ptrのムーブの話?)shared_ptrでは…(おいおい、auto_prtのムーブってshared_ptrでも使われるのか?w)
0163デフォルトの名無しさん
2010/04/07(水) 07:26:02日本語読解上級者コース
0164デフォルトの名無しさん
2010/04/07(水) 08:31:58(使わないかも知れない) 多くの機能をデフォルトで提供する,という設計思想ではないですかね?
具体的には, deleter の動的指定, thread-safe as an int のための排他処理, weak_ptr への対応とか.
もちろんこれらのオーバーヘッドが必要になる文脈は限定的ですけれど.
0165デフォルトの名無しさん
2010/04/07(水) 08:51:09カウンタも shared 分と weak 分と 2 つあるし
ふつーに実行時オーバーヘッドあるだろ
0166デフォルトの名無しさん
2010/04/07(水) 09:47:46> deleter の動的指定, thread-safe as an int のための排他処理
使わない時もオーバーヘッドになる?
0167デフォルトの名無しさん
2010/04/07(水) 11:18:370168デフォルトの名無しさん
2010/04/07(水) 13:42:51deleter の動的指定にかかるコストは shared_ptr オブジェクトの生成と破棄の際に,
排他処理は shared_ptr オブジェクトのコピーの際に,それぞれ常に付きまとうと思います.
もちろん,これらのオーバーヘッドが shared_ptr を利用する際の全体的なコストから見て
どの程度有意かはまた別の問題だと思いますけれど.
0169デフォルトの名無しさん
2010/04/07(水) 18:46:51安心して使いたまへ
0170デフォルトの名無しさん
2010/04/07(水) 19:34:53unique_ptrはすごいぞ
最適化かけたらアセンブリ出力にunique_ptrが居ねえ
0171デフォルトの名無しさん
2010/04/07(水) 19:36:010172デフォルトの名無しさん
2010/04/07(水) 21:56:44そういうのオーバーヘッドって言わないでしょ。
0173デフォルトの名無しさん
2010/04/07(水) 22:00:35オーバヘッ!
0174デフォルトの名無しさん
2010/04/07(水) 23:01:02全然関係ないけど油をそそいでみる
0175デフォルトの名無しさん
2010/04/08(木) 08:02:40カオスすぐる。
0176デフォルトの名無しさん
2010/04/08(木) 08:16:47ttp://homepage1.nifty.com/herumi/prog/cppwg.html
0177デフォルトの名無しさん
2010/04/08(木) 11:09:07hoge[1][2][3] = h;みたいなのをエミュレートするのに余計なオーバーヘッドのコストを支払うのは嫌だ
0178デフォルトの名無しさん
2010/04/08(木) 11:19:15operator()のオーバーロードでいいじゃん。
オーバーロード以前にhoge[1, 2, 3]っていう文法ないんだし。
0179デフォルトの名無しさん
2010/04/08(木) 11:22:25オーバーヘッドは防げないか?コーディングが面倒なだけで。
たとえばどんな hoge[1][2][3] の実装を想定してるの?
0180デフォルトの名無しさん
2010/04/08(木) 11:26:21hoge(1, 2, 3) = h;
でもこれって見ため最高に気持ち悪くないか?
fortranとかで慣れてる人はいいのかもしれないけど
メンバへの参照アクセスは[]で縛りたいって思うわけよ
0181デフォルトの名無しさん
2010/04/08(木) 11:40:59(1, 2, 3)も同じ理由からあまり推奨できない
0182デフォルトの名無しさん
2010/04/08(木) 11:48:31次元Nを引数にしたテンプレートのプロクシクラスで、operator[]で再帰的にうんぬんする感じ
整数の代入*次元数+
整数を引数にプロクシの参照を返すoperator[]呼び出し*(次元数-1)+
整数のポインタを引数にメンバへの参照を返す生のアクセサ(atメンバ)呼び出し*1
頑張ったけどこれだけ実行時コストがかかってしまう
0183デフォルトの名無しさん
2010/04/08(木) 11:59:28プロクシの参照がコンパイル時に全部解決されれば、実行時のコストは無いよね?
0184デフォルトの名無しさん
2010/04/08(木) 12:36:070185デフォルトの名無しさん
2010/04/08(木) 14:42:16あんまりピリピリするな。
0186デフォルトの名無しさん
2010/04/08(木) 19:23:140187デフォルトの名無しさん
2010/04/08(木) 21:05:17GCCは非対応にするのかな
GPLにはできんよなぁ
0188デフォルトの名無しさん
2010/04/08(木) 21:55:430189デフォルトの名無しさん
2010/04/08(木) 21:58:240190デフォルトの名無しさん
2010/04/08(木) 22:14:330191デフォルトの名無しさん
2010/04/09(金) 02:01:50Presentation Materials: Overview of the New C++ (C++0x)
by Scott Meyers
Single-user license (personal use only)
$29.96
これはなんだー
0192デフォルトの名無しさん
2010/04/09(金) 02:08:22日本語解説書なんか最初からいらんかったんや
0193デフォルトの名無しさん
2010/04/09(金) 02:42:380194デフォルトの名無しさん
2010/04/09(金) 07:13:030195デフォルトの名無しさん
2010/04/09(金) 11:31:000196デフォルトの名無しさん
2010/04/09(金) 11:38:580197デフォルトの名無しさん
2010/04/09(金) 12:43:24ふっさふっさ
0198デフォルトの名無しさん
2010/04/09(金) 13:13:14ttp://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372
0199デフォルトの名無しさん
2010/04/09(金) 14:06:300200デフォルトの名無しさん
2010/04/09(金) 21:12:31>>199
Ed. 紫式部かよ。
0201デフォルトの名無しさん
2010/04/09(金) 21:32:530202デフォルトの名無しさん
2010/04/09(金) 21:34:11336ページのパワーポイントw
0203デフォルトの名無しさん
2010/04/09(金) 23:53:07public :
ClassX(std::initializer_list<int>); // Xのstd::initializer_list版コンストラクタ
ClassX(); // Xのデフォルトコンストラクタ
};
class ClassY{
public :
ClassY(std::initializer_list<int>); // Yのstd::initializer_list版コンストラクタ
};
class ClassZ{
public :
ClassZ(); // Zのデフォルトコンストラクタ
};
このような3つのクラスがあるとき、
X x = {};
Y y = {};
Z z = {};
で呼ばれるのはそれぞれどのコンストラクタでしょうか。
あるいはコンパイルエラーになるのでしょうか。
よろしくお願いします。
0204デフォルトの名無しさん
2010/04/09(金) 23:59:34> そのころにはVC11とGCC4.7がそれなりの実装してくれてるといいな
VCはともかくg++は5.x系になっても良いくらいの大変革だろ。
むしろg++0xとか名前が変わるくらいの出来事。
0205デフォルトの名無しさん
2010/04/10(土) 00:00:560206デフォルトの名無しさん
2010/04/10(土) 00:23:290207デフォルトの名無しさん
2010/04/10(土) 00:31:51そーいや複数の言語を扱う代物だったな。
0208203
2010/04/10(土) 00:32:51私も自分でググった時にそのページは見つけたのですが、
それだけではClassXしか分かりませんでした。
ClassY, ClassZについて正確な動作をご存じの方がいらっしゃったら
どうかよろしくお願いします。
0209デフォルトの名無しさん
2010/04/10(土) 00:34:560210デフォルトの名無しさん
2010/04/10(土) 00:44:19まてそのソースは?
例のブログの人の降臨を待つべきだ。
0211デフォルトの名無しさん
2010/04/10(土) 00:57:33そこの人も日本NBのメンバのはずだから
0212デフォルトの名無しさん
2010/04/10(土) 00:58:230213デフォルトの名無しさん
2010/04/10(土) 01:00:370214デフォルトの名無しさん
2010/04/10(土) 01:24:19(1) If the initializer list has no elements and T is a class type with a default constructor, the object is
value-initialized.
(2) Otherwise, if the initializer list has no elements and T is an aggregate, each of the members of T is
initialized from an empty initializer list.
(3) Otherwise, if T is an aggregate, aggregate initialization is performed (8.5.1).
(4) Otherwise, if T is a specialization of std::initializer_list<E>, an initializer_list object is
constructed as described below and used to initialize the object according to the rules for initialization
of an object from a class of the same type (8.5).
(5)Otherwise, if T is a class type, constructors are considered. If T has an initializer-list constructor, the
argument list consists of the initializer list as a single argument; otherwise, (後略)
(番号は便宜上振った、Exampleは省略)
ClassXはデフォコン持ってるから(1)でvalue-initialized=クラスの場合はデフォコン呼ぶ
ClassZもデフォコンがあるから(1)で同じ
ClassYはユーザー定義コンストラクタがあるからデフォコンがないし集成体でもないし
当然std::initializer_listでもないから(5)に当てはまり、かつinitializer-list constructorがあるので
ClassY({})が呼ばれる
0215デフォルトの名無しさん
2010/04/10(土) 14:31:28汚ねぇ仕様書だ・・・。
0216デフォルトの名無しさん
2010/04/10(土) 14:51:290218デフォルトの名無しさん
2010/04/10(土) 17:39:140219デフォルトの名無しさん
2010/04/10(土) 17:47:55オーバーロードのどこが難しいの?
猫でも分かるADL入門
猫でも分かるTMP入門
のがやばいだろ。
0220デフォルトの名無しさん
2010/04/10(土) 18:41:380221デフォルトの名無しさん
2010/04/10(土) 19:16:550222デフォルトの名無しさん
2010/04/10(土) 19:34:47名前は間田内
0223デフォルトの名無しさん
2010/04/10(土) 20:52:31I am a cat.
0224デフォルトの名無しさん
2010/04/10(土) 21:28:430225デフォルトの名無しさん
2010/04/10(土) 21:37:300226デフォルトの名無しさん
2010/04/10(土) 21:42:070227デフォルトの名無しさん
2010/04/10(土) 21:46:090228デフォルトの名無しさん
2010/04/10(土) 22:47:54吾輩はここで始めて 上司 というものを見た。
じゃないかな・
0229デフォルトの名無しさん
2010/04/10(土) 23:10:01はLGPL汚染されるってことで
ttp://pc12.2ch.net/test/read.cgi/tech/1251446016/
で話題になってるよ。
もし興味ある方はぜひ。
ttp://pc12.2ch.net/test/read.cgi/tech/1251446016/741-743
が発端。
0230デフォルトの名無しさん
2010/04/10(土) 23:27:530231デフォルトの名無しさん
2010/04/10(土) 23:45:180232デフォルトの名無しさん
2010/04/10(土) 23:47:04そんなん期待できねぇよ。
できたら願ったり叶ったりだがな。
0233デフォルトの名無しさん
2010/04/11(日) 06:26:55どうやって candidate functions が決まるのかを入れるなら name lookup の話を含むだろうし、
best viable function を定めるルールだけでもきっちり分かりやすく説明できるというのなら
今すぐ執筆してくれ。
0234デフォルトの名無しさん
2010/04/11(日) 13:46:55結局LGPL汚染は普通に使っていれば関係ないって事になってるよ
754 名前:741[] 投稿日:2010/04/11(日) 00:24:24
Boost.BigInt のソースコードを読んできました。
・・・デフォルトでGMP非依存になってますね。
#define BOOST_BIGINT_HAS_GMP_SUPPORT
を定義した上で
#include <boost/bigint/bigint.hpp>
とした場合に限り、GMPが使われるようです。
ということで、特に
Boost.BigInt を Boost Software License でリリースする事には
問題は無いようです。
755 名前:741[] 投稿日:2010/04/11(日) 00:26:31
私は念のために
大文字小文字を区別せずgmpの文字を含む部分を全て削除した
bigintを使って見ましたが正常にどうさするようです。
・・・だと思うのですが、
私以上にBoostのソースコードを読む事に長けている方は
必ずやいらっしゃると思うので、
有識者の方、ご確認いただけますでしょうか。
0235デフォルトの名無しさん
2010/04/11(日) 14:19:37もしshared_ptrとかが汚染されたら大変なことになるよな
怖すぎる
0236デフォルトの名無しさん
2010/04/11(日) 15:31:43そういう類いのクラスには思えないのだが
0237デフォルトの名無しさん
2010/04/11(日) 18:14:59いやたぶん使われていない。
だから標準Boost(って変な表現だが)に推されないんじゃね。
0238デフォルトの名無しさん
2010/04/13(火) 21:12:34http://blogs.msdn.com/visualstudio/archive/2010/04/12/visual-studio-2010-is-now-available.aspx
C++0x Core Language Features In VC10: The Table
http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx
0239デフォルトの名無しさん
2010/04/13(火) 22:28:560240デフォルトの名無しさん
2010/04/14(水) 23:34:161週間ぐらい待てないのか?
俺は待てない
0241デフォルトの名無しさん
2010/04/15(木) 05:06:090242デフォルトの名無しさん
2010/04/15(木) 18:46:380243デフォルトの名無しさん
2010/04/15(木) 20:40:400244デフォルトの名無しさん
2010/04/15(木) 20:44:140245デフォルトの名無しさん
2010/04/15(木) 20:50:160246デフォルトの名無しさん
2010/04/16(金) 01:45:570247デフォルトの名無しさん
2010/04/16(金) 04:45:41種をばらまく側としては、あちこちにターゲットを移してしまうのは
それはそれで正しいんだよな
↓では引き続きラムちゃんタイムをお楽しみください
0248デフォルトの名無しさん
2010/04/16(金) 13:11:560249デフォルトの名無しさん
2010/04/16(金) 14:47:450250デフォルトの名無しさん
2010/04/16(金) 14:59:59流れでコーヒーフイタww
0251デフォルトの名無しさん
2010/04/16(金) 19:49:42というのがあって、
いま T と X<T>, X<T> と X<T> の (非可換な) 積が定義できるときに
最適化を考えたら、
X<T> operator*(T const &, X<T> const &);
X<T> operator*(T &&, X<T> const &);
X<T> operator*(T const &, X<T> &&);
X<T> operator*(T &&, X<T> &&);
X<T> operator*(X<T> const &, T const &);
X<T> operator*(X<T> const &, T &&);
X<T> operator*(X<T> &&, T const &);
X<T> operator*(X<T> const &, X<T> const &);
X<T> operator*(X<T> &&, X<T> const &);
X<T> operator*(X<T> const &, X<T> &&);
X<T> operator*(X<T> &&, X<T> &&);
と11種類も書かないといけないのだろうか? それとも何か勘違いしてる?
0252デフォルトの名無しさん
2010/04/16(金) 20:12:17これはいらないの?
0253デフォルトの名無しさん
2010/04/16(金) 20:20:59書き漏らしてたよ。ありがと。
とにかく、こんなにたくさん必要だとすると
なにか省力化できる仕組みでもあればいいのだが…
0254デフォルトの名無しさん
2010/04/16(金) 20:32:59そんなに破壊可能なテンポラリが欲しければ
自分で一時変数作れ
0255デフォルトの名無しさん
2010/04/16(金) 20:42:29演算子関係だと、結構効いてくるよ?
X = A + B + C + d*D + E;
とか
Y = A + (B - c*C)*(D + e*E + F)*(G + h*H);
とかね。
0256デフォルトの名無しさん
2010/04/16(金) 21:11:50> そんなに破壊可能なテンポラリが欲しければ
右辺値参照をなーんにも理解していないんだな。
少しは勉強しろ。ggr
0257デフォルトの名無しさん
2010/04/16(金) 21:25:34省力化は難しいんじゃないか
0258デフォルトの名無しさん
2010/04/16(金) 21:30:43やっぱりそうか…。
でも >>251 のように列挙的に宣言したとき、>>252 のような warning が欲しい :-p
0259デフォルトの名無しさん
2010/04/16(金) 21:45:38速度欲しけりゃそんな風に書くなと
0260デフォルトの名無しさん
2010/04/16(金) 21:58:51ライブラリーではETやrvalue referenceを使ってがんばる意味はあると思うが
その結果、可読性が高くできるし
0261デフォルトの名無しさん
2010/04/17(土) 07:49:52>>255みたいな書き方だと、そこそこレベルじゃねーだろ。
0262デフォルトの名無しさん
2010/04/17(土) 07:51:06GIMPLE使えば独自warningも追加できるぞ。
0263デフォルトの名無しさん
2010/04/17(土) 12:56:43頭がおかしくなりそう。
Rvalue referenceなら気合いで何とかなりそうに
思える俺が居る。
0264デフォルトの名無しさん
2010/04/17(土) 13:00:31その代償が >>251 だと思うと・・・
0265デフォルトの名無しさん
2010/04/17(土) 13:27:48ベクトルなら加減・スカラー倍で計16個、
多元環なら加減乗算で計20個、
さらに除算ができる場合は計32個の定義が必要!!
0266デフォルトの名無しさん
2010/04/17(土) 13:29:58あっスカラー倍の割り算を計算に入れてなかったので、さらに若干増えるぞ!
0267デフォルトの名無しさん
2010/04/17(土) 13:53:33X.AddAssign(B).AddAssign(C).AddAssign(d*D).AddAssign(E);
でいいだろ
0268デフォルトの名無しさん
2010/04/17(土) 14:18:350269デフォルトの名無しさん
2010/04/17(土) 14:19:33どうせお前はまともなクラスライブラリ書かないから心配することないよ。
0270デフォルトの名無しさん
2010/04/17(土) 14:28:09あくまで補助的なもんだと言うのに
速度も一緒に得ようとか烏滸がましいとは思わないか?
0271デフォルトの名無しさん
2010/04/17(土) 15:03:210272デフォルトの名無しさん
2010/04/17(土) 15:11:42Rvalue-ref. にもBoostがなんか作るんじゃね?
0273デフォルトの名無しさん
2010/04/17(土) 16:45:31多分 Cg/HLSL とか AltiVec 拡張とか触ってしまったからだろう。
それらをライブラリとして実装するのは無理があるというが俺の結論。
どうせ、ループ中で特定の行列をレジスタに乗ったままにしたいとか
思い始めたらインラインアセンブラとか使うハメになるのだから、
速度よりも使い勝手や安定性や保守性を重視した方が良いと思う。
0274デフォルトの名無しさん
2010/04/17(土) 21:34:550275デフォルトの名無しさん
2010/04/17(土) 22:26:33しかし凡人にはC++ Template metaprogrammingが使いこなせないから
やっぱり無理なんだろうw
0276デフォルトの名無しさん
2010/04/21(水) 23:21:47上の方でBoost.Bigintがどうのこうのと言っていたが、
ttp://ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F%E7%B2%BE%E5%BA%A6%E6%BC%94%E7%AE%97
ここに
> ライブラリ
> 任意精度演算は多くの場合、専用ライブラリを呼び出すことで実装されている。
> そのライブラリがデータ型を定義し、数値を指定した精度で格納したり、
> 計算を実行するサブルーチン群を提供している。
> ライブラリによって数値の内部表現は異なる。整数のみを扱うライブラリもあるし、
> 各種基数(十進、二進など)で浮動小数点数を格納するもある。
> 分数(有理数)形式で数を格納するものもあれば、実数を全て表現できるとするものもある。
ってあるとおり、改訂BSDライセンスとかでリリースされたライブラリもいっぱいあるから
別にBoost.Bigintにこだわる必要はなさそうだよ。
だってさ。
0277デフォルトの名無しさん
2010/04/22(木) 18:54:530278デフォルトの名無しさん
2010/04/22(木) 19:40:49コンパイラ間で齟齬さえなければどうでもいいよ
0279デフォルトの名無しさん
2010/04/22(木) 19:43:07C++標準化委員会とか正直どうだっていい集団じゃねぇか。
0280デフォルトの名無しさん
2010/04/22(木) 19:45:110281デフォルトの名無しさん
2010/04/22(木) 19:52:030283デフォルトの名無しさん
2010/04/23(金) 00:22:44Committeeはいい仕事しているので。
遅いという気持ちは分かるけど。
0284デフォルトの名無しさん
2010/04/24(土) 09:56:06effective C++を何倍の厚さにすればいいんや
0285デフォルトの名無しさん
2010/04/24(土) 11:46:12> Committeeはいい仕事しているので。
遅いんじゃなくて、確実にクソ仕様への道を歩んでいる気がする。
多少 後方互換性を壊す勇気を持ってほしかった。
0286デフォルトの名無しさん
2010/04/24(土) 12:32:11ベンダにとって不利益になるのは確実
0287デフォルトの名無しさん
2010/04/24(土) 12:55:31> ベンダにとって不利益になるのは確実
どうしてそう言い切れるのさ?
ベンダだってわざと互換性が無いようにすることだってあるだろうよ。
とはいえ
> 互換性が無くなったら意味が無いというかC++じゃなくなるというか
まあそれは分かる。
C/C++との極めて高い互換性を持っていなけC++0xなんて
存在意義が無いとは思う。
0288デフォルトの名無しさん
2010/04/24(土) 12:58:48Cへのトランスレータにすれば互換性も確保出来るじゃん
0289デフォルトの名無しさん
2010/04/24(土) 13:07:53コンパイルが通らない新しいコンパイラなんていらない
=不利益になる
物を作るソフトとかは後方互換性がないと困るよ
0290デフォルトの名無しさん
2010/04/24(土) 13:15:440291287
2010/04/24(土) 13:27:51なるほどねぇ。そーゆー考えもあるね。
でもわざと他社製品との互換性を無くして自社製品で囲い込むって
ことはやるんでね?
IEとか。
0292291
2010/04/24(土) 13:29:18○ IEとかMS Officeでもそんな感じじゃん。
0293デフォルトの名無しさん
2010/04/24(土) 13:53:590294デフォルトの名無しさん
2010/04/24(土) 14:00:05> 例外やTMPをCへのトランスレータとして解決できる実装があれば見てみたい。
むしろTMPは割と可能じゃないの?
コンパイル時に定まるんだから。
例外は相当厳しそうに思えるが。
0295デフォルトの名無しさん
2010/04/24(土) 14:01:390296デフォルトの名無しさん
2010/04/24(土) 14:02:22C++ -> C言語
の変換器じゃなかったっけ??
0297デフォルトの名無しさん
2010/04/24(土) 14:27:480298デフォルトの名無しさん
2010/04/24(土) 14:33:400299デフォルトの名無しさん
2010/04/24(土) 15:03:540300デフォルトの名無しさん
2010/04/24(土) 15:52:020301デフォルトの名無しさん
2010/04/24(土) 23:49:04可能かどうかで論じると意味をなさない
どのように実現出来るか、という視点で論じるべき
longjmpでは途中でローカル変数のデストラクタが呼ばれない
Cレベルで実装するなら関数に間接層を設けてif、return、gotoで実装するのが妥当?
0302デフォルトの名無しさん
2010/04/25(日) 07:55:520303デフォルトの名無しさん
2010/04/25(日) 12:55:120304デフォルトの名無しさん
2010/04/25(日) 14:17:22いまの話題がC++からCへのトランスレータであるという俺の認識が間違ってないなら、
C++のデストラクタ相当の機能をCでどうやって書き下すかということを言ってるんだと思った
0305デフォルトの名無しさん
2010/04/25(日) 14:29:22setjmpでそこに飛ぶ関数を作って
その関数ポインタをグローバルなスタックに関数に入るたび積んで行って
例外が起きたら実行してやればいいんじゃないの
0306デフォルトの名無しさん
2010/04/25(日) 14:32:120307デフォルトの名無しさん
2010/04/25(日) 14:35:07ありゃデマだったのか?
0308デフォルトの名無しさん
2010/04/25(日) 14:38:190309デフォルトの名無しさん
2010/04/25(日) 14:41:160310デフォルトの名無しさん
2010/04/25(日) 14:49:26x86ならINT命令?
0311デフォルトの名無しさん
2010/04/25(日) 14:54:070312デフォルトの名無しさん
2010/04/25(日) 15:07:440313デフォルトの名無しさん
2010/04/25(日) 15:11:14それ読む価値あった?
俺は別に歴史にはそんな興味ないし。
0314デフォルトの名無しさん
2010/04/25(日) 15:12:500315デフォルトの名無しさん
2010/04/25(日) 15:18:28> それ読む価値あった?
物事の欠点を見つけた時に、
「こういう欠点があると自分にわかるのは、自分が利口であり、この物事に関わった奴らが馬鹿だからだ」
と考えて満たされちゃう浅はかな生き方してる人に読ませると、多少はそれを矯正できるかも。
0317デフォルトの名無しさん
2010/04/25(日) 15:33:070318デフォルトの名無しさん
2010/04/25(日) 15:36:27読んだら最後、それでも揶揄したかったら具体的な話をしなきゃ通らなくなるし、
そういう人は大抵そういう具体的なやり取りできないので、馬鹿を黙らせるのに使える。
0319デフォルトの名無しさん
2010/04/25(日) 16:37:06そう思っておけばいいんじゃないの
まあC++にも色々「どうしてこうなった」的な部分はあるんだけど
多分俺らがどうしてこうなったと思ってる部分とこの子らが言ってる部分は違うよな
0320デフォルトの名無しさん
2010/04/25(日) 17:13:03個人的には納得できる議論もあったし、
納得できない記述もあった
まあ少なくとも、単なる思いつきで仕様をいじることはないらしい
もうちょっと深慮がある
0321デフォルトの名無しさん
2010/04/25(日) 17:26:32C++0xに関してはD&Eの記述からすると結構「?」な部分も多いけど。
0322デフォルトの名無しさん
2010/04/25(日) 18:57:220323デフォルトの名無しさん
2010/04/25(日) 19:16:140324デフォルトの名無しさん
2010/04/25(日) 20:23:12禿自身がD&Eに相当するような論文を書いてるよね。C++0xについては。
規格が決まる前に書いているのが違う点だけど。
Concept checking - A mor complement to type checking
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1510.pdf
Simplifying the use of concepts
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2906.pdf
0325デフォルトの名無しさん
2010/04/25(日) 20:24:360326デフォルトの名無しさん
2010/04/25(日) 21:00:40>A mor complement
愛の補数とはまた粋な
0327デフォルトの名無しさん
2010/04/25(日) 21:58:06復活するでしょconceptさん。
0328デフォルトの名無しさん
2010/04/25(日) 22:31:240329デフォルトの名無しさん
2010/04/25(日) 22:35:24C++0xには今のところない。
0330デフォルトの名無しさん
2010/04/25(日) 23:07:36, ‐' ´ ``‐、 / ̄:三}
. /,. -─‐- 、. ヽ / ,.=j
_,.:_'______ヽ、 .! ./ _,ノ
`‐、{ へ '゙⌒ `!~ヽ. ! /{. /
`! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ 話題がないなら野球しようぜ!
. {.l '⌒ ゙ 6',! / :::::::::::::::/ __
. 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、
. ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ
,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 /
/ / :::::::::::::::: ; '´ /´\ / r'\
. i ! ::::::::::::::/ 墨 | .!::::::::/ヽ、.._!ヽ. ヽ、
{ {:::::::::::;:イ / ‖i:::::::/:::::::::::::/ \
. ヽ ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: /
0331デフォルトの名無しさん
2010/04/25(日) 23:17:18VC++のサポート完了はまたSP1待ちかね。
tr1の時も遅かったし…
0332デフォルトの名無しさん
2010/04/25(日) 23:57:52やめとけ。無駄だ。
0333デフォルトの名無しさん
2010/04/26(月) 00:00:530334デフォルトの名無しさん
2010/04/26(月) 00:15:210335デフォルトの名無しさん
2010/04/26(月) 03:25:13いや、2011年にはC++0x完璧で、
下手すりゃconceptも2012年くらいに実装されてると思う。
Clangは凄い勢いで成長してる。
コードも綺麗。
0336デフォルトの名無しさん
2010/04/26(月) 03:31:120337デフォルトの名無しさん
2010/04/26(月) 03:37:450338デフォルトの名無しさん
2010/04/26(月) 03:42:48せめて一言"ObjCでやれ"と言う奴はいなかったのか・・・
0339デフォルトの名無しさん
2010/04/26(月) 04:03:54LLVMとの絡みで実験的な実装をやるのが、
Clangの目的のひとつ。そしてLLVMの仕様に反映。
0340デフォルトの名無しさん
2010/04/26(月) 06:31:05C++0xの現行版の仕様が確定するのが
2011年だぞ?
0341デフォルトの名無しさん
2010/04/26(月) 07:20:390342デフォルトの名無しさん
2010/04/26(月) 08:50:020343デフォルトの名無しさん
2010/04/26(月) 08:59:270344デフォルトの名無しさん
2010/04/26(月) 09:12:19実装状況調べてないだろw
0345デフォルトの名無しさん
2010/04/26(月) 10:57:21ぜんっぜん調べてねぇけど、ドラフトは読んでるよ。
この状況では確定するのはやっぱり2011年だろ?
0346デフォルトの名無しさん
2010/04/26(月) 11:07:29何か問題があったら引かれるだけ。conceptのように。
あとはrvalueみたいに表現の調整ぐらい。
0347デフォルトの名無しさん
2010/04/26(月) 11:26:16このFCDのまま行くのかね?
あと1回くらいFCDを出し直してそれから進むと踏んでいるんだけど。
その辺を含めて2011年と見ている。
0348デフォルトの名無しさん
2010/04/26(月) 12:51:11FCD→FDISと行くんじゃないかなあ。FDISは事実上の信任投票で
技術的変更は不可だから、FCD→FDISの間で「FDIS投票がこけないような修正」を
して終わりだと思う。
0349デフォルトの名無しさん
2010/04/26(月) 12:54:20んー、もうあとは引き算だけだと思うんだけどねえ。
0350デフォルトの名無しさん
2010/04/26(月) 19:45:01ムーブセマンティクスと例外の絡みで出てきた話だから引けばいいってもんでもないし
0351デフォルトの名無しさん
2010/04/26(月) 21:12:420353デフォルトの名無しさん
2010/04/26(月) 21:16:430354デフォルトの名無しさん
2010/04/26(月) 21:19:420355デフォルトの名無しさん
2010/04/26(月) 21:21:18実装済みのコンパイラ涙目
0356デフォルトの名無しさん
2010/04/26(月) 21:24:56アッー!
0357デフォルトの名無しさん
2010/04/26(月) 21:28:56で?
俺は実装の話なんて一言もしていないが。
> C++0xの現行版の仕様が確定するのが
> 2011年だぞ?
としか言ってないけど。
なんか正当な反論ができるならしてみろよ?無知が。
0358デフォルトの名無しさん
2010/04/26(月) 21:48:300359デフォルトの名無しさん
2010/04/26(月) 22:04:10こんな2ちゃんごときで謝れとか言い出すあんたの器量の狭さがキモいんですよ^^
0360デフォルトの名無しさん
2010/04/26(月) 22:08:05pgr
0361デフォルトの名無しさん
2010/04/26(月) 22:33:470363デフォルトの名無しさん
2010/04/26(月) 23:19:110364デフォルトの名無しさん
2010/04/26(月) 23:24:490365デフォルトの名無しさん
2010/04/27(火) 15:47:12deleted定義
ttp://cpplover.blogspot.com/2010/04/deleted.html
これすげー便利だな。
0366デフォルトの名無しさん
2010/04/27(火) 17:14:01予約語deleteの再利用か。
exportは仕事 首になったからまさに完全ニートになってるけど、
予約語としては生き残っているらしいから、
なんか有効利用してあげられないかな?
0367デフォルトの名無しさん
2010/04/27(火) 17:28:30完全にサポートされるようになるとはとても思えない……
0368デフォルトの名無しさん
2010/04/27(火) 20:14:10template<typename T> operator T() = delete;なんて好きそうなのに
0369デフォルトの名無しさん
2010/04/27(火) 20:16:310370デフォルトの名無しさん
2010/04/27(火) 20:17:330371デフォルトの名無しさん
2010/04/27(火) 20:22:25gccはその辺は一番遅いでしょ。
昔みたいにx86専用フォークあれば別だけど。
0372デフォルトの名無しさん
2010/04/27(火) 21:31:40純粋仮想関数よりは見た目はいいが。
0373デフォルトの名無しさん
2010/04/27(火) 21:51:32struct Point{
int x,y;
Point() = default;
Point(int x, int y) : x(x), y(y){}
};
これが出来るだけで凄い価値がある
0374デフォルトの名無しさん
2010/04/27(火) 21:55:43inline強制じゃないんだっけ?
0375デフォルトの名無しさん
2010/04/27(火) 22:20:020376デフォルトの名無しさん
2010/04/27(火) 22:23:230377デフォルトの名無しさん
2010/04/27(火) 22:54:250378デフォルトの名無しさん
2010/04/27(火) 23:02:40他が違えば意味ないんじゃないの? >POD
0379デフォルトの名無しさん
2010/04/27(火) 23:09:53デフォルトコンストラクタだけは自分でなんかコンストラクタ書くと潰されるから
明示的に指定が必要
0380デフォルトの名無しさん
2010/04/27(火) 23:40:17デフォルトのコピコンやoperator=をprivateにしたい時に使うのは便利そうだけど
0381デフォルトの名無しさん
2010/04/27(火) 23:56:42http://ja.wikipedia.org/wiki/C++0x#Plain_Old_Data_.E5.9E.8B.E3.81.AE.E5.AE.9A.E7.BE.A9.E3.81.AE.E4.BF.AE.E6.AD.A3
C++0xではPODの定義が変わって
>>373の構造体はPODになるとかならないとか
0382デフォルトの名無しさん
2010/04/27(火) 23:56:550383デフォルトの名無しさん
2010/04/27(火) 23:59:04なーるほど
それだと重要だな
0384デフォルトの名無しさん
2010/04/27(火) 23:59:550385デフォルトの名無しさん
2010/04/28(水) 00:07:36unified function syntaxはボツになりました…
0386デフォルトの名無しさん
2010/04/28(水) 00:11:31不細工すぎるだろ
0387デフォルトの名無しさん
2010/04/28(水) 00:12:29安心した
0388デフォルトの名無しさん
2010/04/28(水) 00:13:43default constructor が trivial か non-trivial かの違いになります.
で,この違いがどうなるかというと結構大量にあるっぽいので
誰か親切な人まとめてください.
0389デフォルトの名無しさん
2010/04/28(水) 00:18:50うむ。
いくら何でもなぁ。
0390デフォルトの名無しさん
2010/04/28(水) 00:23:10どちらかというと, POD という用語の従来における定義の個々の構成要件だった
「各 special member function が trivialかどうか」や
"standard-layout type" といった概念が,それぞれ独立して
重要な仕様上の概念として活躍しているような?
0391デフォルトの名無しさん
2010/04/28(水) 00:26:34多すぎて目を通してなかったけど
0392デフォルトの名無しさん
2010/04/28(水) 00:28:05お前らが何を言ってるのかさっぱり分からん。
0393デフォルトの名無しさん
2010/04/28(水) 00:32:110394デフォルトの名無しさん
2010/04/28(水) 00:33:21CのAPIに渡したりバイトの塊としてストリームに流せたりすることを保証する枠組みは絶対に必要
仕様上の概念としてはtrivialとstandard-layoutに整理されて文言の登場頻度は減ったけどね
0395デフォルトの名無しさん
2010/04/28(水) 00:35:530396390
2010/04/28(水) 00:43:19>CのAPIに渡したり〜
この部分は完全に同意していて, >390 は単に
>文言の登場頻度は減った
んじゃないの? っていうのが言いたかっただけです.すいません.
0397デフォルトの名無しさん
2010/04/28(水) 03:23:06PODの概念が具体的な形で整理されたことが大切。
より重要な概念になったかどうかとか、登場回数が減ったとかどうでもいい。
重要かどうかってのは評価に属することなんで、考え方次第。
C++は、PODにしても>>367にしても、
高級アセンブラとしての役割というか、
低レベルな部分での仕様を追求するのが面白いね。
0398デフォルトの名無しさん
2010/04/28(水) 12:12:53さすが移植用アセンブラたるC言語の直系の子孫。
いつまでも変態記法と低レベル作業を忘れないでね。
0399デフォルトの名無しさん
2010/04/28(水) 13:24:240400デフォルトの名無しさん
2010/04/28(水) 15:56:12みんな大好きC++。
0401デフォルトの名無しさん
2010/04/28(水) 16:03:500402デフォルトの名無しさん
2010/04/28(水) 18:45:050403デフォルトの名無しさん
2010/04/28(水) 19:11:38メジャーな言語を使えるプログラマーは変態ではありません。技術者です。
0404デフォルトの名無しさん
2010/04/28(水) 23:33:570405デフォルトの名無しさん
2010/04/29(木) 02:35:090xってどれだけ普及するだろうか
0406デフォルトの名無しさん
2010/04/29(木) 02:44:430407デフォルトの名無しさん
2010/04/29(木) 02:46:290408デフォルトの名無しさん
2010/04/29(木) 03:04:45templateは保守性が低いから使うな!ってよく言われるよ。
lambdaなんぞ入ったらどうなることやら…。
0409デフォルトの名無しさん
2010/04/29(木) 03:15:55俺らが読めない、だからなあ
0410デフォルトの名無しさん
2010/04/29(木) 08:54:110411デフォルトの名無しさん
2010/04/29(木) 09:23:34vector<int> v(10000);
のように書いたときの v の要素は C++0x では初期化されなくなるのでしょうか?
23.3.6.1
explicit vector(size_type n);
3 Effects: Constructs a vector with n default constructed elements.
と書かれていて、default constructed というのは、POD型では初期化されていないことを意味すると思うのですが。
これに関係していそうなので↓こんなものを見つけましたが
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#868
上の文はまだ修正される可能性があるのでしょうか?
0412デフォルトの名無しさん
2010/04/29(木) 09:24:11概念的にはそんなに難しいものじゃないけど
ヘッダに実装書くことによる細かいバッドノウハウはちょっとだるい
0413デフォルトの名無しさん
2010/04/29(木) 09:27:05POD型のデフォルトコンストラクタは0クリアじゃないの?
0414デフォルトの名無しさん
2010/04/29(木) 10:45:16thanks.
default constructed とは value-initialized(8.5) と同じ意味なんですね。
0415デフォルトの名無しさん
2010/04/29(木) 10:48:13所詮規格は規格であって実装で無視されたら意味ないしなあ
0416デフォルトの名無しさん
2010/04/29(木) 10:48:55記憶が曖昧だ・・・
違うかもしれない
0417デフォルトの名無しさん
2010/04/29(木) 12:13:29どうかな?対応具合は?
0418デフォルトの名無しさん
2010/04/29(木) 13:28:250419デフォルトの名無しさん
2010/04/29(木) 18:31:410420デフォルトの名無しさん
2010/04/29(木) 19:36:54でも地味に良い情報だったw
0421デフォルトの名無しさん
2010/04/29(木) 21:10:51単にSP2自体サポート終了してるから対象から外しただけな気もするが
0422デフォルトの名無しさん
2010/04/29(木) 22:23:01A foo() { return A(); }
を実行した場合、文法上、戻り値返す際に動くのは
コピーコンストラクタとムーブコンストラクタのどっち?
(実際にはどちらにしろ戻り値最適化されるだろうけど、
仮に文法上コピーコンストラクタが実行されるなら、
コピーコンストラクタを private にした時(あるいは delete した時)に
エラーになるという違いがある)
とりあえずVC++2010はコピーコンストラクタが動こうとするみたいだけど。
0423デフォルトの名無しさん
2010/04/29(木) 22:25:45> 古いVC++だと
古いVC++なんて、それを言って良いならいくらでもそんなことはあるだろうよ。
0424デフォルトの名無しさん
2010/04/29(木) 22:34:13それだけだと右辺値参照する側がいないんじゃないか。
0425デフォルトの名無しさん
2010/04/29(木) 22:40:03どこから呼ばれるかコンパイル単位には分からないわけだし
0426デフォルトの名無しさん
2010/04/29(木) 22:42:07ムーブコンストラクタがあればそっちで、なければコピーコンストラクタ、でしょ。
そうじゃないと困りそう。
0427デフォルトの名無しさん
2010/04/29(木) 22:48:57戻り値最適化がないなら、
return に書いた式から、関数の戻り値へとコピーかムーブが走ると期待できる
>>426
じゃあVC++2010の挙動がおかしい、と
publicなムーブコンストラクタとprivateなコピーコンストラクタを定義したら、
コピーコンストラクタが使えないよというエラーになるから
0428デフォルトの名無しさん
2010/04/29(木) 22:55:37A a(A(1));
A a(foo());
でも同じ状況でVC++2010はエラーになる。
ただし、後者ではコピーコンストラクタを有効にして実際に実行してみると
ムーブコンストラクタしか動かない。
(前者は最適化されてコピーやムーブ自体が実行されない)
0429デフォルトの名無しさん
2010/04/29(木) 22:58:37まだゴリゴリ書かない方がいいのか・・・ って、何か問題起きたら 2008に持ってけばいいのかw
0430デフォルトの名無しさん
2010/04/29(木) 23:00:14>>428 は後者も最適化されてコピーもムーブも動かないわ
0431デフォルトの名無しさん
2010/04/29(木) 23:02:530432デフォルトの名無しさん
2010/04/29(木) 23:09:23a.piyo(); // piyoは非constメンバ関数
A b(a); // ムーブ? コピー?
b.piyo();
}
hoge(A());
これでコピーコンストラクタが動いたんだけど
ひょっとしてムーブコンストラクタの考え方、俺間違ってる?
a.piyo(); が実行できたという点では
右辺値参照万歳ではあるんだけど
0433デフォルトの名無しさん
2010/04/29(木) 23:12:59ムーブしたかったら A b(std::move(a)) じゃないか?
0434デフォルトの名無しさん
2010/04/29(木) 23:14:57そこで勝手にmoveしちゃったらその後のaはどうなるんだよ
0435デフォルトの名無しさん
2010/04/29(木) 23:14:57おお、そうなんだ
そうしたらムーブコンストラクタが呼ばれたわ
ありがとう
0436デフォルトの名無しさん
2010/04/29(木) 23:15:59あとは野となれ山となれ
0437デフォルトの名無しさん
2010/04/29(木) 23:22:26「'A' から 'A &&' への変換時」ってなってるな
どうもムーブコンストラクタを呼ぼうとはしているみたいだ
でも、なぜかコピーコンストラクタがアクセス可能じゃないとダメ、と
'A' から 'A &&' への変換に
なぜコピーコンストラクタへのアクセス可能性が要求されるのだろう?
0438デフォルトの名無しさん
2010/04/29(木) 23:24:40>>432 の例でいうとaをムーブコンストラクタに渡すには
std::moveの返値(無名の右辺値参照)にしなければいけないわけだ。
なるほど。
0439デフォルトの名無しさん
2010/04/29(木) 23:27:24なるほど
ムーブコンストラクタがあっても、
左辺値でコンストラクとしようとする時には
勝手に右辺値参照になってはくれないのね
確かに安全のためには必要そうな仕様だ
0440デフォルトの名無しさん
2010/04/29(木) 23:40:37コピーも可能じゃないとだめというのが仕様だとか?
でも、MoveConstructible requirements にそういう事は書いてないし・・・
0441デフォルトの名無しさん
2010/04/30(金) 02:11:51>publicなムーブコンストラクタとprivateなコピーコンストラクタを定義したら、
>コピーコンストラクタが使えないよというエラーになるから
再現しないっぽいのでとりあえずコード全体をさらしてほすぃ……
0442デフォルトの名無しさん
2010/04/30(金) 02:18:310443デフォルトの名無しさん
2010/04/30(金) 03:01:44条件があるのかも
0444デフォルトの名無しさん
2010/04/30(金) 03:06:11一体なんなんだ
0445デフォルトの名無しさん
2010/04/30(金) 03:47:00delete p; // 死ぬ
auto p = new auto(2.0 * 3.4);
delete p; // 死ぬ
auto p = new auto("hoge");
delete p; // 死ぬ
基本型を引数に取ってnew autoすると
delete時に死ぬ
クラスとかなら問題ない
0446デフォルトの名無しさん
2010/04/30(金) 04:13:090447デフォルトの名無しさん
2010/04/30(金) 06:30:360448デフォルトの名無しさん
2010/04/30(金) 07:18:27どのコンパイラくらい書いてくれ。
0449デフォルトの名無しさん
2010/04/30(金) 08:18:510450デフォルトの名無しさん
2010/04/30(金) 08:35:12誰かGCCで試してみてほしい。
0451デフォルトの名無しさん
2010/04/30(金) 08:51:30妙に価値のある内容は。
もっとやれ
0452デフォルトの名無しさん
2010/04/30(金) 09:50:00g++-4.5 (Debian 4.5.0-2) 4.5.1 20100419 (prerelease)
だと死なない(そりゃそうだ)
0453デフォルトの名無しさん
2010/04/30(金) 10:47:13ポインタをnewしてるだけだからdeleteで問題ない
0454デフォルトの名無しさん
2010/04/30(金) 11:39:190455デフォルトの名無しさん
2010/04/30(金) 12:45:290456デフォルトの名無しさん
2010/04/30(金) 12:47:09/ \
glvalue rvalue
/ \ / \
lvalue xvalue prvalue
Figure 1 -- Expression category taxonomy
何か笑ってしまった
複雑だなあ
0457デフォルトの名無しさん
2010/04/30(金) 12:48:04new auto で確保したものは常に delete
配列 new を初期化パラメータ付きで行うのは不可能だから
0458デフォルトの名無しさん
2010/04/30(金) 12:51:230459デフォルトの名無しさん
2010/04/30(金) 12:55:10だったらいいんだが
autoってそんな意味じゃねー
0460デフォルトの名無しさん
2010/04/30(金) 12:57:510461デフォルトの名無しさん
2010/04/30(金) 13:07:33仮想継承にしなくちゃならないなw
0462デフォルトの名無しさん
2010/04/30(金) 13:12:08シンプルやん。
対称だと頭に入りやすい。
0463デフォルトの名無しさん
2010/04/30(金) 13:30:37/ \
lvalue rvalue
/ \ / \
plvalue xvalue prvalue
これなら対称なんだけど
0464デフォルトの名無しさん
2010/04/30(金) 13:32:57機能まで対称だったらわざわざ仮想継承構造にする必要ないけどな
0465デフォルトの名無しさん
2010/04/30(金) 13:35:43rvalue &&
prvalue &&&
になりそうな予感
0466デフォルトの名無しさん
2010/04/30(金) 13:41:13auto l = [=]() mutable { ++n; std::cout << n << std::endl; };
l(); //1と表示
l(); //2と表示
ラムダ式を作成した時に
クロージャ型の非staticメンバ変数のnに外のnがコピーされるから、
それを変更すると次の呼び出しでもその影響が残るのは
仕様でいいのよね?
0467デフォルトの名無しさん
2010/04/30(金) 14:28:27関数ポインタに渡せないんだな
前者は戻り値の型が書けないからで、
後者は関数呼び出しがクロージャ型の非staticメンバ関数だからだな
どちらも仕方が無いけど、微妙に不便
まあ後者は、クロージャ型の非staticメンバ変数に
operator() を自インスタンスを使って call するコードを
持たせる事で実現できるとは思うのだが、
メモリの実行権限とか考えると微妙だわなあ
0468デフォルトの名無しさん
2010/04/30(金) 15:15:49> lvalue &
> rvalue &&
> prvalue &&&
何気に分かりやす・・・くねぇな
0469デフォルトの名無しさん
2010/04/30(金) 17:34:03今年3月の話みたいだから対応して無いのは当然だけど
0470デフォルトの名無しさん
2010/04/30(金) 17:38:110471デフォルトの名無しさん
2010/04/30(金) 18:09:130472デフォルトの名無しさん
2010/04/30(金) 19:06:02なんと、その手があったのか。改めてfunctionはすごいな。
ラムダ式をboost::lambdaでラップしようかとか悩んでた。
0473デフォルトの名無しさん
2010/04/30(金) 21:11:540474デフォルトの名無しさん
2010/04/30(金) 21:40:510475デフォルトの名無しさん
2010/04/30(金) 23:09:11return する値の型を全て同じにすれば
戻り値の型を自動的に類推してくれる、
という仕様は検討された事ないのかな
それがあれば関数をカリー化して返せるんだが
auto add(int n) {
return [=](int x) { return x + n; };
}
0476デフォルトの名無しさん
2010/04/30(金) 23:14:48おおっとそれはすごい。VC10にいつかはサポートされるかな。
現状のVC10はどこまでサポートされてるのかさっぱり分らない。SPが出るたびに調整かw
0477デフォルトの名無しさん
2010/04/30(金) 23:29:33auto add = [](int n) {
return [=](int x) { return x + n; };
};
で我慢しろ
0478デフォルトの名無しさん
2010/04/30(金) 23:37:39http://blogs.msdn.com/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx
http://wiki.apache.org/stdcxx/C++0xCompilerSupport
0479デフォルトの名無しさん
2010/05/01(土) 00:02:330480デフォルトの名無しさん
2010/05/01(土) 00:15:10宣言だけの場合は?
0481デフォルトの名無しさん
2010/05/01(土) 01:14:15inline や template と同様、ヘッダにしか書けない
ただし、static を明示的につけない限り、リンク時に実体は1つにまとめられる
宣言だけ書くことはできるが、同じ翻訳単位に定義が必要
みたいな感じで
0482デフォルトの名無しさん
2010/05/01(土) 01:15:40○複数の翻訳単位から利用するにはヘッダにしか書けない
0483デフォルトの名無しさん
2010/05/01(土) 01:18:30それはそれこれはこれということで
0484デフォルトの名無しさん
2010/05/01(土) 01:38:18ありがとう。対応状況が一目で分かって助かります。
0485デフォルトの名無しさん
2010/05/01(土) 11:05:51こんな風に全ての組み合わせがいるの?
hoge func(const fuga& a,const piyo& b);
hoge func( fuga&& a,const piyo& b);
hoge func(const fuga& a, piyo&& b);
hoge func( fuga&& a, piyo&& b);
0486デフォルトの名無しさん
2010/05/01(土) 11:30:56普通は一方をもう一方の情報を使って変更して
変更したオブジェクトを返すという形にすると思うけど
0487デフォルトの名無しさん
2010/05/01(土) 13:19:540488デフォルトの名無しさん
2010/05/01(土) 16:03:18なるほど、通常は片方だけですむってことなのか。
0489デフォルトの名無しさん
2010/05/02(日) 04:07:58てきとーにVC10ee触ってるんだが、ラムダって制限つきローカル関数のように使えるな。
さらに便利かも。
0490デフォルトの名無しさん
2010/05/02(日) 08:57:41これでいちいち関数内に構造体作る必要がなくなったわ
しかもメンバにも直接アクセスできるし
0491デフォルトの名無しさん
2010/05/02(日) 09:48:030492デフォルトの名無しさん
2010/05/02(日) 12:15:28function_traitsを定義するんで凌ぐのかな。
0493デフォルトの名無しさん
2010/05/02(日) 15:36:14メンバにもアクセスできるの?!
ローカルクラスとかわんないと思いこんでた
0494デフォルトの名無しさん
2010/05/02(日) 15:39:580495デフォルトの名無しさん
2010/05/02(日) 16:43:10どうせ[=]か[&]にするだろうから
自動的にキャプチャされるだろうが
0496デフォルトの名無しさん
2010/05/02(日) 19:02:420497デフォルトの名無しさん
2010/05/02(日) 19:36:340498デフォルトの名無しさん
2010/05/02(日) 20:48:36そんな気分の時があります
0499デフォルトの名無しさん
2010/05/02(日) 20:59:31ああ、0xのLambda式か。
0500デフォルトの名無しさん
2010/05/03(月) 00:01:170501デフォルトの名無しさん
2010/05/03(月) 00:08:41紛らわしいからやめろと言われればその通りなんだが、コンパイラがどういうコードを吐くのか気になる
0502デフォルトの名無しさん
2010/05/03(月) 00:15:160503デフォルトの名無しさん
2010/05/03(月) 00:15:560504デフォルトの名無しさん
2010/05/03(月) 00:28:00VC10です。C++0xWikipediaにも省略できるって書いてあるのに?
auto z0=[](int x)->{return x;}; //エラー
auto z1=[](int x)->int{return x;}; //OK
auto z2=[](int x)->decltype(x){return x;};//OK
0505デフォルトの名無しさん
2010/05/03(月) 00:29:100506デフォルトの名無しさん
2010/05/03(月) 00:43:19おばか
0507デフォルトの名無しさん
2010/05/03(月) 00:49:100508デフォルトの名無しさん
2010/05/03(月) 05:56:52コピコンのあるようなものがいらっしゃると消えてくれないかも
0509デフォルトの名無しさん
2010/05/03(月) 09:42:060510デフォルトの名無しさん
2010/05/03(月) 10:45:04用途がよくわからんが
0511デフォルトの名無しさん
2010/05/03(月) 10:52:02std::printf("%.4x\n", (int) u'\u0905'); //デーバナーガリー文字 \u0905
↓ phase 5
実行時キャラクターセットに対応する文字が無ければ
'\0'以外の適当な文字に置き換えられる
(eucとかだったら \u0905 は無い)
std::printf("%.4x\n", (int) u'?');
↓
実行結果: 003f (プレフィクス u をつけてもやっぱり 0905 にならない)
――ってこと? 最近のOSなら大丈夫なんだろうけど。
0512デフォルトの名無しさん
2010/05/03(月) 11:06:260513デフォルトの名無しさん
2010/05/03(月) 12:50:15template <typename T>
auto foo(T a, T b) -> decltype(a + b) { return a + b; }
とかできるよね、という話らしいよ
0514デフォルトの名無しさん
2010/05/03(月) 12:54:000515デフォルトの名無しさん
2010/05/03(月) 12:57:200516デフォルトの名無しさん
2010/05/03(月) 12:58:540517デフォルトの名無しさん
2010/05/03(月) 12:59:27でもさすがにC#のように引数の型を省略 auto z3=[](x){return x*2;}; は無理?とおもったけど。
auto z4=boost::lamabda::_1*2; はOKなのね。boost::lambda恐るべし。
0518デフォルトの名無しさん
2010/05/03(月) 13:02:53autoで受けるC++0xではまあ使えないわなあ
0519デフォルトの名無しさん
2010/05/03(月) 13:10:52なるほど、納得。
0520デフォルトの名無しさん
2010/05/03(月) 13:13:250521デフォルトの名無しさん
2010/05/03(月) 13:14:460522デフォルトの名無しさん
2010/05/03(月) 13:15:430523デフォルトの名無しさん
2010/05/03(月) 14:41:40u'\u0905' wchar16_t だから「実行時キャラクターセット」は使われません。
どんな環境でも UTF-16 エンコードが使われます。
0x0905 と同じ表現を持つ値となります。
0524デフォルトの名無しさん
2010/05/03(月) 16:44:54実行文字集合に無い文字は、翻訳段階5でいったん文字化けさせろって書いてない?
「文字(列)リテラル中のユニバーサルキャラクター名は、実行文字集合中の対応物に置き換える」
リテラル中の文字が、ユニコードでどの値を持つか評価されるのって、その後だよね?
0525デフォルトの名無しさん
2010/05/03(月) 20:40:41分かる部分だけ使ってりゃいいって
0526デフォルトの名無しさん
2010/05/03(月) 21:01:410527デフォルトの名無しさん
2010/05/04(火) 00:06:10互換性のために殆どが「追加」になっちゃうんだよね
便利でシンプルで完全に動作するC++のサブセットって定義できんもんだろうか
0528デフォルトの名無しさん
2010/05/04(火) 00:08:11つ可変引数
0529デフォルトの名無しさん
2010/05/04(火) 00:11:23筆頭は0=ヌルポインタだな。
0530デフォルトの名無しさん
2010/05/04(火) 00:13:03struct か class のどちらか
古い(というか従来の) enum
0531デフォルトの名無しさん
2010/05/04(火) 00:17:070532デフォルトの名無しさん
2010/05/04(火) 00:17:400533デフォルトの名無しさん
2010/05/04(火) 00:18:190534デフォルトの名無しさん
2010/05/04(火) 00:19:060535527
2010/05/04(火) 00:29:42仕様変更ではなくコーディングルールみたいなもん
0536デフォルトの名無しさん
2010/05/04(火) 00:32:07printfみたいに引数の検査ができな可変引数よりも、
cout<<a<<b; とか boost::format("%d %d")%a&b;
とかてC++の機能で代用できるもので可変引数は廃止でいいんじゃないか?
hoge a(); が関数のプロトタイプになるのはなくしていいとおもう。
0537デフォルトの名無しさん
2010/05/04(火) 00:34:210538デフォルトの名無しさん
2010/05/04(火) 00:43:08std::vector<bool>
0539デフォルトの名無しさん
2010/05/04(火) 00:48:270540デフォルトの名無しさん
2010/05/04(火) 00:49:540541デフォルトの名無しさん
2010/05/04(火) 00:51:57printfを例に出すとは素質悪いな
0542デフォルトの名無しさん
2010/05/04(火) 00:56:1010行程度しか触れられていない
valarray
0543デフォルトの名無しさん
2010/05/04(火) 00:56:45バグの元
0544デフォルトの名無しさん
2010/05/04(火) 00:59:150545デフォルトの名無しさん
2010/05/04(火) 01:00:58non-explicitなコンストラクタとかoperator T()のことじゃない?
0546デフォルトの名無しさん
2010/05/04(火) 01:02:400547デフォルトの名無しさん
2010/05/04(火) 01:10:06要するに数値型間の暗黙の変換
0548デフォルトの名無しさん
2010/05/04(火) 01:57:080549デフォルトの名無しさん
2010/05/04(火) 01:59:30xがintの時、式 x * 3.14 の型はintでOK?
0550デフォルトの名無しさん
2010/05/04(火) 02:00:560551デフォルトの名無しさん
2010/05/04(火) 02:02:56#pragma yutori
ならばOK
0552デフォルトの名無しさん
2010/05/04(火) 02:05:090553デフォルトの名無しさん
2010/05/04(火) 02:10:00がコンパイルできちゃう
0554デフォルトの名無しさん
2010/05/04(火) 02:21:520555デフォルトの名無しさん
2010/05/04(火) 02:28:01result_ofが使えればいいよ。
0556デフォルトの名無しさん
2010/05/04(火) 02:29:28警告が出るからいいんじゃね?
0557デフォルトの名無しさん
2010/05/04(火) 02:32:38正直、ほとんどの人に共通の認識だと思ってた
0558デフォルトの名無しさん
2010/05/04(火) 02:35:27これには警告でないでしょ
gcc -Wall でも警告でないはず
unsigned f(int y)
{
unsigned int x = y;
return x;
}
unsigned int g()
{
return f(-1);
}
0559デフォルトの名無しさん
2010/05/04(火) 06:01:550560デフォルトの名無しさん
2010/05/04(火) 11:10:010561デフォルトの名無しさん
2010/05/04(火) 11:48:530562デフォルトの名無しさん
2010/05/04(火) 11:53:260563デフォルトの名無しさん
2010/05/04(火) 12:09:41unsigned変数の小なり0比較はエラーにすべき
0564デフォルトの名無しさん
2010/05/04(火) 12:52:01警告出して最適化してくれれば十分だと思う。
テンプレート使ってるとsignedとunsinged両方使えるようにするとき役に立つ。
警告なら必要に応じて抑制できるけど、エラーだとsignedとunsingedで分岐するテンプレートを書く必要が出てきて面倒。
0565デフォルトの名無しさん
2010/05/04(火) 12:54:21それとも比較元を+1して小なり1比較ってこと?
0566デフォルトの名無しさん
2010/05/04(火) 12:55:000567デフォルトの名無しさん
2010/05/04(火) 13:01:050568デフォルトの名無しさん
2010/05/04(火) 14:48:38エラーにするのはループ条件に出てきた時だけでいい
その他の場合はフェイルセーフで書く事もあるので警告すら出て欲しくないな
0569デフォルトの名無しさん
2010/05/04(火) 15:37:34ループ条件に出てきたときはループ削除でよくない?エラーはやりすぎでしょう。
0570デフォルトの名無しさん
2010/05/04(火) 15:39:53ごめん
別な条件の方で考えてた
(unsigned)x >= 0 の方
0571デフォルトの名無しさん
2010/05/04(火) 19:07:10https://bugzilla.kernel.org/show_bug.cgi?id=12597
0572デフォルトの名無しさん
2010/05/04(火) 20:28:37すげー
Linus Torvalds の生コメントがある!
・・・でもLinusはC++大嫌いだったな確か。
0573デフォルトの名無しさん
2010/05/04(火) 21:36:18Java の enum そのものにしてくれないかなぁ・・
0574デフォルトの名無しさん
2010/05/04(火) 22:21:570575デフォルトの名無しさん
2010/05/04(火) 22:26:040576デフォルトの名無しさん
2010/05/04(火) 22:39:39Java の enum ってどういう挙動なんだか知らんが
そんなに良いのか?
0577デフォルトの名無しさん
2010/05/04(火) 22:56:31要素の宣言でコンストラクタに渡すパラメータを指定できる。
0578デフォルトの名無しさん
2010/05/04(火) 23:03:51ふーん。ありがとう。
いっそenum class とenum structみたいに2種類にして
機能を分ければよかったのにね。
0579デフォルトの名無しさん
2010/05/04(火) 23:19:42enum名を文字列で返すメンバ関数とか欲しいわ
0580デフォルトの名無しさん
2010/05/04(火) 23:42:32enum class は単に enum をタイプセーフにしただけだけど、Java のはメソッドをもてたり、
各要素毎にオーバーライドして振る舞いも変更できる。
public enum Operation {
PLUS("+") { double eval(double x, double y) { return x + y; } },
MINUS("-") { double eval(double x, double y) { return x - y; } },
TIMES("*") { double eval(double x, double y) { return x * y; } },
DIVIDE("/") { double eval(double x, double y) { return x / y; } };
abstract double eval(double x, double y);
private Operation(String op) {
op_ = op;
}
private String op_;
}
Operation.PLUS.eval(10, 3); // -> 13
これ結構便利だと思う。C++にも同等の機能入れてくれないかな
0581デフォルトの名無しさん
2010/05/04(火) 23:59:200582デフォルトの名無しさん
2010/05/05(水) 00:06:130583デフォルトの名無しさん
2010/05/05(水) 00:10:28付けて列挙するものという意味付けにすれば後は何でも出来そうな。
0584デフォルトの名無しさん
2010/05/05(水) 00:21:490585デフォルトの名無しさん
2010/05/05(水) 00:22:540586デフォルトの名無しさん
2010/05/05(水) 00:28:55俺がほしかったのは"スコープつきのタイプセーフな列挙子"だし、
機能詰め込んだとしてもC#のenum程度でいいよ
0587デフォルトの名無しさん
2010/05/05(水) 00:39:090588デフォルトの名無しさん
2010/05/05(水) 00:58:060589デフォルトの名無しさん
2010/05/05(水) 01:10:520590デフォルトの名無しさん
2010/05/05(水) 01:16:59それもSTLコンテナの場合、operator<<が定義されてないから使えないんだよな……
0591デフォルトの名無しさん
2010/05/05(水) 01:23:390592デフォルトの名無しさん
2010/05/05(水) 01:32:26ちゃんと読める名前を返すものと、一意性さえあればいいものと、2つ用意して欲しいわ
0593デフォルトの名無しさん
2010/05/05(水) 01:36:480594デフォルトの名無しさん
2010/05/05(水) 15:03:54システムコールバックが使いやすくなるな
GCなしでどう実装するのか分からないが
0595デフォルトの名無しさん
2010/05/05(水) 15:26:480596デフォルトの名無しさん
2010/05/05(水) 23:30:16classとstructの違いはデフォルトのアクセス性しかないのに
enum class とenum structで機能が違うのは紛らわしくね?
0597デフォルトの名無しさん
2010/05/05(水) 23:52:10enum struct は不許可にすべき
0598デフォルトの名無しさん
2010/05/06(木) 00:30:59そもそもコンテナの文字列表現なんて一意に決められるものでないから、
template<class Policy, class Container> class container_io_wrapper;
template<class Policy, class Container> container_io_wrapper container_io(Container& c);
std::vector<int> v = { 1, 2, 3, 4 };
std::cout << container_io<EnumPolicy>(v) << std::endl;
// 例えば [1, 2, 3, 4] のように表示される。
みたいなラッパーを自作するだろ普通。
0599デフォルトの名無しさん
2010/05/06(木) 08:37:22シグネチャが分かっててもダメなんかな。
0600デフォルトの名無しさん
2010/05/06(木) 08:49:07キャプチャした変数によって型は違うんじゃないの?
0601デフォルトの名無しさん
2010/05/06(木) 08:52:44翻訳単位が違えば型も別になるしなぁ。
静的型付けが大前提だし、template使うしかないのか・・・
0602デフォルトの名無しさん
2010/05/06(木) 09:38:55なってなさそうだなぁ
0603デフォルトの名無しさん
2010/05/06(木) 12:03:19virtualはあまり必要ないんじゃ?
あ、コンテナの中にBase, Derivedへのポインタが入っていた場合に欲しいか
0604デフォルトの名無しさん
2010/05/06(木) 12:09:12うん、C++的発想だとそうなるんだけど、つまりシグネチャ決めようがねーよなって話
0605デフォルトの名無しさん
2010/05/06(木) 12:31:36ただでさえキモいラムダ式がさらにキモくなるな
0606デフォルトの名無しさん
2010/05/06(木) 12:39:010607デフォルトの名無しさん
2010/05/06(木) 13:53:030608デフォルトの名無しさん
2010/05/06(木) 13:57:02これでBoost::lambdaはほとんど必要なくなるな
しかし見栄えが汚いな
C#3.0の時に汚いの分かってたろうからもう少し綺麗に見栄えのする
書式にできなかったものかねえ
0609デフォルトの名無しさん
2010/05/06(木) 14:37:53もうラムダさんの服装は無難で妥当に思えてきたよ
0610デフォルトの名無しさん
2010/05/06(木) 14:53:150611610
2010/05/06(木) 14:54:010612デフォルトの名無しさん
2010/05/06(木) 17:46:38他のすべての点においてVS2008に劣っている
0613デフォルトの名無しさん
2010/05/06(木) 18:50:40早めに出るかも知れない
その時にC++0xの時間が無くて入れられなかった機能を入れて欲しい(´・ω・`)
0614デフォルトの名無しさん
2010/05/06(木) 18:59:360615デフォルトの名無しさん
2010/05/06(木) 19:52:03rvalue reference の準拠文書が更新されてるってのを
Boost ML で見たような気がする。
0617デフォルトの名無しさん
2010/05/06(木) 20:21:290618デフォルトの名無しさん
2010/05/06(木) 20:22:50C++0xに関するバグはどれだけあろうがしょうがないんじゃない?
ただ2010から現在のC++0x機能を除いたら何が残るのか知らんけど。
0619デフォルトの名無しさん
2010/05/06(木) 20:24:220620デフォルトの名無しさん
2010/05/06(木) 20:45:350621デフォルトの名無しさん
2010/05/06(木) 20:56:45なるほど。確かにインテリセンスのバグはなくなったな。
0622デフォルトの名無しさん
2010/05/06(木) 23:08:42boost::lambdaはこんなこともできる。
auto m=boost::lambda::_1*2;
auto a=m(3); //戻りはint
auto b=m(1.3); //戻りはdouble
0623デフォルトの名無しさん
2010/05/06(木) 23:31:53std::mapとstd::tr1::shared_ptrを使ってみたけど両方共右辺値参照サポートしてるね。
0624デフォルトの名無しさん
2010/05/06(木) 23:34:07インテリセンスはよく効くようになってきてるね。
エラーのハイライトの反映が遅いね。処理中は薄くするかステータスバーに表示して欲しいな。
0625デフォルトの名無しさん
2010/05/07(金) 09:02:09すげー
0626デフォルトの名無しさん
2010/05/07(金) 13:36:52この機能はすごいと思うがさすがに必要ない
関数テンプレートで簡単に実現できちゃうもんな
0627デフォルトの名無しさん
2010/05/07(金) 20:40:14ラムダは無名関数を作れるのがメリット
0628デフォルトの名無しさん
2010/05/07(金) 20:55:55メリットどころか存在意義じゃね。
0629デフォルトの名無しさん
2010/05/07(金) 21:21:470630デフォルトの名無しさん
2010/05/07(金) 21:31:170631デフォルトの名無しさん
2010/05/07(金) 21:35:02これってテンプレート型変換演算子でもつかってんのかな、と思って
実装を見てみたが正直意味がわからない
0632デフォルトの名無しさん
2010/05/07(金) 21:36:31これってテンプレート型変換演算子でもつかってんのかな、と思って
実装を見てみたが正直意味がわからない
0633デフォルトの名無しさん
2010/05/07(金) 21:37:120634デフォルトの名無しさん
2010/05/08(土) 00:13:560635デフォルトの名無しさん
2010/05/08(土) 00:31:26まさかの二重投稿……0x
と、こうコンパクトなorzでw
0636デフォルトの名無しさん
2010/05/08(土) 00:31:580637デフォルトの名無しさん
2010/05/08(土) 02:57:47シグネチャが分かっているならstd::function<>を使えばいいのではないでしょうか。
0638デフォルトの名無しさん
2010/05/08(土) 11:13:090639デフォルトの名無しさん
2010/05/08(土) 11:14:37template < typename T >
void f( T t )
{
t() ;
}
int main()
{
f([]{}) ;
}
0640デフォルトの名無しさん
2010/05/08(土) 11:19:25シグネチャが指定したい場合はどう書けばいいの?
0641デフォルトの名無しさん
2010/05/08(土) 11:51:16std::functionのコンストラクターは、クラステンプレートの引数を取るんじゃないんだよね。
クラステンプレートのシグネチャで、関数オブジェクトが補足されるんじゃないんだよ。
だから、シグネチャは、知らなくてもいいんだよ。
>>639の例で、
f< void () >( []{} ) ;
とするのは、もちろんエラーだけど、functionの場合、
// primary template、宣言だけで定義されない
template< typename >
class function ;
// すべてのfunctionは、シグネチャに対する部分的特殊化のインスタンスである。
template< typename R, typename... ArgTypes>
class function< R( ArgTypes... ) >
{
public :
// コンストラクター
// type erasureのテクニックを使って、fを保持する。
// シグネチャについては知らなくてよい。
template < typename F >
function( F f ) ;
// operator ()()
// クラステンプレートに指定されたシグネチャで、fを呼び出す。
R operator()(ArgTypes...) const ;
} ;
0642デフォルトの名無しさん
2010/05/08(土) 15:46:56>>599 は引数で lambda 関数を渡すときに template 使いたくないって話だよね?
// f は非template関数
void f(std::function</.*なんか*/> &a) {
a();
}
f([]{});
と書けるってこと?
0643デフォルトの名無しさん
2010/05/08(土) 17:29:05少しコストはかかるし、ラムダの寿命を越えるとダングリングポインタになるけど、
実装可能ではあるよ
0644デフォルトの名無しさん
2010/05/08(土) 19:15:31それはできない。prvalueは非constな参照では受けられない。
まあ、単なる間違いだろうけど。
void f( std::function<void ()> const & a ) ;
あるいは、f()を以下のように呼び出すか。
std::function<void ()> a = []{} ;
f(a) ;
0645デフォルトの名無しさん
2010/05/08(土) 19:17:400646デフォルトの名無しさん
2010/05/08(土) 22:26:34ほー、そんな書き方ができるのか
便利だな
0647デフォルトの名無しさん
2010/05/09(日) 08:33:58あまりにも文法キモいんだけど
0648デフォルトの名無しさん
2010/05/09(日) 08:43:41こういう文法を使いつづけるほうが良いと?
0649デフォルトの名無しさん
2010/05/09(日) 08:48:49規格で属性を提供されてもね
そういうのはキーワードにして欲しい
0650デフォルトの名無しさん
2010/05/09(日) 09:14:020651デフォルトの名無しさん
2010/05/09(日) 10:40:440652デフォルトの名無しさん
2010/05/09(日) 10:44:05キーワードでいいじゃんと思う
キーワード増やしたくないのは分からなくはないが
0653デフォルトの名無しさん
2010/05/09(日) 11:16:14属性でそれがすっきりになるのか?
0654デフォルトの名無しさん
2010/05/09(日) 11:29:390655デフォルトの名無しさん
2010/05/09(日) 11:54:100656デフォルトの名無しさん
2010/05/09(日) 11:58:170657デフォルトの名無しさん
2010/05/09(日) 11:59:45オーバーライド
オーバードライブ
オーバーフロー
アンダースコート
の違いがわかりません
0658デフォルトの名無しさん
2010/05/09(日) 12:00:550659デフォルトの名無しさん
2010/05/09(日) 12:05:36識別子に日本語使いたいなあ、C#が羨ましい
0660デフォルトの名無しさん
2010/05/09(日) 12:12:020661デフォルトの名無しさん
2010/05/09(日) 12:16:080662デフォルトの名無しさん
2010/05/09(日) 12:16:43alignas復活するのならどうでもいいけど
0663デフォルトの名無しさん
2010/05/09(日) 12:17:09class にゃあ
{
0664デフォルトの名無しさん
2010/05/09(日) 12:18:20誤字見つけにくい場合があるわで最悪だ
0665デフォルトの名無しさん
2010/05/09(日) 12:18:51class にゃあ
{};
VS10マジで使えるよ。これは活用せねば。
c++0x構文がでふぉでイネーブルとかvs10気が利いてるなあ。
0666デフォルトの名無しさん
2010/05/09(日) 12:20:23C#で漢字使えるから活用しようと提案したら、0.1秒で却下された。
0667デフォルトの名無しさん
2010/05/09(日) 12:22:570668デフォルトの名無しさん
2010/05/09(日) 12:24:010669デフォルトの名無しさん
2010/05/09(日) 12:24:390670デフォルトの名無しさん
2010/05/09(日) 12:26:130671デフォルトの名無しさん
2010/05/09(日) 12:26:560672デフォルトの名無しさん
2010/05/09(日) 12:27:32ニダー ウり;
0673デフォルトの名無しさん
2010/05/09(日) 12:28:58プログラムなんか書いてらんない
0674デフォルトの名無しさん
2010/05/09(日) 12:29:560675デフォルトの名無しさん
2010/05/09(日) 12:35:570676デフォルトの名無しさん
2010/05/09(日) 13:06:12送り仮名などの表記揺れは困るので、無理に ASCII 外の文字を使う必要はない。
0677デフォルトの名無しさん
2010/05/09(日) 13:10:49無理に同じにしなくても
0678デフォルトの名無しさん
2010/05/09(日) 13:25:14>識別子に日本語使ってる人とは仕事したくねえな…
class おまんこ {
public:
void insert(Foo f);
};
ゴクリ・・・
0679デフォルトの名無しさん
2010/05/09(日) 13:29:48{
if (f.resNo() == 678) { cout << "うんこを突っ込まれた方がまし"; abort(); }
}
0680デフォルトの名無しさん
2010/05/09(日) 13:32:100681デフォルトの名無しさん
2010/05/09(日) 13:33:030682デフォルトの名無しさん
2010/05/09(日) 13:46:51COBOLの二の舞になるぜ。
あれはローマ字だけど。
0683デフォルトの名無しさん
2010/05/09(日) 13:48:320684デフォルトの名無しさん
2010/05/09(日) 14:00:460685デフォルトの名無しさん
2010/05/09(日) 14:01:240686デフォルトの名無しさん
2010/05/09(日) 14:18:550687デフォルトの名無しさん
2010/05/09(日) 15:44:390688デフォルトの名無しさん
2010/05/09(日) 15:45:56と
abort();
って、効力的には同じでしょうか。
両方ともデバッグビルドで有効で、リリースビルドで消えますか?
0689デフォルトの名無しさん
2010/05/09(日) 15:48:110690デフォルトの名無しさん
2010/05/09(日) 15:54:07知りませんでした。
ありがとうございます。
0691デフォルトの名無しさん
2010/05/09(日) 15:58:400692デフォルトの名無しさん
2010/05/09(日) 16:00:160693デフォルトの名無しさん
2010/05/09(日) 16:00:26assertの引数の式が評価されなくなる、が正解
0694デフォルトの名無しさん
2010/05/09(日) 16:01:08字面が
0695デフォルトの名無しさん
2010/05/09(日) 16:07:03失礼しました。
しかもNDEBUGマクロとか初めて知りました。
確かにISOの規格書をNDEBUGで検索するとはっきり書いてありました。
済みません。
0696デフォルトの名無しさん
2010/05/09(日) 16:22:200697デフォルトの名無しさん
2010/05/09(日) 17:59:41そういう話は無いの
0698デフォルトの名無しさん
2010/05/09(日) 18:14:01可変個テンプレート引数は変態御用達なだけでしょうな。
0699デフォルトの名無しさん
2010/05/09(日) 18:16:04可変個テンプレート引数は変態御用達なだけでしょうな。
0700デフォルトの名無しさん
2010/05/09(日) 18:18:090701デフォルトの名無しさん
2010/05/09(日) 18:20:530702デフォルトの名無しさん
2010/05/09(日) 18:34:330703デフォルトの名無しさん
2010/05/09(日) 18:36:040704デフォルトの名無しさん
2010/05/09(日) 18:41:52public:
template <typename P...> void alloc(const P&... values) { m_pair = new Pair(values...); }
T* operator->() { return m_pair == nullptr ? nullptr : &m_pair->obj; }
T& operator*() { assert(m_pair != nullptr); return m_pair->obj; }
private:
struct Pair {
T obj;
int cnt;
template <typename P...>
Pair(const P&... values) : obj(values...), cnt(1) { }
};
std::unique_ptr<Pair> m_pair;
};
カウントする部分は今はどうでもいいから書かないけど
こういう事はできるのかい?
0705デフォルトの名無しさん
2010/05/09(日) 18:55:44コンストラクタへの引数丸投げなら標準がやってる
std::make_sharedとか
0706デフォルトの名無しさん
2010/05/09(日) 18:58:260707デフォルトの名無しさん
2010/05/09(日) 19:01:11その前にregexが採用されてxpressiveが採用されないとか,
boost::scoped_ptrが何故採用されないのかとか
結構 言いたい事はあるよな。
やっぱ歴史が足りないんじゃないの?
0708デフォルトの名無しさん
2010/05/09(日) 19:03:28メモリリークになってしまう。
0709デフォルトの名無しさん
2010/05/09(日) 19:07:39つか名前変えただけというか
xpressiveは技巧的すぎたのかねえ
0710デフォルトの名無しさん
2010/05/09(日) 19:10:000711デフォルトの名無しさん
2010/05/09(日) 19:10:19C++ に Template metaprogramming を補強する
新しい機構をどんどん導入しているわりには、
Template metaprogramming で書かれた boost ライブラリを
採用しようとしない様な気がする。
特に xpressive, それ以外にも・・・ねぇ。
0712デフォルトの名無しさん
2010/05/09(日) 19:14:34intrusive_ptrはshared_ptrに対してメリットが少ないし、共有系が複数あると面倒だからじゃないか。
0713デフォルトの名無しさん
2010/05/09(日) 19:15:070714デフォルトの名無しさん
2010/05/09(日) 19:16:440715デフォルトの名無しさん
2010/05/09(日) 19:16:53少々あってもいいじゃん
0716デフォルトの名無しさん
2010/05/09(日) 19:54:24テンプレートメタプログラミングは標準にするには敷居が高いでしょう。
enable_ifぐらいなら単純デメリットも多いとは思うよ。
0717デフォルトの名無しさん
2010/05/09(日) 19:55:37×単純デメリットも
○単純でメリットも
0718デフォルトの名無しさん
2010/05/09(日) 19:57:4020.7 Metaprogramming and type traits
0719711
2010/05/09(日) 20:17:050720デフォルトの名無しさん
2010/05/09(日) 21:05:320721デフォルトの名無しさん
2010/05/09(日) 21:07:190722デフォルトの名無しさん
2010/05/09(日) 21:11:45> テンプレートプログラミングと、テンプレートメタプログラミングの境目ってどこ?
前者が本来想定されていた使い方で、
後者は仕様の隙間を付いた本来は想定されていない使用法。
0723デフォルトの名無しさん
2010/05/09(日) 21:20:52プログラムの動作に対するプログラミングか、プログラムコードに対するプログラミングかの違い。
0724デフォルトの名無しさん
2010/05/09(日) 21:22:31コンパイル時に動作するプログラムのようなものと考えれば良い
0725デフォルトの名無しさん
2010/05/09(日) 21:24:130726デフォルトの名無しさん
2010/05/09(日) 21:25:32一定の制限があるがそれを忘れていいなら
チューリング完全であることは証明されている。
0727デフォルトの名無しさん
2010/05/09(日) 22:22:200728デフォルトの名無しさん
2010/05/09(日) 22:23:270729デフォルトの名無しさん
2010/05/09(日) 23:24:44上限がないと本当にコンパイラが停止問題を解かなければならなくなるから
制限が付いてる
0730デフォルトの名無しさん
2010/05/09(日) 23:52:27そういう理由なの?
最低限アテにしていい回数を保証するためじゃなくて?
0731デフォルトの名無しさん
2010/05/09(日) 23:52:57確かそういう制限一覧ってのがあったな。
Recursively nested template instantiations [17].
うわぁ、もうちょっと頑張ろうよ。
せめて255とか、現実的に問題になりにくそうな数字にすれば
良いのになぁ。
ISO/IEC 14882:1998(E) -- C++ -- Implementation quantities
ttp://www.kuzbass.ru/docs/isocpp/limits.html
0732デフォルトの名無しさん
2010/05/09(日) 23:54:52> 最低限アテにしていい回数を保証するためじゃなくて?
それもある。
というか2つの側面がある。
17と定める事により、コンパイラ実装者は17までで作ればよくなるし、
ユーザーも17まではネストできると信じて作れる。
規格とはユーザーとコンパイラ実装者の間の決まり事だから。
0733デフォルトの名無しさん
2010/05/09(日) 23:58:49最新のドラフトでは超パワーアップされてるよ。
> Recursively nested template instantiations [1024].
0734デフォルトの名無しさん
2010/05/10(月) 00:06:190735デフォルトの名無しさん
2010/05/10(月) 00:08:21C++、プリプロセッサ、テンプレート、アセンブラ。
0736デフォルトの名無しさん
2010/05/10(月) 00:16:390737デフォルトの名無しさん
2010/05/10(月) 00:34:46テンプレートの事に成ると平気で越境してあーだこーだと不満言い出すのはナゼ?
0738デフォルトの名無しさん
2010/05/10(月) 00:38:390739デフォルトの名無しさん
2010/05/10(月) 00:39:030740デフォルトの名無しさん
2010/05/10(月) 08:35:150741デフォルトの名無しさん
2010/05/10(月) 10:23:55重箱の隅をつつくような議論しか目に付かないのだけど
0742デフォルトの名無しさん
2010/05/10(月) 11:23:230743デフォルトの名無しさん
2010/05/10(月) 11:53:590744デフォルトの名無しさん
2010/05/10(月) 11:55:31俺ってこんなに頭がいいんだぜ、ということをアピールしたいだけなので、
「言う側」にだけなれて、決して「言われる側」になることのない場所からしかモノ言いません。
0745デフォルトの名無しさん
2010/05/10(月) 12:00:35そしてそういう人は逆に協調性が無いので他人との共有に無関心だったりする
0746デフォルトの名無しさん
2010/05/10(月) 12:33:520747デフォルトの名無しさん
2010/05/10(月) 13:44:10そんなに日本人の足を引っ張るようなこと言わんでも…
まさに日本人の敵は日本人だなw
0748デフォルトの名無しさん
2010/05/10(月) 15:11:320749デフォルトの名無しさん
2010/05/10(月) 20:55:25イギリスやドイツと比べてみろよ本当にひどいから
クレクレと重箱の隅つつきばかりで建設的なコメントが一つもない
0750デフォルトの名無しさん
2010/05/10(月) 21:04:23背中から撃ち続ける気満々だねえw
0751デフォルトの名無しさん
2010/05/10(月) 22:53:02でも肝心な場所では子リスのように震えているだけ。
0752デフォルトの名無しさん
2010/05/10(月) 22:57:030753デフォルトの名無しさん
2010/05/10(月) 23:30:260754デフォルトの名無しさん
2010/05/10(月) 23:30:570755デフォルトの名無しさん
2010/05/10(月) 23:42:12じゃあ、自分でNBコメント出したり、アドホック会議行ってこいよ。
NBコメント:ttp://cpplover.blogspot.com/2010/04/cfcdnb.html
アドホック会議:ttp://homepage1.nifty.com/herumi/prog/cppwg.html
0756デフォルトの名無しさん
2010/05/10(月) 23:43:15面白そうだな。これ傍聴とかできるの?
0757デフォルトの名無しさん
2010/05/10(月) 23:52:03> オーバーロード
過剰に流しこむ→元の加えて、他のが増える
> オーバーライド
上にかぶせる→元のが見えなくなる
> オーバードライブ
過剰に駆動する→元以上に頑張らせる
> オーバーフロー
超えて流れる→溢れる
> アンダースコート
エロス
0758デフォルトの名無しさん
2010/05/11(火) 00:10:14去年、CDがでたときにも、まったく同じことをやっていた。
ただ、もうFCDなんで、クレクレはできないよ。
typoとか矛盾点の指摘とか、重箱の隅をほじくるようなことしかできない。
アドホック会議は、こうして一般から集まったコメントに対して、議論して、
日本を代表して出すコメントを決定する。
0759デフォルトの名無しさん
2010/05/11(火) 03:52:56それとは別に、何か新しい言語仕様/仕様拡張に貢献した例とかはないのかね?
という疑問でした。
秀才さんたちには、新しい物を作るのは不得手なんだなぁということでしょうね
0760デフォルトの名無しさん
2010/05/11(火) 04:06:19秀才を「調べるのに手一杯でどうにもならない駄目人間」だと勘違いしてないか?
0761デフォルトの名無しさん
2010/05/11(火) 04:18:09問題点の洗い直しこそ開発者・言語研究者としての能力を要する点なのだが
0762デフォルトの名無しさん
2010/05/11(火) 04:25:46>問題点の洗い直しこそ
じゃそういった研究はやっているんですね?
けど、問題点を解決する提案は出せない。ということですかね?
政治的というより、コンパイラ作成に携わっている人が(ほとんど)いないことが原因でしょうね
0763デフォルトの名無しさん
2010/05/11(火) 04:29:45>けど、問題点を解決する提案は出せない。ということですかね?
出てるが、出てることが理解できないというですかね?
0764デフォルトの名無しさん
2010/05/11(火) 05:06:170765デフォルトの名無しさん
2010/05/11(火) 05:32:18けどドラフトペーパーに日本人の名前あったけ?
0766デフォルトの名無しさん
2010/05/11(火) 08:41:09そしたらがんばって実装するのに
0767デフォルトの名無しさん
2010/05/11(火) 08:53:12グラマー「え!?」
0768デフォルトの名無しさん
2010/05/11(火) 11:09:25秀才ごときがどれだけ束になっても759の足元にも及ばないと豪語しているわけですね。
0769デフォルトの名無しさん
2010/05/11(火) 11:25:37中国はあるのにねぇ
国力の差か。
0770デフォルトの名無しさん
2010/05/11(火) 11:31:420771デフォルトの名無しさん
2010/05/11(火) 11:37:170772デフォルトの名無しさん
2010/05/11(火) 11:54:470773デフォルトの名無しさん
2010/05/11(火) 12:06:07なんだから、仕様提案ができないのは、政治的発言力が無い証拠だよなぁ。
大学で gcc の派生コンパイラとかまではザラにあるけど、
まともな提案を作って、働きかけて、物にすることができる人はいない。
レポート出したらそれっきりだしね。
某 ML のオフ会でも、たまにこの話題が出てくるけど、何もできないね。でオチついて終わり。
0774デフォルトの名無しさん
2010/05/11(火) 12:31:050775デフォルトの名無しさん
2010/05/11(火) 15:47:48仕様提案といえばEmbedded C++があるじゃないか。
これがトラウマになって今の状況を招いたのだったりして。
0776デフォルトの名無しさん
2010/05/11(火) 19:28:070777デフォルトの名無しさん
2010/05/11(火) 19:39:11decltypeは、難しすぎて俺らには実装できないし、そもそも新しすぎて俺らには使いこなせないので却下。
autoは、難しすぎて俺らには実装できないし、そもそも新しすぎて俺らには使いこなせないので却下。
Variadic Templateは(ry
lambdaは(ry
scoped enumは(ry
0778デフォルトの名無しさん
2010/05/11(火) 21:16:440779デフォルトの名無しさん
2010/05/11(火) 21:39:10ようやく普通のテンプレートが入るならそれでもいいけどなw
0780デフォルトの名無しさん
2010/05/11(火) 22:03:49Javaのgenericsみたいなのが入ります
0781デフォルトの名無しさん
2010/05/11(火) 23:24:400782デフォルトの名無しさん
2010/05/11(火) 23:39:32alignas でいいじゃないですかぁ
0783デフォルトの名無しさん
2010/05/11(火) 23:56:15JAVAのげねりっくの正体はキャストって聞いたけど本当?
0784デフォルトの名無しさん
2010/05/12(水) 00:01:310785デフォルトの名無しさん
2010/05/12(水) 00:06:42そこは戻ることに気付かずにC++0xともC1Xとも互換性失った方がEC++らしい
0786デフォルトの名無しさん
2010/05/12(水) 00:13:54行けるんだけど、あっちもあっちでC++0xとの同期を意識しているんだよな。
0787デフォルトの名無しさん
2010/05/12(水) 00:16:20お互いに
0788デフォルトの名無しさん
2010/05/12(水) 02:10:050789デフォルトの名無しさん
2010/05/12(水) 02:53:57GCはともかくクロージャは並列プログラム等いろんな所で有用だし、
既にAppleは実現させてるでしょ。
http://blog.8-p.info/2009/09/gcd-1
0790デフォルトの名無しさん
2010/05/12(水) 03:10:05Apple拡張のクロージャは「GCはともかく」というよりGCありきでしょ
というかクロージャなんてオブジェクト機構を伴うことが前提なんだから
明らかに「Cのカバー範囲」を逸脱しまくってるだろ
ObjCがアレだからCのレイヤに二重実装してケツ拭かせますと言っているに等しい
0791デフォルトの名無しさん
2010/05/12(水) 07:09:59もしかしてOS自体がGCサポートしてんの?
0792デフォルトの名無しさん
2010/05/12(水) 07:31:470793デフォルトの名無しさん
2010/05/12(水) 07:33:530794デフォルトの名無しさん
2010/05/12(水) 07:42:32ちょw何を言い出すんだw
0795デフォルトの名無しさん
2010/05/12(水) 13:39:41ブロック自体にretain,releseかますし。
0796デフォルトの名無しさん
2010/05/12(水) 13:49:21構造体とフル機能のクロージャがあればそれだけでオブジェクト指向言語になってしまうので
「Cの」拡張としては恐ろしく筋が悪いものに感じる
インラインで「関数が」書ける機能ならCらしくて分かるんだが……
そもそもObjective-Cの拡張としなかった理由がよく分からんなぁ
どっかで「Cの拡張ならBSDカーネルに取り込める」とか強弁してた奴がいるけど
Cの「独自」拡張を使ってカーネル書くくらいならまだObjective-Cでカーネル書いた方がマシだろうと
0797デフォルトの名無しさん
2010/05/12(水) 13:59:240798デフォルトの名無しさん
2010/05/12(水) 14:10:140799デフォルトの名無しさん
2010/05/12(水) 14:13:42C++0xの機能を全部C1xにバックポートすれば、超便利な機能がCでも使えて単純に考えてお得じゃない?
0800デフォルトの名無しさん
2010/05/12(水) 18:29:280801デフォルトの名無しさん
2010/05/12(水) 19:14:16Cでも使える構文になったから
Cでも使えるようにしちゃえ
でしょ。どうせ
0802デフォルトの名無しさん
2010/05/12(水) 19:31:30AppleクロージャはObj-CのオブジェクトじゃないからObj-C用に設計したものではないよ
Obj-C用に設計しようとしたがあまりにパフォーマンスが悪くてObj-Cと切り離さざるを得なくなった
という方が実態に近いと思う
でもオブジェクト機構と乖離したクロージャって物凄くいびつだと思うんだが
ああいうのって世間の言語設計者的にはOKなんだろうかね
0803デフォルトの名無しさん
2010/05/12(水) 21:21:06Obj-C で完結する部分には元々のブロックで充分じゃない?
>>802
逆じゃない?
オブジェクトは貧者のクロージャで、環境を文脈として保持するのが本来のクロージャでしょ。
だから Obj-C の blocks も微妙じゃないかな。
0804デフォルトの名無しさん
2010/05/12(水) 21:44:54環境だってデータなんだから、クロージャはデータを持った手続きであって
つまり表面上、データが主で手続きが従か、手続きが主でデータが従か、の違いだけで
クロージャはオブジェクトの一種というか表と裏のような概念。
実際オブジェクト指向言語におけるクロージャはそういう概念で設計・実装されてる。
Javaの無名Runnableなんかは明らかにオブジェクト寄りのクロージャで中間概念として分かりやすいんじゃないかな。
0805デフォルトの名無しさん
2010/05/12(水) 22:31:200806デフォルトの名無しさん
2010/05/12(水) 22:43:13そういう問題じゃないだろw
0807デフォルトの名無しさん
2010/05/12(水) 23:10:30BSDがLLVM-Clang移行したらGCDも導入されるのかな。
ttp://developer.apple.com/mac/articles/cocoa/introblocksgcd.html
ttp://developer.apple.com/snowleopard/library/documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html
ttp://clang.llvm.org/docs/LanguageExtensions.html#blocks
0808デフォルトの名無しさん
2010/05/13(木) 11:07:36ぶっちゃけGCDはjava.util.concurrentの簡易版みたいなものだから
クロージャ無いと無理というわけではないと思われ
BSDがカーネル内でBlocks使うって噂もあるけど
独自拡張使ってカーネル書くのは正直それってどうなのって気はするな。
0809デフォルトの名無しさん
2010/05/13(木) 20:46:43LinuxカーネルなんてGCCに依存どころかほとんど癒着してるぞ
0810デフォルトの名無しさん
2010/05/13(木) 20:56:51処理系依存なコードは必要最小限に抑えるのがまともな実装。
0811デフォルトの名無しさん
2010/05/13(木) 21:27:06頭の中に花畑があるようですね
0812デフォルトの名無しさん
2010/05/13(木) 22:10:340813デフォルトの名無しさん
2010/05/13(木) 22:36:16http://www.ibm.com/developerworks/jp/linux/library/l-gcc-hacks/
0814デフォルトの名無しさん
2010/05/13(木) 22:48:08全体的に代替マクロで潰せるものが多いね
範囲caseとゼロ長配列は冗長だけど標準で書けるんだから標準で書けとは思った
ロジック的に完全にGCCに依存してそうなのは定数判定かな
0815デフォルトの名無しさん
2010/05/13(木) 23:19:26> 全体的に代替マクロで潰せるものが多いね
どうやって? どれ一つとしてマクロで出来る様には思えなかったけど。
0816デフォルトの名無しさん
2010/05/13(木) 23:29:38御託はいいから置き換えて晒してみろよ
0817デフォルトの名無しさん
2010/05/13(木) 23:51:160818デフォルトの名無しさん
2010/05/14(金) 00:02:23最適化ヒントは全部空文字列と置換可能だろ
0819デフォルトの名無しさん
2010/05/14(金) 00:21:01この機能自体は大抵のコンパイラでマクロ使ってエミュレート可能かな
・範囲拡張・ゼロ長の配列
gcc拡張使えば楽になるのは分かるけど、こらえてベタ書き汁
・呼び出しアドレスの判断
スタック辿れば可能だが、こんな情報は引数で渡すべきじゃないのか
・定数検出
これは専用の文法ないと厳しいかな
全部定数でないと見なして最適化を諦めることは可能だけどパフォーマンスすごく悪そう
・関数属性
各コンパイラごとに存在するならそれに置換、無ければ空にすればいいだけ
よくある話
・最適化に関する拡張機能
上に同じ
下2つはVC/GCC両対応コード書く時とかマクロで切り替えるの常套手段だと思うんだけど
>>815がなぜ「マクロで出来るように思えなかった」のかがむしろわからんなぁ
0820デフォルトの名無しさん
2010/05/14(金) 03:03:13Blocksさんに比べれば我らがラムダさんの制服の柄は許容範囲
という認識でよろしいか
0821デフォルトの名無しさん
2010/05/14(金) 07:38:12__block int (^F)(int);
F = ^(int n) {
if (n == 0) return 1;
else return n * F(n-1);
};
NSLog(@"%d", F(5));
int (^ (^F2)(int (^)(int)))(int);
F2 = ^(int (^f)(int)) {
int (^f2)(int);
f2 = ^(int n){
if (n == 0) return 1;
else return n * f(n-1);
};
return f2;
};
NSLog(@"%d", F2(F)(5));
0822デフォルトの名無しさん
2010/05/14(金) 13:26:43Scheme や Smalltalk や ECMAScript などのクロージャが物凄くいびつだと。
0823デフォルトの名無しさん
2010/05/14(金) 13:34:09お前が夢ばかり見てるオバカさんだってのはよくわかった
0824デフォルトの名無しさん
2010/05/14(金) 13:49:32その辺はむしろクロージャこそがオブジェクト機構の主体なんだから一貫してるよ
ECMAScriptにclassを更に足してしまったActionScriptはいびつと言っていいと思う
Blocksは「Cを単体でECMAScriptのような言語にする」機構なので
Objective-Cとして使われることを前提とした拡張だとむしろActionScript状態に近い
0825デフォルトの名無しさん
2010/05/14(金) 14:04:140826デフォルトの名無しさん
2010/05/14(金) 14:12:04え、どの辺が具体的じゃない?
ScmemeやECMAScriptはクロージャ機構からオブジェクト機構が導出されている
C++とかJavaとかRubyとかはオブジェクト機構があってそこからクロージャが導出されている
Objective-C with Blocksは、Blocksというクロージャ機構があり、かつそれと直交したオブジェクト機構を持つ
そんなに難しいことではないと思うけど、分かりにくいとこある?
0827デフォルトの名無しさん
2010/05/14(金) 14:14:280828デフォルトの名無しさん
2010/05/14(金) 14:20:240829デフォルトの名無しさん
2010/05/14(金) 14:24:47いやめっちゃ分かりやすく書いたつもりだったので衝撃を受けただけ
>>827ってことなら気にせんでくれ
0830デフォルトの名無しさん
2010/05/14(金) 15:06:20スタック辿ればとか言ってる時点で処理系依存しまくり
引数とかいうがプログラムカウンタをアーキテクチャ依存無しで取ってみろ
0831デフォルトの名無しさん
2010/05/14(金) 15:18:56具体性に欠ける
0832デフォルトの名無しさん
2010/05/14(金) 15:28:520833デフォルトの名無しさん
2010/05/14(金) 15:53:59Smalltalk は違うよ。
というか、クロージャでできることは全てオブジェクトでできるけど、クロージャを欲しがる理由はオブジェクトとは関係ない。
そして ECMAScript 的なクロージャは元々あるブロックを使えばいい。
0834デフォルトの名無しさん
2010/05/14(金) 16:24:34smalltalkはRubyと同じで、というか由来的には逆だけど
ブロックはオブジェクト機構の枠内にいるよ
ブロックとオブジェクト機構が直交した独立の存在にはなってない
0835デフォルトの名無しさん
2010/05/14(金) 17:26:43それがブロックそのものではなく、オブジェクトにはなってない。
0836デフォルトの名無しさん
2010/05/14(金) 18:02:23Procはオブジェクトだぞ
ちょうどC++0xのlambdaで返るfunctionと同じ立ち位置
0837デフォルトの名無しさん
2010/05/14(金) 18:09:11話しについて行けない。
0838デフォルトの名無しさん
2010/05/14(金) 18:20:25Procはオブジェクトなんだけど、ブロックがすなわちProcではない。
def foo &c で、ブロックを変数に入れるか、引数なしで Proc.new を呼ぶと、
ブロックからProcのインスタンスが作られる。
0839デフォルトの名無しさん
2010/05/14(金) 18:27:17今君の言ってるところの「ブロック」って「構文木」のこと?
普通ブロックとかクロージャとか言う時は、
キャプチャされたローカル変数とコードの組み合わせのことであって、
構文木のことは指さないんじゃない?
0840デフォルトの名無しさん
2010/05/14(金) 18:32:53def foo
yield
end
def bar &c
c.call
end
foo{p "foo"}
bar{p "bar"}
これを実行した時、p "foo"に相当する「キャプチャされたローカル変数とコードの組み合わせ」は、
Ruby処理系内部のデータ構造としてしか存在していない。
p "bar"のほうはProcのインスタンスが作られる。
0841デフォルトの名無しさん
2010/05/14(金) 18:39:11それは論理的にはProcインスタンスが匿名かどうかの問題でしかないぞ
0842デフォルトの名無しさん
2010/05/14(金) 19:10:34Smalltalkのブロックは、クロージャーで実装されていることが多い(が、そうでない場合〜エンクローズされていない〜もある)。
Rubyのブロックや Objective-C の Blocks はこのSmalltalkのブロックから名前を借りたもの。
Rubyのブロックは、ファーストクラスオブジェクトでも Ruby のオブジェクトでもない。(840の言いたいこと)
Rubyのブロックをオブジェクトとして扱えるように用意されたのが Proc クラス。
0843デフォルトの名無しさん
2010/05/14(金) 19:23:12んっとね、Rubyのブロック構文は基本的にProc(など)の定義であり
そのProcインスタンスが外部から可視であるかは問題ではない
というのが>>841で言いたかったことね。
この点は言語設計として一貫してるよ。smalltalkも基本的にそうでしょ。
#もちろん最適化の結果、内部でいつの間にかショートカットされてることはあり得る
クロージャというオブジェクトとは直交した全く別の構造があって
Procというインターフェースから間接的にアクセスできる
という論理構造"ではない"
でもApple CのBlocksは当然根本的にObjective-Cのインスタンスではない。
何故ならObjectiveじゃないCの中に存在している概念だから。
逆にBlocksが常にObjective-Cのインスタンスであるなら>>799を地で行くことになる。
0844デフォルトの名無しさん
2010/05/14(金) 19:46:44あんな__付きまくりなものに仕様的整合で目くじら立ててもしょうがないしスレ違い
0845デフォルトの名無しさん
2010/05/14(金) 20:06:010846デフォルトの名無しさん
2010/05/14(金) 20:13:10内部的に存在するが外部からアクセス手段がないことを「実際に存在しない」と言うのか
0847デフォルトの名無しさん
2010/05/14(金) 20:17:330848デフォルトの名無しさん
2010/05/14(金) 20:25:090849デフォルトの名無しさん
2010/05/14(金) 20:31:03NSBlock のサブクラス検索したけど、どれも変数持たないし。
0850デフォルトの名無しさん
2010/05/14(金) 20:36:39ObjCとは切り離されてると思う。
ObjCのオブジェクトはパフォーマンスが悪すぎて
クロージャを表現するには正直きついので、
同種の機構を二重に実装するダサさは目をつぶってCに入れた、
という認識の方が実態に近いかと。
0851デフォルトの名無しさん
2010/05/14(金) 20:40:360852デフォルトの名無しさん
2010/05/14(金) 21:16:03クロージャをオブジェクトのシンタックスシュガーとして扱えないほど重いってそれ自体がかなりむごい話に聞こえるんだが・・・
0853デフォルトの名無しさん
2010/05/14(金) 21:30:140854デフォルトの名無しさん
2010/05/14(金) 21:30:290855デフォルトの名無しさん
2010/05/14(金) 22:17:32staticな関数コールと素のmessage sendを比べると10倍どころでは済まないと思う
0856デフォルトの名無しさん
2010/05/16(日) 13:18:17ブロックを辞書に格納することはできるけど、ブロックは辞書で表現されてないよ。
[|a|a:=10.[^a] value] の 内側のブロックから a を参照することをオブジェクト機構の枠内というのは強弁だと思うよ。
というか直行してるといびつだという理由を教えて欲しい。
コストの安いほうでいいじゃん。
0857デフォルトの名無しさん
2010/05/16(日) 18:09:57何故に唐突に辞書が……
0858デフォルトの名無しさん
2010/05/16(日) 18:50:14Objective-CはObjective-C++として使われるのは不可避なわけで
lambdaをObjective-Cの中に置くことを最初から諦めるなら
最初からC++のlambdaを使えば良かったんじゃないのと思うのは俺だけ?
0859デフォルトの名無しさん
2010/05/16(日) 19:27:110860デフォルトの名無しさん
2010/05/17(月) 13:40:22論理的に包摂関係にあるものを全く別々の独立した2つの仕様として策定するのは、設計としてはダサいだろ。
一貫した仕様を定義し、最適化の過程で内部実装は切り分けられる、というのが基本。
あくまで原則論なので過去の負の遺産との整合上仕方ないこともあるし、いわんや独自拡張で何やろうと知ったことではないがな。
0861デフォルトの名無しさん
2010/05/17(月) 13:49:48論理的に包摂関係にある、というのがさっぱり理解できないんだけど。
バナナで釘が打てるからバナナも金槌に包摂されると主張しているように聞こえる。
俺は、クロージャとオブジェクトは、たまたま一部について同じことができるだけの別物だと思う。
0862デフォルトの名無しさん
2010/05/17(月) 13:55:18オブジェクトとクロージャは「たまたま一部について同じことができる」なんてレベルじゃないだろ。
バナナが存在するところにリンゴを追加する際に、果物クラスを作らずリンゴクラスが独立して作られて、バナナとリンゴは違うだろ、と主張しているように聞こえる。
それどころか青リンゴと赤リンゴくらいの関係じゃないか。
0863デフォルトの名無しさん
2010/05/17(月) 17:43:39理解できないと言っているのだから説明してよ。
包摂関係とはどういうことかの説明じゃなくて、オブジェクトがクロージャを包摂するということについてね。
860 の「論理的に包摂関係にある」ということは、論理的に説明できるんだよね?
包摂関係にあることの確認を、論理的に行えると考えていいんだよね?
あと、バナナの話は凍らせた時の話で、殺伐としすぎないようにジョークで出したのだけれども、場違いだったようで失礼。
http://www.youtube.com/watch?v=Po_B6SHWUdI
0864デフォルトの名無しさん
2010/05/17(月) 18:06:42包摂関係と言うと語弊があると思う
むしろ同じものの表と裏と言った方が概念的には正しい
0865デフォルトの名無しさん
2010/05/17(月) 18:17:580866デフォルトの名無しさん
2010/05/17(月) 18:26:59オブジェクト⊃クロージャじゃないの?
「オブジェクト」の定義がよくわからんが、どうせ
「データと手続きを一緒にしたもの」ぐらいだろ?
なら、そういう包含関係にならざるを得ないと思う
クロージャはレキシカルスコープと密接に絡んだ概念だから、(より一般的な)
オブジェクトより狭い概念だと思うけど?
0867デフォルトの名無しさん
2010/05/17(月) 18:36:51了解した。
その上で、
1) 表と裏であることを示してくれ
2) 表と裏である機能(性質? 事象?)を、独立した別々の機構として策定するのがダサい理由を説明してくれ
虚数表現とか表色系とか、いろいろあると思うがどうだろう
をお願い。
>>866
クロージャでできることをオブジェクトで行うことはできる。
が、ローカル変数を含めたレキシカルスコープへの参照を束縛するという機能なり概念なりはオブジェクトにはない。
クロージャの概念のほとんどをオブジェクトが持つといっても反対はしないが、全てではない。
クロージャが持ち、オブジェクトが持たない概念が存在する。
ちなみに俺は、同じことができるだけで別モンだと思うけどね。
金属バットとバールのようなものくらい違うと思うよ。
0868デフォルトの名無しさん
2010/05/17(月) 18:39:47よくわからんけど、あんたの言う「オブジェクト」の定義って何?
「クラス」の話?
0869デフォルトの名無しさん
2010/05/17(月) 18:42:53実際にJavaScriptとかLisp系とかはクロージャでオブジェクトを実現しているよ
理論上は得意不得意の違いだけで扱えるスコープは同じになる
0870869
2010/05/17(月) 18:44:55扱えるスコープ→扱える「問題の」スコープ
です
このため、片方が存在すれば、もう片方は単なるシンタックス上のトリックとして扱えます
0871デフォルトの名無しさん
2010/05/17(月) 18:45:45あのね、
俺はオブジェクトのほうが広い(曖昧な)概念で
クロージャは、より狭い概念だと言ってるんだよ
出来ることの差なんてそりゃ無いが、概念の広い狭いとは全然関係ない話だろ
0872デフォルトの名無しさん
2010/05/17(月) 18:54:51うーん、それはどうだろう
C++的な立場から見るならそれで合ってる
コンピュータ上での実際の動作という意味でもその方が実態に近い
でも関数型的な観点で言えばクロージャの方がよりプリミティブな概念になっちゃうんだよね
だからどっちが広いとか狭いとかいうよりも「表と裏」なのだと思う
多分オブジェクトの方が表なのだろうけど
0873デフォルトの名無しさん
2010/05/17(月) 19:18:21んーそれじゃ、あんたの「オブジェクト」の定義は何なの?
俺の定義は>>866でしかないから、紛れも無くクロージャは「オブジェクトの
一種」でしかないんだけど
「オブジェクト」は別にレキシカルスコープと関係なくてもいいし
データは環境でなくてもいい
だからクロージャはより「狭い」
0874872
2010/05/17(月) 19:22:44ん、俺の定義も>>866と変わらんよ
…ところで俺は「オブジェクトとクロージャは直交してる」と言い張ってる人とは別人ですよ……?
0875デフォルトの名無しさん
2010/05/17(月) 19:28:19あ、そうなの?その定義なら
オブジェクト⊃クロージャ
は自明というか、論理的にそうにしかならんでしょうに
0876デフォルトの名無しさん
2010/05/17(月) 19:34:23いや、関数型の世界では手続きは情報を持っていることが当たり前で
オブジェクト的なものはその一種でしかないんだわ
だから君のような考え方はC++の観点では自明なんだけど
一方で関数型の世界では「クロージャの概念がオブジェクトの概念を内包している」ことになる
手続き型と関数型があってどっちが内包するわけじゃなくてどっちもチューリング完全だよねみたいな感じ
実装は通常最終的に手続き型で行われるからマシンレベルで最もプリミティブなのは前者ではあろうけど、と
0877デフォルトの名無しさん
2010/05/17(月) 19:40:02いいたいことは分かるが、論理的に全然包含関係の否定になってない気がするが
否定したければ、非オブジェクト的なクロージャが存在することを示すしかないぞ
無いでしょ?
一方、全てのクロージャは>>866の定義なら自動的にオブジェクトだし
それは関数型だろうが変わらんでしょ
0878デフォルトの名無しさん
2010/05/17(月) 19:50:12全てのクロージャはオブジェクトである
クロージャでないオブジェクトは存在する
ゆえにオブジェクト⊃クロージャである
というのが俺の論理なので、否定したいのなら最初の奴の反例出すしかないんじゃ
ないのって話ね
0879デフォルトの名無しさん
2010/05/17(月) 19:51:430880デフォルトの名無しさん
2010/05/17(月) 19:52:090881デフォルトの名無しさん
2010/05/17(月) 19:55:450882デフォルトの名無しさん
2010/05/17(月) 20:08:31オブジェクト=クロージャ
なんじゃね?
>どっちが広いとか狭いとかいうよりも「表と裏」
とか書いてるし
>クロージャでないオブジェクトは存在する
を否定する根拠があるかどうかは俺は知らん
0883デフォルトの名無しさん
2010/05/17(月) 20:13:46うーん、非オブジェクトなクロージャってのは難しいな
一応逆の観点で見ると
オブジェクトのconstructは引数による明示的な束縛に他ならないし
メソッドの実行もプロパティの読み書きも関数型的には関数(手続き)実行に他ならないから
概念的には逆に全てのオブジェクトもクロージャであることを満たすんだよね
実際クロージャ指向な世界ではそういう扱いをしている
うん、変態的だとは思う
0884デフォルトの名無しさん
2010/05/17(月) 20:29:18クロージャといえば、その場の自由変数をbindできて、Callable(operator()が使える)である必要があると思うが、
Haskellみたいな言語でもすべてのオブジェクトがCallableであるとは限らないだろ。
data Point = Point x y と定義して、Point 1 2とかするとオブジェクトが生成されるが、これはCallableか?
0885デフォルトの名無しさん
2010/05/17(月) 20:30:24うーんSchemeあたりでオブジェクトっぽいのを書くときにそうする、というのは
分かるけどねぇ
関数型でない言語にまでその議論を広げるのは無理がない?
レキシカルスコープとクロージャを提供してるけど
クラスも提供してる言語はいくらでもあるし
それらの言語では、クラスオブジェクトとクロージャは別物だから
0886デフォルトの名無しさん
2010/05/17(月) 20:38:16クロージャとクラスを提供していて、論理的に全く分断された扱いがされてる言語ってどんなのがある?
ActionScriptがそんな感じになってるんだっけ?
0887デフォルトの名無しさん
2010/05/17(月) 20:50:510888デフォルトの名無しさん
2010/05/17(月) 21:03:43論理的に全く分断って意味がわからんけど
C#とかPythonとかScalaとか、いくらでもないか?
それらの言語のクラスを、普通の意味でのクロージャとは見做せないと思うけど
0889デフォルトの名無しさん
2010/05/17(月) 21:06:04クラススコープの変数を、レキシカルスコープの自由変数と見做すのか
なんとなく意味は分かったw
なるほどね
0890デフォルトの名無しさん
2010/05/17(月) 21:12:48その辺の言語はクラス指向で、クロージャは単純にクラス機構の下位に属してるんじゃ?
0891デフォルトの名無しさん
2010/05/17(月) 21:20:13ちょうどオブジェクト指向言語でクロージャを表現するのと逆方向だな
レキシカルスコープの束縛はコンストラクタでのインスタンス変数へのコピー・参照
C++0xのlambdaをC++で書こうとするとまさにそうなるw
0892デフォルトの名無しさん
2010/05/17(月) 21:21:14よくわからない
「クロージャではないオブジェクト」が存在する例がクラス指向の言語だと、
何か問題に影響するの?
0893デフォルトの名無しさん
2010/05/17(月) 21:25:26なんの問題の話をしてるのかよく分からんが
ほとんどの言語は
・クラス指向の言語でありクロージャはクラスである(オブジェクト指向言語、多数派)
か
・クロージャ指向の言語でありクラスはクロージャである(一部の関数型言語、少数派)
のどちらかで、クラスとクロージャが「別物」の言語はそうそうないのでは
PHPとかはそうなのかな?
0894デフォルトの名無しさん
2010/05/17(月) 21:33:27クラス機構もクロージャ機構もオブジェクト機構の一部であって、共通する部分もあるってだけなんじゃないかな
0895デフォルトの名無しさん
2010/05/17(月) 21:35:54Pythonはオブジェクト指向言語だけど、全ての型がclassかというとそうではない
クロージャの型はfunctionで、functionはファーストクラスオブジェクトだが
classではない
0896デフォルトの名無しさん
2010/05/17(月) 21:40:53class objectではなく、bound methodだと思う
0897デフォルトの名無しさん
2010/05/17(月) 21:52:44どっちも持ってる
0898デフォルトの名無しさん
2010/05/17(月) 21:54:030899デフォルトの名無しさん
2010/05/17(月) 21:55:060900デフォルトの名無しさん
2010/05/17(月) 21:59:12スレタイ見てよそ見はやめてよ。 ラムダっちゃ。 ってことでここは一つ
0901デフォルトの名無しさん
2010/05/17(月) 23:03:19ねっとりした論戦が始まります。
0902デフォルトの名無しさん
2010/05/18(火) 00:57:26ラムダ、auto、右辺値参照、progress_display
個人的に大いに期待する4大新機能
おまいらどう?
0903デフォルトの名無しさん
2010/05/18(火) 01:05:500904デフォルトの名無しさん
2010/05/18(火) 05:33:49autoのためにC++0xを使わせて貰える現場があるのかは知らん・・・
0905デフォルトの名無しさん
2010/05/18(火) 06:04:00auto は待ち遠しいねえ。 GCC 4.4では使えるが、まだ許されるのはGCC 4.3まで。
0906デフォルトの名無しさん
2010/05/18(火) 20:09:020907デフォルトの名無しさん
2010/05/18(火) 20:15:30遠く青森で林檎に囲まれて育ったラムダさんの親戚。帽子が特徴的。
0908デフォルトの名無しさん
2010/05/18(火) 20:26:19右辺値参照は標準ライブラリが対応するだけで、ソース書き換えなくても自動的に恩恵が得られる。
0909デフォルトの名無しさん
2010/05/18(火) 21:15:240910デフォルトの名無しさん
2010/05/18(火) 21:17:13VC10だとオプションで復学可能
0911デフォルトの名無しさん
2010/05/18(火) 21:18:26autoとバリアントの区別がつかない人が拒否反応起こして困る。
0912デフォルトの名無しさん
2010/05/18(火) 21:25:45昔は「そんなんいねーだろ!」とか思ってたけど、いるみたいだねぇ。
C#の記事で、varとバリアントを混同する人が結構いる、という前提の説明を見たことがある。
当然C++のautoでも出て来るんだろうね・・・。
0913デフォルトの名無しさん
2010/05/18(火) 21:30:320914デフォルトの名無しさん
2010/05/18(火) 21:50:32a = "Hello"; //エラー
「なにこれマジ使えねー」
0915デフォルトの名無しさん
2010/05/18(火) 22:02:400916デフォルトの名無しさん
2010/05/18(火) 22:55:03auto int x = 4;
がもう通らない。
完全に別人やな。
0917デフォルトの名無しさん
2010/05/18(火) 23:14:54採用される夢を見た
0918デフォルトの名無しさん
2010/05/18(火) 23:22:57胸が熱くなるな
0919デフォルトの名無しさん
2010/05/18(火) 23:31:54テンプレート引数を取る識別子は型そのものではないのだからautoでそれを示すのは不可能なんじゃないか
0920デフォルトの名無しさん
2010/05/18(火) 23:37:410921デフォルトの名無しさん
2010/05/18(火) 23:39:160922デフォルトの名無しさん
2010/05/18(火) 23:43:15vector<nagai_namae_no_type> hogehoge;
///...
hogehoge.swap(vector<auto>());
0923デフォルトの名無しさん
2010/05/19(水) 00:17:59std::pair<auto, auto> = make_pair( T(), U() ) みたいの。
g++, vc2010 で出来るか知らないけど
0924デフォルトの名無しさん
2010/05/19(水) 00:35:17template であることを明示するとか?
vector<short> a;
template auto<int> b = a;
0925デフォルトの名無しさん
2010/05/19(水) 07:13:44関数テンプレートでもそれ欲しいな
foo<auto, int>(...); みたいな感じで、1つ目は推論とか
それでこんな文法も欲しいと思ってしまった
void foo(int a, int b = 1, int c = 1);
foo(2, default, 3);
0926デフォルトの名無しさん
2010/05/19(水) 07:33:05単純に省略じゃダメなのか
foo(2, , 3);
0927デフォルトの名無しさん
2010/05/19(水) 07:35:37省略はtypoで追跡しにくいバグを生みそうだなぁ
0928デフォルトの名無しさん
2010/05/19(水) 07:41:05よくあるっしょ?
0929デフォルトの名無しさん
2010/05/19(水) 07:43:41defaultって名前の変数あったらどうするんだよ・・・
0930デフォルトの名無しさん
2010/05/19(水) 07:44:450931デフォルトの名無しさん
2010/05/19(水) 07:51:440932デフォルトの名無しさん
2010/05/19(水) 07:53:32foo(a: 2, c: 3);
0933デフォルトの名無しさん
2010/05/19(水) 07:54:530934デフォルトの名無しさん
2010/05/19(水) 09:56:560935デフォルトの名無しさん
2010/05/19(水) 10:21:040936デフォルトの名無しさん
2010/05/19(水) 12:37:190937デフォルトの名無しさん
2010/05/19(水) 20:13:25using boost::optional;
using boost::none;
void foo(int a, optional<int> b, optional<int> c)
{
foo(2, none, 3);
0938デフォルトの名無しさん
2010/05/19(水) 20:14:07{ はなしで
0939デフォルトの名無しさん
2010/05/20(木) 07:09:39void foo(int a, optional<int> b, optional<int> c)
{
foo(2, none, 3);
0940デフォルトの名無しさん
2010/05/20(木) 07:19:210941デフォルトの名無しさん
2010/05/20(木) 22:35:590942デフォルトの名無しさん
2010/05/20(木) 23:59:320943デフォルトの名無しさん
2010/05/22(土) 17:26:12bind: 忘れろ。ネイティブなlambdaがあれば必要ない。
0944デフォルトの名無しさん
2010/05/23(日) 21:00:42みたいに戻り値の型のところで直接型宣言できたら
tupleより結果にアクセスしやすいと思うのだが
C++0xでできたっけ? これ
0945デフォルトの名無しさん
2010/05/23(日) 21:05:040946デフォルトの名無しさん
2010/05/23(日) 21:05:34戻り値のところで型の宣言するだけなら現行のC++でも可能だと思うが。
0947デフォルトの名無しさん
2010/05/23(日) 21:10:14main.cpp:7: error: new types may not be defined in a return type
0948デフォルトの名無しさん
2010/05/23(日) 21:11:07A foo() { return { 1, 2, 3 }; }
はC++0xで可能なんだよね?
0949デフォルトの名無しさん
2010/05/23(日) 21:26:41これも微妙なんだが
戻り値の型をstd::initializer_list<int>にしない理由は何なんだろ
0950デフォルトの名無しさん
2010/05/24(月) 01:38:15braced-init-listはexpressionじゃなくて、initializer。
戻り値を省略した場合、returnから推測してくれるためには、lambdaは、
{ return attribute-specifieropt expression ; }
の形でなければならない。
expressionであるべき場所に、expressionじゃないものを書いて、なんでダメなんだって言われても困る。
0951デフォルトの名無しさん
2010/05/24(月) 08:13:010952デフォルトの名無しさん
2010/05/24(月) 18:41:43別に、braced-init-listの時はstd::initializer_list<T>に推測する、
というルールを入れればいいだけじゃない?
0953デフォルトの名無しさん
2010/05/25(火) 23:26:390954デフォルトの名無しさん
2010/05/26(水) 01:23:04ないだろうね。
実装(メンバ変数)に基づいてインターフェース(アクセッサ)が決まるような、
設計の基礎に反するプログラミングをサポートするとは考えにくい。
0955デフォルトの名無しさん
2010/05/26(水) 06:54:240956デフォルトの名無しさん
2010/05/27(木) 23:50:480957デフォルトの名無しさん
2010/05/29(土) 09:43:36引数ひとつのexplicit非指定のメソッドx(arg)はobj.x = arg;で置き換えられる
これを導入するだけでプロパティがらくらく定義できて気持ちイイのになんでやらないのか
0958デフォルトの名無しさん
2010/05/29(土) 09:50:19C#使ってると、obj.Size()でエラーが出てたりして非常にウザイ。関数とプロパティの区別は面倒。プロパティはいらない。
0959デフォルトの名無しさん
2010/05/29(土) 16:40:41何かつけたら省略可能、ならいいけど
0960デフォルトの名無しさん
2010/05/29(土) 16:59:020961デフォルトの名無しさん
2010/05/29(土) 17:24:420962デフォルトの名無しさん
2010/05/29(土) 17:41:450963デフォルトの名無しさん
2010/05/29(土) 17:43:49全部explicitつけろとか勘弁
0964デフォルトの名無しさん
2010/05/29(土) 17:45:03コンストラクタさんディスってんのか
implicit指定がなぜ無いのか理解に苦しむ…
0965デフォルトの名無しさん
2010/05/29(土) 17:49:250966デフォルトの名無しさん
2010/05/29(土) 17:50:240967デフォルトの名無しさん
2010/05/29(土) 17:54:100968デフォルトの名無しさん
2010/05/30(日) 03:00:38出来る方法があればなあとは思う。
0969デフォルトの名無しさん
2010/05/30(日) 11:59:050970デフォルトの名無しさん
2010/05/30(日) 12:02:55結局それはメンバとしてではなくて別の一般的な機能
(例えばfactory patternをそのまま組み込んだような、派生クラスの型を追跡できないのにインスタンスをポインタを介さずに操作できる何か)
として規定してしまったほうがスマートなんだよなぁ・・・。
0971デフォルトの名無しさん
2010/05/30(日) 13:14:09物などを認識する時にあれは魚だとか、これは食べられるだとか
分類しているそれの事なんです、ので、ものすごく古い行為です。
俺はC++よりいい方法でオブジェクト指向を有効に使って
プログラミングできる言語を思案中ですよ、みなさん。
0972デフォルトの名無しさん
2010/05/30(日) 13:15:340973デフォルトの名無しさん
2010/05/30(日) 13:18:320974デフォルトの名無しさん
2010/05/30(日) 13:26:04まんまRubyのattr_readerじゃん
0975デフォルトの名無しさん
2010/05/30(日) 13:40:58メンバをconstにしてprivateな雪駄内でconst_castして代入すればいい
0976デフォルトの名無しさん
2010/05/30(日) 14:26:250977デフォルトの名無しさん
2010/05/30(日) 14:28:280978デフォルトの名無しさん
2010/05/30(日) 14:29:13const_cast覚えたての頃にやったわw
0979デフォルトの名無しさん
2010/05/31(月) 07:49:35そんなことするより、これでいいんじゃ
class foo {
public:
foo() : impl(1), val(impl) {}
void increment() { impl++; }
const int& val;
private:
int impl;
};
0980デフォルトの名無しさん
2010/05/31(月) 08:04:510981デフォルトの名無しさん
2010/05/31(月) 08:07:590982デフォルトの名無しさん
2010/05/31(月) 08:16:090983デフォルトの名無しさん
2010/05/31(月) 12:26:350984デフォルトの名無しさん
2010/05/31(月) 12:51:23未定義動作になるのは、生成時点で const な型を持っていたオブジェクトに対して
書き込みをしてしまった場合。
最終的に書き込みが発生しなかったり、生成時点で const じゃなかったオブジェクトに
対して書き込みが発生するぶんには未定義動作とはならない。
0985デフォルトの名無しさん
2010/05/31(月) 14:09:12メンバの宣言は
private:
int impl;
public:
const int& val;
の順でやらないとまずくない?
0986デフォルトの名無しさん
2010/05/31(月) 14:13:13規格から消すだけじゃユーザーが独自にtemplate関数とc style castで作ってしまいそうだから
javaのgotoみたいに明示的に締め出すくらいしてほしかった。
0987デフォルトの名無しさん
2010/05/31(月) 14:32:350988デフォルトの名無しさん
2010/05/31(月) 14:45:130989デフォルトの名無しさん
2010/05/31(月) 15:19:240990デフォルトの名無しさん
2010/05/31(月) 17:06:270991デフォルトの名無しさん
2010/05/31(月) 17:09:580992デフォルトの名無しさん
2010/05/31(月) 17:24:22変数CをC++するのとchar moji = 'C';をmoji++するくらい別モノ
0993デフォルトの名無しさん
2010/05/31(月) 18:05:580994デフォルトの名無しさん
2010/05/31(月) 20:02:38const使わないで作るバカは多いから
const_castがないとそういうバカの作った関数などが使えなくなる
あとCOMはconstないから(ry
0995デフォルトの名無しさん
2010/06/01(火) 15:20:352
1
4
となるのですが、mに2をキャプチャするにはどうすればよいのですか?
##############################
#include <iostream>
#include <functional>
using namespace std;
template <typename T>
std::function<T(T)> func(T m) {
cout << m << endl;
return [&](T x){ cout << m << endl; return x/m; };
}
int main()
{
cout << func<int>(2)(4) << endl;
return 0;
}
0996デフォルトの名無しさん
2010/06/01(火) 15:28:08コピーコストがかかる場合もあるだろうから嫌だ・・・。
1ってどっからきたんだ・・・?
0997デフォルトの名無しさん
2010/06/01(火) 15:30:52[=]にしないと、もともとのmはスコープアウトして不定になるんじゃないかい?
0998デフォルトの名無しさん
2010/06/01(火) 15:32:440999デフォルトの名無しさん
2010/06/01(火) 16:01:09http://pc12.2ch.net/test/read.cgi/tech/1275375522/
C++0x学園の人々は任せた。
1000デフォルトの名無しさん
2010/06/01(火) 16:07:4710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。