おつconcept
糞スレたてんな
乙 さて0bについて熱く語ろうか
[&](){} キモイスレはここですか?
おつ
#undef __cplusplus0x
undefされちゃった(´・ω・`)
前スレの最後でreflectionの話が出ていたが、 俺はHaskellみたいなオペレーター定義(優先順位指定付)が欲しい。 Parser Combinatorの中間記法的記述が羨ましい。
>オペレーター定義(優先順位指定付) どう考えても罠が増えるだけです 本当にありが(ry 俺はパターンマッチングが欲しいな
優先順位の指定はD&Eで否定していたな。
いつまで0xなんだろうな
>>11 , 12
なんでC++にしがみついてんのよ?
リリースが2010年以降にずれ込んだら C++1x XD
よく言われるが、2015年までセーフ
n2601を使えば2059年までおk
C+++ でいいじゃん
そんな演算子はない
21 :
11 :2008/06/27(金) 00:12:36
>>15 面白い機能が次々に入るので。
義理の父に、これ飲め、あれ食えとなかなか帰して貰えないけど、
どれも美味しいから嬉しいやら哀しいやらで、困っている状態。
>>12 結局operator overloadも言われたいたほど
むちゃな使い方はされてないしなあ。
そういうライブラリもあるけど、現実問題として流行ることはない。
むしろ定義できないからBoost Xpressiveなんかわけわからなくなってる。
ユーザ定義オペレータなんか認めたら文法をBNFで定義できなくなってウザいからだろ 単に規格書著者とコンパイラ実装者の都合
Algol68がやってたんだが、文法が難解な2段階定義になったり大変だったらしい
C++のソースを読んでユーザ定義オペレータに対応したコンパイラを生成するコンパイラコンパイラをつくれば…
ユーザ定義オペレータを少し変更するたびにコンパイラをリビルドするんですね、わかります
そんなものより、生成されるプログラム自体にコンパイラを入れて、 evalが使えるようにするほうが、よっぽどマシで実用的だ。
ユーザ定義オペレータを導入するとしたら、 usingとかでスコープにユーザ定義オペレータがロードされた場合、 文法が変わっちゃうのかな。気持ち悪いな。
>>30 今日ではスクリプト言語に限らず、実行時に生成したコードをコンパイルして何かするってことは行われてるよ。
たとえば、.NETではクラスオブジェクトをXMLとして出力する時に、
型ごとにC#のコードを生成してそれをコンパイルして使ってる。
つかRuby最強すぎる
オブジェクト指向アセンブラC++には関係のない話だな
>>31 生成したユーザプログラムに、C++コンパイラ(言語解釈器)が内蔵されるとでもいいたいのか。
なんでC#なんて例を持ち出すんだ。天才なのか馬鹿なのかどっちだろ
別に内蔵しなくても共有ライブラリとして配布すればいい
ふむ。中間コードと動的実行ランタイム化したC++になるわけだな。 ……それ、既にC++である意味ねえだろw でもC++でevalって凄く変態的発想で素敵だとは思います。 実現したら惚れる
>>36 いや、.NETの例が出ただけで中間コードとは何も関係ないだろ。
単純にいうと、プログラムにGCCを同梱すればいいだけの話。
醤油噴いた
噴いて正解。
実行コードにGCC含むってのも、もしかすると天才的発想なのかな。 実行の度に同梱されたGCCがネイティブコード出力とか どんだけ富豪プログラミングだよ だが、それさえ工夫すれば実用に耐える時代は目の前に迫ってるのかもしれないな。 着想はLLVM方面かな?
実行時にプロファイルを見てネイティブコードを最適化というのは常識になりつつあるしね
>>36 おいらはセンス0だと思って、皮肉で書いたのだが。
ただ、evalとラムダ式との相性には多少興味持てたが。
道具は使い分け。問題ごとに道具をうまく使い分けるユーザが最強。
盲目的にRuby最強とか(C++最強とか)言ってるやつは、ゆとり
evalの型はどうなるんだ
uniqe_ptr<void>
>>44 そこはテンプレートメタプログラミングでなんとかしよう
静的なevalとか 何につかえるかはわからん
Variantでいいじゃない
新スレ早々下らん話題だな 下等なインタプリタ言語の機能なんぞいらん
動的コンパイルとインタプリットを同じにされては困る。
Post-Sophiaな6月号来ないなー。
ついにプログラムが自身を書き換える時代が来たんだね それにしてもRuby最強杉・・・
C++ nazo mondaigai(pgr
まぁ順当に分厚いね。
1000ページか… 和訳でたら買ってもらおう。
俺のママは買ってくれるかなぁ
新しいパパを見つけて買ってもらおう
60 :
デフォルトの名無しさん :2008/07/03(木) 07:19:03
http://www.open-std.org/jtc1/sc22/wg21/ News 2008-07-02: The 2008-06 post-Sophia mailing is available (9800 kB tar.gz, .zip 9800 kB)
News 2008-07-02: The C++ Standard Library Issues List (Revision 57) is available
News 2008-07-02: The C++ Standard Core Language Issues List (Revision 56) is available
ドラフトは N2691 。
・・・ copy_if キタ━━━━━━(゜∀゜)━━━━━━!!!
n2666 の説明読んでちょっとワロタ
> the workaround of using double negatives is not unconfusing.
説明が二重否定になっとる。
単語は分かるのに意味が分からない
二重否定を消して、 > the workaround of using double negatives is confusing. 二重否定の利用は紛らわしいのでフィックス。 元に戻って、 > the workaround of using double negatives is not unconfusing. 二重否定の利用は紛らわしくないことはないのでフィックス。 以下、remove_if notの話禁止。
そういうことか。ありがとう。
copy_ifの話はいいですか?
double negativesて何?
おすぎとピーコ
わろた
iotaって何に使うんだろ? 等差数列・・・には使わないよなぁ
初心者スレで聞きなよ。
APL のιだろうね。 for (i = 0; i < N; ++i) の抽象化でそ?
index generator の i からきてるらしいけど、 こういう妙な略字やめて欲しいなぁ。 .NET Framework 3.5 の同様の機能は Enumerable.Range って名前なんだけど。
その名前は決定事項なのか… 「イオータ」から連番を代入する機能だって想像できるわけないじゃん。あほらしい
>>73 Rangeは名前の通りRangeを生成するだけで、コピーの作業まではやってくれないぞ。
普通にインクリメントしたら挿す値が1増えるようなイテレータがあればいいだけなんじゃないか。
>>75 じゃあおまえはλ式ときいて意味が分かるのか?
ソース上にlambdaなんてないじゃん。
#include <boost/lambda/lambda.hpp> あるじゃん。
誰がboostの話をしてる
関数名はもっと説明的にしろって話だろ
initializeContainerBySequencialNumber()ですか iotaでいいや
sequenceとかでいいんじゃねえの。
atoiの逆関数だろ>iota
>>86 みんな言おうと思っても言わなかったのに…
APL由来らしいけど、Lispで数列的な操作によく使うよ?>iota
iota_iteratorがほしい
>>76 C++ は GC 機能持ってないくて
戻り値でオブジェクトを返すコスト高いからそういう仕様になってるだけで、
コピー作業の有無は本質じゃないのでは。
>>89 いや、マイナーな言語はマイナーな命名規則でやってくれてもいいんだけど、
大衆が使う言語で変な名前使われると初心者が寄り付かなくなるぞ。
indexe generator → i → ι
なんて誰が想像するんだよ。
Lispがマイナーとな
C++もLispも同じくらいマイナーですよw
>>92 あ、いや、知名度はあるな。
なんだろ、マニア向け言語。
>>90 それなんてboost::counting_iterator?
counting iterator があるのにわざわざ iota の名前を取ろうとする C++ に絶望した
「STLによるコンポーネントデザイン」(2000年)って本にiotaって紹介されてたけど。 copy_ifと同じようにSTLに(当時)存在しないアルゴリズムとして。
>>90 つ concept_map InputIterator<int> {
typedef int value_type;
typedef int reference;
typedef int* pointer;
typedef int difference_type;
int operator*(int x) { return x; }
};
> InputIterator < ForwardIterator
C++0xでダックプログラミングなんて本でないかなぁ。 別にダックプログラミングだけじゃなくてもいいけど
APLがマイナーとな?
duck typingじゃないのか。
アヒル思考プログラミング
STLが影響受けてる言語だけどな。
>>106 を読むまで apache portable library の話をしていると思ってたらそれも APR でした\(^o^)/
ここまでアイオタの話無し
アイダホ?
いろんなものの影響を受けてるんですよ
言語やライブラリの設計者は言語マニアなことが多いから メジャーなライブラリが影響を受けているからといって、 その言語がメジャーとは限らない。
>>110 Adaは最初の実装言語ですよ。
まともなgenericsのあった数少ない言語だったから。
設計に関してはAPL, FP, Lisp, pure functional, CLU, smalltalkの影響が大きい。
SIMULA のことも忘れないでください
志村後ろ
DVDでるね。
>>113 言語拡張を最低限にとどめて何とかなる関数型言語
# 簡単じゃん, 作ってしまえや
言語拡張しようとすると数年がかりになる手続き型言語
# いあ, それは, まだコンセンサスが…
って, 理解でいいのか?
何故極端な単純化で物事を理解しようとするのかわからん。
再帰使いまくりでスタックぶち壊す関数型言語と 副作用使いまくりでデータぶち壊す手続き型言語ですね、わかります
>>118 馬鹿が「俺はもうわかっている」と思うための唯一の方法だからでは。
>>119 つ proper tail recursion
今度は終わらない末尾最適化関数で時間をぶち壊すんですね
要するに頭の悪い人は何も書けないという話
>>124 それは中途半端に頭がいい人。
頭の悪い奴は気軽に書いて、しっかりぶち壊す。
>>125 書けないというのは、書き方に悩んだりして手が出せないという意味ではなく、
まともな物を書けないという意味ね。
再帰は悪と教え込まれてきたC系プログラマが 今更まともにラムダ式を使いこなせるわけがないということですね、わかります
Fortran じゃあるまいし、そんなこと教える奴いねーだろ
えー 「再帰はスタックを壊すので、出来るだけループに書き換えましょー」って習うじゃん 書き換えの練習問題とかお約束じゃん 最近は違うの?
いまどき再帰でスタックを「壊す」とは珍しい環境だな。 エラーになるとか、無闇に重くなるとかが普通だろ。
>>129 「出来るだけ」ってことは暗に「出来ない」ケースでは使えってことでは?
つか、再帰が悪とかってレベル低すぎでしょ。w
珍しくレベルが低い話しですね
>>130 末尾コールしをジャンプにしてるだけじゃん
関数型言語だと結構普通にやってるみたいだけど、CとかC++で
末尾以外の再帰をループに展開する奴ってあるの?
# アッカーマンとか、タライとか………
アッカーマン関数をループに展開する関数型言語なんてない。
タライってなんだ?調べても盥しかでてこねーぞ
たらいまわし関数で google よろし
出てきましたーぞ。ありがとうございましたーぞ。
>>135 手元にある sbcl でオプティマイズかけたら loop に展開したぞ
lisp は関数型じゃないと言われればそれまでだが…
>>129 最近のことは知らんが
俺の世代もそうだったから言いたいことはよく分かるw
再帰テンプレートで終端条件の特殊化を書き間違って
しばらく帰ってこなくなったりしたときに、ふと当時を思い出して和む
Ackのループ化は末尾だけ(
>>134 )でしょ。
それともスタックや継続使って、
第一引数も第二引数も0じゃない時をループ展開してるの?
VC++2008 SP1日本語packはいつでんの?
>>143 ここは C++ スレじゃなくて、 C++0x スレですよ。
日本語版でも TR1 が欲しいということでしょ。 TR1 は 0x じゃないという主張なら分からんけど。
末尾再帰はVCでもGCCでもループに変換するよ
>>146 末尾再帰の展開は末尾コールのジャンプ変換と等価
>>146 末尾コールのジャンプ変換とループへの変換との違いは?
>>142 > 第一引数も第二引数も0じゃない時をループ展開してるの?
中間表現に CPS 使うと分岐/呼び出しが末尾コール
に変換可能なので最終的にループになるらしい
詳細は識者に聞いて
gcc(たぶん4とかから)には末尾再帰の最適化を明示的にコンパイラに指示するオプションがあるらしいよー -foptimize-sibling-calls Optimize sibling and tail recursive calls.
>>148 > 末尾コールのジャンプ変換とループへの変換との違いは?
ジャンプ先が別のルーチンか呼自分の内部かの違いに過ぎないだろ?
アセンブラやってる奴ならみんな使ってると思うんだが…
>>152 編集ミス
x …が別のルーチンか呼自分の…
o …が別のルーチンか自分の…
154 :
152 :2008/07/12(土) 00:46:52
補足 つっても, 戻り番地スタックに積む程度のコストみたいだが
GCC 3.4.4で f(a, n) { if (a==0) return n; return f(a-1, n*a); } が _f: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax jmp L3 .p2align 4,,7 L6: imull %edx, %eax decl %edx L3: testl %edx, %edx jne L6 popl %ebp ret でした
>>150 継続スタイルに変換できるのはしってるよ、そんなの常識。
CPSを中間表現に使っているコンパイラも、
オブジェクトコードの生成ではCSP止めてます。
再帰スタックの代わりに、継続の入れ子を持ち運ぶのはとても効率が悪いので。
まともな処理系でAck関数をループや継続に変換して実行するものはないでしょ?
お遊びや学習用ってことなら俺も書いたことがあるけれど。
>>155 こんなのコンパイルしてみ
int f(...){return ...;}
int g(...) {return f(...);}
おそらく g() の最後は call f になると思う
>>157 gccがやるのは自己再帰の関数内ジャンプだけじゃないの? > おそらく
>>156 CL-USER> (lisp-implementation-type)
"SBCL"
CL-USER> (lisp-implementation-version)
"1.0.17.42"
CL-USER> (defun a (x y)
(declare (optimize (speed 3) (safety 0))
(type fixnum x y))
(cond ((zerop y) 0)
((zerop x) (the fixnum (* 2 y)))
((= y 1) 2)
(t (the fixnum (a (- x 1) (the fixnum (a x (- y 1))))))))
A
CL-USER> (disassemble 'a)
;;; 続く
;;; 続き 1/2 CL-USER> (disassemble 'a) ; 03B5BE33: L0: 4885C9 TEST RCX, RCX ; no-arg-parsing entry point ; 36: 750D JNE L2 ; 38: 31C9 XOR ECX, ECX ; 3A: L1: 488D65F0 LEA RSP, [RBP-16] ; 3E: 488B6DF8 MOV RBP, [RBP-8] ; 42: C20800 RET 8 ; 45: L2: 488D04D500000000 LEA RAX, [RDX*8] ; 4D: 4885C0 TEST RAX, RAX ; 50: 7505 JNE L3 ; 52: 48D1E1 SHL RCX, 1 ; 55: EBE3 JMP L1 ; 57: L3: 4883F908 CMP RCX, 8 ; 5B: 7507 JNE L4 ; 5D: B910000000 MOV ECX, 16 ; 62: EBD6 JMP L1 ; 64: L4: 488BC2 MOV RAX, RDX ; 67: 4883E801 SUB RAX, 1 ; 6B: 488945E8 MOV [RBP-24], RAX ; 6F: 4883E908 SUB RCX, 8 ; 73: 488BC5 MOV RAX, RBP
;;; 続き 2/2 技と1行だぶらせてある ; 73: 488BC5 MOV RAX, RBP ; 76: 488BDC MOV RBX, RSP ; 79: 4883EC40 SUB RSP, 64 ; 7D: 488943F8 MOV [RBX-8], RAX ; 81: 488BEB MOV RBP, RBX ; 84: 488D0506000000 LEA RAX, [RIP+6] ; 8B: 488945F0 MOV [RBP-16], RAX ; 8F: EBA2 JMP L0 ; 91: 488B55E8 MOV RDX, [RBP-24] ; 95: EB9C JMP L0 ; 97: 90 NOP ; 98: 90 NOP ; 99: 90 NOP ; 9A: 90 NOP ; 9B: 90 NOP ; 9C: 90 NOP ; 9D: 90 NOP ; 9E: 90 NOP ; 9F: 90 NOP ; NIL CL-USER>
Common Lispは使いたくないな
164 :
デフォルトの名無しさん :2008/07/12(土) 01:28:52
>>164 最近電卓はPythonに宗旨替えしました
俺の電卓はRuby
そこはウソでもよいから「俺の電卓はC++コンパイラ」と書くべきだろ・・・スレ的に考えて
テ、テンプレート!
じゃあ俺の電卓はghostscript
俺の電卓はgoogle マジで
俺の電卓は電卓
calc.exeで十分
>167 小数計算ができませn! ><
本物のC++プログラマは、ジョブをこなすのに、実行時プログラミングをまったく必要としない。 彼らはキーパンチャーと規格準拠なC++0x コンパイラ、そしてアニメがあれば完璧に幸福になれるのだ。 本物のプログラマはテンプレートで整数値演算をする。 本物のプログラマはで固定小数点数演算をする。 本物のプログラマはテンプレートでIEEE754の単精度演算を必要ならば'実装する。 本物のプログラマは倍精度演算をテンプレートとコンパイラの64bit整数型でする。 もしテンプレートで出来なければ、プリプロセッサでやる。プリプロセッサで出来なきゃ、それはやる価値がないのだ。
たらいまわし関数なんてはじめてきいたんでぐぐるとこんなのでてきた /* 再帰的に定義された次のような関数。特に用途はない。 */ int tarai(int x, int y, int z) { if (x <= y) return y; return tarai(tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y)); } たった数行なのに何が起こるか想像できないのは、おれだけ? 大学の時、再帰で書けばエレガントになる、ループで書くのは素人、と刷り込まれたので 再起が出てくるたびに自分はセンスがないと思わされた苦い思い出。
おまえだけ。 わからないことを自慢しなくていいよ
引数評価の順番がわからんので俺もどう動くか想像できない
>>177 別に副作用ないんだから引数評価の順番は結果に関係ないだろう
計算量の例題という趣旨から外れるが、 再帰定義がなぜわかりにくいかがよくわかる例だなと思った。 筋のいいやつは数学的定義がそのまま書けるようなメリットがあるが、ほんの一握りだなと アプリとか分析エンジンとか作ってて感じる。
ただ
>>175 はループに書き直すと更にわけわからなくなる気がする。
しかしD言語ではたらい関数もコンパイル時に評価できるのに、 0xのconstexprはほんとがっかりだなあ。
>>181 関数が提唱された本来の趣旨を考えると、コンパイル時にたらいをまわしても
意味ないような気がするんだが、気のせいか?
コンパイル時に int tarai(int x, int y, int z){return x<=y ? y<=z ? z : x : y} に最適化して欲しいって話だろ
違った int tarai(int x, int y, int z){return x<=y ? y : y<=z ? z : x;}
>>182 そりゃあ、そもそもたらい関数自体に意味がないから、
コンパイル時にたらいをまわせても意味がないのは自明なんだけど、
言いたいのはそういうことじゃなくて、
再帰ができないとか、return一文で書かないといけないとか制約が多すぎて使い勝手が悪い。
そりゃまあコンパイル時評価したけりゃTMPで十分だし わざわざ新予約語作ってまでconstexprなんて仕組みを作る理由もよくわからない
constexprは普通のコードで書けることや実行時にも実行できることに価値があるんじゃないの? 従来だとコンパイルタイムにもランタイムにも欲しい値がある場合、 普通の関数とテンプレートで二つ同じ処理を書かないといけなかった。 それが制限があるとはいえ普通のコード一つで済むようになるのは、 プログラマの負担の観点から言うと大きな進歩だと思う。 とはいえ、再帰ができないんじゃテンプレートの代わりにはならないよなあ…
いらない機能は使わなけりゃいい 禿もそう言っている
ぶっちゃけauto以外の新機能は全部いらない 最終的にはautoだけ取り入れられてあとはガン無視されるだろう C99がlong longとか以外ガン無視されているように
ぷ
ぷ
autoに食いついてる時点で素人丸出し 普通autoなんて使わない
まじで? 型指定子としてのautoはいるだろ。
auto int x;
signedかunsignedか自動的に判断するのかな? そんな風に考えるようになりました。
馬鹿じゃねーの?
>>195 型名が後に続く場合は自動変数の宣言になります。
馬鹿なことやってないで、コンパイラに型推論要求すりゃいい話じゃねぇの?
それがautoなんです(><)
>>199 C++ の言語仕様でどこまでトレースきるのさ?
C++ の言語仕様にも手を入れたのでへっちゃらですよ
ムーブセマンティクスとかコンセプトとか、とりあえずライブラリ実装者が使ってくれれば、 利用者は何もしなくても恩恵を被れるって機能も多いぞ。
ムーブセマンティクスは微妙だな。 また頭ひねることになりそう。 constくらいは。
いやいやあれは超便利だろ。
205 :
デフォルトの名無しさん :2008/07/18(金) 21:34:59
美少女中学生が呼吸をするたびに形のいいおっぱいがオートムーブ
ムーブの概念はコピーより自然 今までなかったのが不思議
そりゃ一般的な機械語にムーブがなかったからだろうよ。
autoなんて、0x新仕様の中でも一番利用者として理解しやすい機能の1つなんだから 少しは勉強してからカキコしろよ。だってここ0xのスレなんだぜ。 という漏れも、Move Semanticsはよく理解してないので、えらそうなこと言えないけどさ。ごめん。
mov ebx, eax
copyだし
その点、Z80ニーモニックは正しいな
conceptのところ読んでみたけど late_checkとaxiomの意味がわからん・・ 何がうれしくなるんだろう
>>208 勉強してから書くのは大変だ。
読んで書くくらいなら、かなりの割合で達成してるだろう。
だからみんな単語にだけ詳しいんだよww
特に俺www
読んで分かるのは大変だろ。
言い訳にならないのは承知だが。
autoの便利さとコンセプトの強力さとラムダ式の醜悪さと0bが却下されたことさえ知ってれば このスレでは充分
個人的には initializer_list に地味に可能性を感じる
xchg eax,ebx
>>213 late_check:
あるインターフェースに適合するかどうかを
C++ではシグネチャーベースで判定するので、
テンプレート引数が決定して、
テンプレートインスタンスを生成する時にしか、
全体の適合性を判定できない場合が多い。
かといって、テンプレートの定義時に判定できる部分も、
インスタンス生成時まで判定できないのでは、
テンプレートのプログラミングがやりにくい。
だから、late_checkブロックの部分だけ、インスタンス生成時、
後は定義時に整合性のチェックを行う。
axiom:
条件式を最適化で利用して良い。
つまり型に対する論理的な制約になる。
Eiffelの「不変条件」みたいなもの。
>>218 concept が与えられてなお
>テンプレート引数が決定して、
>テンプレートインスタンスを生成する時にしか、
>全体の適合性を判定できない場合が多い。
な場合についてkwsk
>>208 知ってるかもしれないけど、
Move semantics(右辺値参照)に関しては禿がThe C++ Sourceに記事書いてたよ。
結構分かりやすい説明だった
Move Semanticsは内部にコンテナとか持っているclassの operator書いてればありがたみが分かるだろう。
Extensible Literals が Proposed wording under review in Core にあるんだけど まだ欲張るのか? マジで09年に仕上げるつもりあるのか? 楽しい機能だから入るんなら歓迎だけどさぁ
提案者にBjarne Stroustrupの名前があるので無下にできそうにないな
>>222 だから2000+0xF年まではセーフだと…
0x200F 旧西暦8207年 宇宙暦308年ついにC++0xの完成をみた。銀河の歴史がまた一頁。
>>222 だいぶ前からその段階だから、今はもうほとんど、
"Integrated into working paper"に近いんじゃないのかな?
しかしこれliteralじゃねーだろ。
literalと組み合わせられるコンストラクタだ。
"こんにちわ、世界!"ISO2022JP
とかなんでもありだ。二進数リテラル問題も解決。
'_'で4桁ごとに区切るようなoperator"b"を書きたきゃ書けばいい。
もう永久に0xでいいよ
>>226 >"こんにちわ、世界!"ISO2022JP
>とかなんでもありだ。
それはどうかな?そもそも "..." の ... 内に非アスキー文字を書くと
未定義なんでは? (実際上はべつとして。)
operator "ISO2022JP" に渡る以前にエンコーディングが
どうなってるかわからないとどうしようもないべ。
さすがに未定義ってことは… 処理系に依存するくらいでは
char32_tで受け取れるようになればいいんだよ。
やるとしても、 L"こんにちわ、世界!"ENCODING だな。
失礼しました、undefined じゃなくて implementation-defined ぽいですね。 char32_t は Unicode だと決まってるから、 U"こんにちわ、世界!"ISO2022JP と書いておけば問題ないわけですね。なんか 先頭のU が気持ち悪いけど。
operator "suffix"(char32_t const*, size_t)がinvokeされるわけですね。
>>226 つ constexpr
235 :
デフォルトの名無しさん :2008/07/30(水) 07:55:42
http://www.open-std.org/jtc1/sc22/wg21/ News 2008-07-28: The 2008-07 mailing is available
News 2008-07-28: The C++ Standard Library Issues List (Revision 58) is available
News 2008-07-28: The C++ Standard Core Language Issues List (Revision 57) is available
誰も反応しないのは英語読めないからですね
自己紹介乙
そんなことより0bをだな
というか詰めの作業に入っているから、 そんな勢い良くリアクションするようなことはない。 ただ思った以上に書き直しが多かったので驚いた。> Concept Rev.7
今さら変えられないんだろうけど、 ストリーム関連の命名規則がぐちゃぐちゃすぎる。 書式を変更すると保存されるのも使いにくい。 cout << hex(123); みたいにしてほしかった。 これじゃあprintfの方が便利とか言われても仕方ない。 あと、再帰のできないconstexprには失望した。 コンパイラの仕事は、実行時向けに最適化してループにするだけじゃね?
実行時にループしたらconstexprとは呼べない。
実行時はすでに定数じゃないが、 しかし現状で、テンプレートでコンパイル時再帰の定数ができる以上、 constexprも再帰できてほしかったなぁ。
243 :
240 :2008/08/02(土) 14:47:06
>>241 N2235には変数を引数に取る例も載ってる。
実行時も使えるよっていうメリットを残しながら、
再帰できるようにするのは可能だと言いたかった。
>>243 仮にそうだとしても、再帰するconstexpr関数がどうせ実行時評価しかしないなら、constexpr付ける意味が無いのでは。
245 :
240 :2008/08/02(土) 17:06:39
>>244 いやいや、もちろんコンパイル時も使う。
定数のみを引数に取ったらコンパイル時に展開すればいい。
constexpr int pow(int x, unsigned int n) { return n > 0 ? x * pow(x, n - 1) : 1; }
...
char buffer[pow(2, 8)]; // 定数
unsigned int n; std::cin >> n; std::cout << pow(2, n); // 変数
constexprを取ったら、配列のサイズが定数式じゃないから通らない。
テンプレートでメタ関数として書くと、今度は変数が使えない。
>>245 可能かどうかで言えばまあ可能なんだろうな。
N2235も「今はまだそのときじゃない」って感じだし。
constexprは「実行時にも使いまわせる型厳密なマクロ」だよな。 お世辞にもコンパイルタイム関数実行とは呼べない。
再帰がやりたければtemplate使えばいいって考えがあったから constexprは再帰禁止にしたのではないかと思う。
C++の拡張の目的としてあげられている ユーザー定義型に組み込み型と同等の待遇を与える っていうのを実現するのには今のconstexprで十分っていう判断だと推測
テンプレート引数は小数使えないしな・・・。
俺は
>>245 の愚案には反対。
constexprの狙いから外れすぎ。
浮動小数点演算テンプレートを作ればいい
コンパイル時のものと実行時のものは明確に区別して欲しいな 両方使えるとか紛らわしい
>>253 D言語なんかは現状ではどの関数がコンパイル時実行できるかさっぱりだけれども、今後関数属性のpureで解決するようだねぇ。
マクロとテンプレートとinlineとconstexprの関係でパニックになる初心者続出の予感
commonlisp よろしく #eval_when (<評価するタイミング1> <評価するタイミング2> ...) { <評価する式> } みたく、しちまえよw
すっきりしないねぇ。標準委員会に入って考え抜くと、これが最もエレガントな解と思えるようになるのかな。 おれがC++が好きだったのは、Modern C++にもあったけど、 各目的で用意された諸機能が、有機的に相互作用(ハーモナイズ)しあって、 1+1=2以上の機能体系を生み出してたところが、実用的でかつアーティスティックで好きだったんだ。 おれが入門したころの、templateがあってRTTIないくらいのころのC++は美しかった。
昔はよかった K&Rの頃のCが一番だと思っている
D言語マンセー
ここでC++0xの文法があーだこーだ議論するような奴がD言語使うと、 自分で言語仕様を拡張したい病にかかるからやめたほうがいい。
>>257 互換性やメリット、デメリットの狭間に立って考えると良い線じゃないの?
既に巨大なC++の仕様を拡張するのは常にデメリットが大きいし
互換性を考えると不要なものも捨てられないし
互換性か…嫌な言葉だな
とすると、そろそろ寿命なんだね。 C++がぐんと存在感伸ばしたころ(おれがC++始めたころ)はC++の青年時代。 引きしまってたし、かといって機能が少ないわけでもないくて先駆的機能たくさんあった。 今は余計についた贅肉自体にもフォローしなくちゃいけなくて悪循環。 (後継の人たちが)どうがんばっても老廃物が老廃物を呼ぶ。 初代ガンダムは筋が通ってておもしろかったけど、 それみて育った子供達が作った後継のガンダムはちっともおもしろくないのと同じ。
寿命なのはそうなんだろうけど、後継がサッパリ出てこないから老兵が頑張るしかないんだよな Java?論外ですわ
Dの出番ですね
言語はともかく、処理系がいまいちな気がするのは偏見だろうか>D
>>266 個人が趣味で作ってる程度のものをC++やJavaと同列に扱うのはどうかと思う
俺的にはC++0xでやっと「使える」様になってきてこれからな感じなんだが・・・ template無い頃のC++はこりゃダメだと思ってたよ
>>268 今でこそ標準化されてるけどC++だって昔は似たようなものだったよ。
最近はもう、言語も大きな会社がバックについて 結構な規模の開発体制でやってないとまともなものできないんじゃないか。 Java も .NET も企業主体だし。
>>270 cfrontの頃は使いにくかったな。GCC(G++)が革命的だった。
Javaも最近はcontrol abstractionとかやり始めて、 以前の保守的なJavaと違って面白くなってきた。 けどconcept, move semanticsなど、 言語機能の本質的なところで実験を続けてるのはC++だと思う。 JCPはEnterpriseな人の便利機能指向が面白味を削いでいる。 実用向けの言語としてはそうでなくては困るのだろうけど。
>>273 いよいよ言語マニアだけのためのおもちゃ感が出てきたなぁという気がする。
conceptもmove semanticsもライブラリ製作者だけが知ってればいい機能だから、 言語マニアと普通のC++ユーザとはちゃんと住み分けできるよ。
ライブラリ制作者がすべからく言語マニアで普通のC++ユーザではない、と言うのは暴論だ。
むしろ境界の曖昧性、というかシームレスであることが C++ だと思う
278 :
277 :2008/08/05(火) 01:05:30
ちょっと端折った × むしろ境界の曖昧性、というかシームレスであることが C++ だと思う ○ むしろ境界の曖昧性、というかシームレスであることが C++ の利点だと思う
コンセプトはC++プログラマは全員が知る必要のある機能です。 テンプレートと同じです。駆使するのは一部の人だけでいい。
>>276 まあべつにコンセプトしらずにテンプレートライブラリを作る人がいてもいいのでは... ってそれは良くない気もするな。
それよりも「すべからく」の誤用が気になる。
当然の意味でも取れるから必ずしも誤用とはいえないな。 書いた当人がどういう意図で使ったかによる。
「須らく」は「〜〜するべき」と受けるんじゃないのか? どうしても>276で使うなら -- ライブラリ制作者は須らく普通のC++ユーザではない言語マニアであるべき、と言うのは暴論だ。 -- となると思う。
it's an absurd statement that librarians are always language-mania and not usual C++ users. てきなニュアンスに読める。原文に「べき」とかがないので。。
原文に「須らく」もないね。
このスレには、プログラミング言語のみならず、 自然言語ヲタも多いのか?
教養があるだけの話
自分で言うか。
須らくの使い方は中高で習うだろ
しかし自然言語には標準の規格もないし方言が強すぎるし、 時間と共に文法や意味が変化していく。 よほどの猛者しか自然言語の批判はできないが。
だからエスペラント語をだな、
Esperantoも開発されてから現在まででかなり語彙が変わってるわけだが
>>291 形式言語理論が確立される前に設計されているので、他の自然言語と大差ない。
そこでイド語をだな、
挙げるならロジバンだろ イドはエスペラントと大差ない
コンパイル時の最適化用として 副作用なしで同一引数なら同一の値を返すみたいなヒントとか 同一内容の引数なら同一内容の値を返すみたいなヒントが欲しかった。
つ #pragma つ memorize
298 :
デフォルトの名無しさん :2008/08/09(土) 14:05:55
C++みたいな理屈っぽい言語はもういい。 グループによる開発に向いた言語じゃない。C++のややこしい 仕様をよく理解していない人間がグループの中に混じっていれ ば、そいつがバグを仕込むテロリストになってしまう。 もちろん、どんな言語でもバグは入り込むが、C++は特に仕様 が複雑で、誤解にもとづくバグが簡単に入り込み易い。 禿がC++0xをいつの時期、どういう仕様で発表するのか しらんが、こんな呪文みたいな言語、もういい。 C#に乗り移ろうかな。
悪意の無いテロリストはどんな言語でも爆弾仕込むけどな。
C++が言われる程複雑じゃないと感じる俺は毒されてるんだろうか
C++を取り巻く環境が複雑なのだろう。
馬鹿を基準に物事を決めたら進歩は止まるよ
303 :
デフォルトの名無しさん :2008/08/09(土) 14:29:18
↑こういう鼻持ちならない馬鹿がうじゃうじゃいるのがC++の世界
>>298 バージョンアップするたびにライブラリレベルで後方互換性が問題となるような、
理屈がない言語も困ったもんだが…
>>300 理解という意味では、今のC++の各機能をすべて同じ温度で見つめたら、複雑と思えるんだろうな
昔からやってれば、ここはよく使う主流機能、これはうさんくさい互換性向け機能、とかわかるし
使いこなすという意味では、地雷が増えた気がする。オブジェクトコピーがらみとか。
ただJavaとかのゴミ拾いがらみ機能とか、文字コード変換とか、も地雷いっぱいあった気がする。
一本筋を通してきれいに言語設計・処理系実装してほしいね。それがElegance
>>307 ふむ、ならば Scheme でも使いたまへ。
いやいやここはunlambdaで
>>309 やっぱ、初心に帰ってアセンブラだろう?
311 :
デフォルトの名無しさん :2008/08/09(土) 16:52:55
美少女中学生の汗ブラ!(*´Д`)
>>311 美少女中学生シリーズの中では出色の出来だなw
>>296 実際どのくらいパフォーマンスを向上できるのだろう
副作用なしで出来ることはたかがしれているし
メリットが小さすぎるんじゃないの?
>副作用なしで出来ることはたかがしれているし マジすか
ものによるだろ すっごいでかい配列の長さをいちいち求めてたけど実は固定長でしたみたいなのだったら かなり速くなるかもしれない まあそんなケースは少ないだろうが
そりゃconst size(void); だからね。 sparse arrayのアクセスなんかが相当すると思うけれど、 Cでnoaliasが排除されて以来、 そういう最適化用ツールは言語に組み込まない方向でしょう。 constは意味も規定しているから、重要だけど。
>Cでnoaliasが排除されて以来 え?C99のrestrictは?
restrict 忘れておった orz
restrictって本当にコンパイラにヒントやるだけで 実はエイリアスあったとしてもコンパイラも実行時も何も言ってくれないんだろ
当たり前だろw やりたきゃコードで書けよ。
自動的にassertを追加できそうなものだが。
char a[10], *p; p=a; memcpy(p,a,10); こんな露骨なのにも警告すら出せないrestrictって何なの
警告を出すような(素晴らしい)コンパイラを作るのは(コンパイラ屋の)自由じゃね?
restrictがC++に入ると、やっぱりスマポもrestrictに出来なきゃならんって事で クラスのrestrictインスタンスやrestrictメンバ関数が作れるようになるんですね こんなもんをコンパイラはちゃんと最適化で有意義に使いこなせるのかね
まじめに疑問なんだけど、整数に2の補数を使ってない処理系ってあるの? atomic周りを読んだら、atomicに限りsignedな整数型とアドレス型は2の補数となりオーバーフローによる不定動作はないと書いてあるけど、 もし仮に、すべての整数型を、2の補数としてしまっても、現実として問題は起こらないと思うんだけど、 なぜC/C++の規格は2の補数だと規定してしまうのを避けているんだろう。
>>330 ハード含めて処理系って言うんならそれでもいいんだが...
かつて、実際に2の補数表現を使用しないCPUが存在していたし、
「今後とも2の補数表現以外の整数表現をもつCPUが開発される
事はない」って、保証はどこにもない
からじゃないのか?
特殊用途では符号ビット+絶対値の方が都合がいいことがある
最近の言語は2の補数表現を仮定した整数型の仕様で、 そうじゃないCPUはエミュレートしろって立場だね。Java, ECMAscriptなど。 けどCの時代はまだそういう時代じゃなかった。 2の補数表現を仮定しない最後の言語のひとつかもしれない。
>>330 DSPなどでは存在してたと思う。とりあえず C++ はそういうアーキテクチャも対象にしてる
ってことだろうね。
もし、2の補数に規定するなら語長(intは必ず32bitとか)も規定するのが良いだろう。
最近の言語ではそのほうが普通かな。
美少女中学生のおっぱいは2つだから2の補数! 美少女中学生のおっぱいは2つだから2の補数!
337 :
デフォルトの名無しさん :2008/08/14(木) 10:39:04
ちょっと聞きたいけど、右辺値参照(Rvalue reference) が導入されると、(a+b)*(c+d)*eみたいな行列演算も効率化されるの。 それとも、やはり無理?
無理じゃないお
文脈によるんじゃないんですかね? 加算か乗算かによって違いますし, 右辺値をどの演算の operand に使うのかによっても違いますし, 式テンプレートによる実装と比べてどうなのかについても比較が複雑ですし. ただ,右辺値参照を用いない実装に比べて 効率的な場面が生じるのは確かだとは思います.
せっかく説明してくれてるんだからそう言わんでも
単なる計算や初期化の場合は、 右辺値参照を使わない方が 戻り値最適化のおかげで swap が無い分効率的になる。 その結果を代入したいような場合も、 代入の代わりに swap すれば 右辺値参照を使わなくても効率よく実行が可能。 ((a+b)*(c+d)*e).swap(f); 結局のところ、それほど右辺値参照の必要性があるとは思えない。
まともに機能する実装が登場するまであと10年ってところですかね
>>342 どうやってrvalueに対して安全にswapするんだよ?
だからこそ必要なんじゃないか。
10年後ね…。この先は厳しいね。 C++が台頭してした当時は、高速バイナリ吐けるオブジェクト指向言語なんて他になかった。 すでに基礎的な部分はC++が築いてしまったし、 個人ですらちょちょいと次世代オブジェクト言語とか作っちゃう時代なので、 今の時代のCのように、Legacy的に古い機能だけ使われる道しか残ってなさそうな気がしてきた。 <=> 実験するなら別の言語
今他にあんの?>高速バイナリ吐けるオブジェクト指向言語
えーと…… D…?
Dwwwwwwwwww
>>342 モチベーションの1つに、そのswapのような変な書き方ではなく
直観的に=演算子でやれるようにするっていうのは無かったっけ?
Ocamlとか?
Solaris、Windows、Linux + FreeBSD、Mac、Haiku OS x86ならバイナリも吐けなくないJava 実行速度でC++に引けを取らないJava 対応OSも互換性を重視すれば圧倒的にC++ << Java
最近のjavaは好きな言語だけど、C++とは全然違うよ。 C++の代りの言語はない。近いものすらない。
Javs厨の寝言来ちゃった
GCを使わされる時点でDもJavaも論外
DってDelphiのことじゃないよね
そうだよ
俺がこれから作る( ・∀・)イイ!!言語ならあるいは・・・!!
そいつはすげぇ! でも2009年じゃまだ仕様が決まって無いんでは…
いや、その年に仕様を決めようということでC++0xと呼ばれているのではないだろうか。
>359 先行して実装するってことらしい。まーどうせ規格が決まったところでフル実装は先になるんだろうし、しばらくは一部実装でしょ。 とりあえず動画中で取り上げられていたのは、スコープ付き enum (および enum のベース型指定)と static_assert。 move semantics については名前が挙がってたし、プロジェクト中にもそれっぽいファイルが見えるけど実際の紹介はなかった。 でもここ最近の Borland/CodeGear の標準準拠度を考えるとあんまり期待できないような気がするなぁ。
VCだって6は酷かったけど今はまあ使えるじゃないか。 BCBだってやってくれるかもしれない、なんて期待は甘い?
ヘッジがM$に移籍したのが痛いよな
Comeauがどこまで実装するか楽しみ
0x200f年までok
0xff0f年までおk
>>363 Hejは規格コーダ屋じゃないからあんまり関係ないでしょ。
得意なのが言語設計とRAD設計だから。
>>344 f.swap((a+b)*(c+d)*e); は無理だが
((a+b)*(c+d)*e).swap(f); は問題ない。
ああ、なるほど
gcc 4.4.0_alpha20080725にてテスト ソース #include <map> #include <string> #include <iostream> #include <boost/foreach.hpp> int main() { typedef std::map<std::string,int> Map; Map anim{ {"bear",4}, {"cassowary",2}, {"tiger",7} }; BOOST_FOREACH (Map::value_type v, anim) { std::cout << v.first << ':' << v.second << std::endl; } return 0; } 結果 bear:4 cassowary:2 tiger:7 とりあえずN2672の例の1つが動くことを確認。そろそろautoが欲しいなー。
ダメだ。どうしても分からんから教えてくれ。 N2710のコンセプトのドラフト、 14.9.1.4 >A concept-definition that starts with auto defines an implicit concept, otherwise it defines an explicit concept. implicitとexplicitで何が違うんだ? あちらこちらによく分からない記述が散らばっているだけでさっぱり分からん。
373 :
372 :2008/08/17(日) 07:49:49
自己解決 N2081に書いてあった。
>>342 それじゃ部分式の演算子関数呼び出しでコピーが発生するじゃない。
375 :
デフォルトの名無しさん :2008/08/26(火) 13:45:43
nullptr があっても printf() とか可変長引数にヌルポインタ渡す時のキャストが 要らなくなったりしないよね?
void*を渡すならいらない。
tyep safe な printf まーだー?
ばらでぃっくなアレを使うんじゃ
つboost::format
2008-08 mailing (pre-San-Francisco)
細かい議論が多くて面白いですね
decltypeに関数を与えると関数を表す型じゃなくて関数の戻り値を表す型になるのか。 なんだか非直感的でやだな。
関数の型と言えばsignature
.
>>383 decltypeのやっていることはsizeofとほとんど同じだからな。
むしろ、sizeofの型を返す版が欲しいっていう話だし。
typedef F decltype(f); arity<F>::value; // 引数の数 result_of<F>::type ; // 戻り値の型 arg_types<F>::type ; //引数の型リスト のようにできれば俺は満足ですよ
何か違和感があると思ったら一行目だ。 decltypeが型としての関数を返すものだったとしてもだ、順番が間違っているぞ。
typedef FROM TO;の順番なのに… C++を使ってないのバレバレですね失礼しました
つusing TO = FROM;
383を見て、decltype(printf)がintになっちゃうのかと思った。
違うの? decltype(printf)がint(*)(const char*,...)じゃなくてintになるから 非直感的で気持ち悪いって言ってるのかと思った decltype(printf("..."))だったら当然intに決まってるし 383どういう意味?
関数呼び出しせずに関数名を渡したら関数の型になるんじゃないの?
当たり前。スルーで。
じゃ結局decltype(printf)は普通にint(*)(const char*,...)型なのね
いや、ポインタじゃないだろ?
当たり前。スルーで。
>>395 アホ?
C/C++の式にポインタじゃない関数型なんて存在しねえよ
存在しなかったら関数呼べないだろwwwwwwwwwwwwwwwwww
関数呼び出し演算子のオペランドの規定読んでから出直してこい
ConceptGCC 4.3.0 alpha7 でテスト #include <cstdio> #include <typeinfo> int main() { std::puts(typeid(int(const char*,...)).name()); std::puts(typeid(int(*)(const char*,...)).name()); std::puts(typeid(std::printf).name()); std::puts(typeid(decltype(std::printf)).name()); } 結果 FiPKczE PFiPKczE FiPKczE FiPKczE
>>397 坊やにはまだ早いよ。
C++03を学びなおしてきな。
えー? 関数型って&演算子のオペランド(結果は関数ポインタ)の場合しか存在しないんじゃないの? 関数ポインタには*演算子効かないから関数型って単独で取り出せないんじゃないの? (**************printf)("...")とか書けるのは何なの? ()のオペランドって関数ポインタじゃないの? わかんなくなってきた
みんなが関数名と呼んでいるものは実は関数ポインタリテラルで、 関数ポインタというものは*や&付けても自分自身に戻る変な型で、 みんなが引数列と呼んでいる(...)は関数ポインタ(と多重定義したクラス)だけに作用する特別な演算子で 「関数」なるものはコンパイラの世界には存在しないんだよって そう教わって信じてきたのにまさかC++に関数型が存在するなんて… カルチャーショック
>>404 ポインタにはすべて「そのポインタが指す先の型」というものが概念的に存在する。
そういう型の変数が作れるかとか、そういう型のリテラルが書けるか、は別の問題。
まーC++の関数って、関数ポインタに特別な文法なしで代入できるし、 型としての関数なんて、テンプレートメタプログラミングでもしない限り扱わんし、 紛らわしいよな。
待て、やっぱり変だ void foo(void(*)()){std::cout << "foo(void(*)())";} void foo(void()){std::cout << "foo(void())";} これ定義しようとしたら怒られたぞ(片方にするとどっちも通る) つまりvoid(*)()とvoid()は同じ型ってことじゃないの
>>407 引数の型(というか、変数の型)としては関数ポインタしかあり得ない。
そういう場所に「関数」を書いた場合は「関数ポインタ」とみなす、という規則があるため、
結果的に同じ型の引数を取る関数を宣言しようとしたと解釈されエラーになる。
その引数の型矯正ルールが8.3.5.3な。 とりあえずC++0xはまだ早いんじゃないのかね?
1.処理系すらできてない規格に触るのなんてまだ早い 2.その程度の知識ならまずC++03の規格に一通り目を通してから、まだお前のような素人には早い dotchi?
調べた なんだ&とsizeofとtypeid(と多分decltypeも)のオペランドの中が特殊なだけで その外では404の通りでいいんじゃん 関数型は出てきたそばから関数ポインタに変えられるから &とsizeofとtypeid以外の世界にはやっぱり関数型は存在しないんだ 俺は大体合ってた
俺がこっそり望んでいたsealedは入りませんか? このクラスは継承するなってソースにもドキュメントにも書いてあるのに 勝手に継承されてデストラクタ呼ばれないとか文句垂れられます
D&Eに継承の禁止の仕方載ってる
3.
>>411 boost::function<R(A)> とか boost::result_of<R(A)> とか見たこともないの?
>decltype オーバーロードしてる関数の型ってのはやっぱ無理なのか 例えばstd::fabsを引数double xで呼び出したときの(戻り値ではなく)関数の型が分かると便利なんだけど decltype( static_cast<decltype(x)(*)(decltype(x))>(std::fabs) ) てのは本末転倒な気がする
>>411 関数型をtypedefすると、
シグネチャが同じ関数を大量に宣言するときに便利だよw
typedef double F(double);
F sin,cos,tan,asin,acos,atan,…;
ってこれC言語だからC++0x関係ないな
>>415 function, result_ofはTR1にも入っていて、
C++0xにまんま入ることが決定済み。
sizeofは『式を評価して』その式の型のサイズを返す。 decltypeも『式を評価して』その式の型を返す。 だから関数を入れたらその関数が評価されて関数の戻り値の型が返るに決まっている。 どこも非直感的ではない。
>>419 ×関数を入れたら
○関数呼び出しを入れたら
おいおい、"unevaluated operand"ってやつで、「評価」されないよ。 typeid, sizeof, decltypeの三つな。
仮に評価したときに返ってくるであろう型、と言うべきだね
つ 「式の型」
なるほど、
int i = 0;
std::cout<<sizeof(i++)<<std::endl;
std::cout<<i<<std::endl; //prints 0
なわけね
>>416 が気になるからage
ageてないw
平気で未定義になるような病的な式をsizeofの中に閉じこめたりするのは TMPではよくやることだな
sizeof(0 / 0) は警告が出るな@gcc
0除算だからな
昔のコンパイラってTMPで0除算したら落ちたりしてたんだろうか 今でもboost vaultにあるキワモノ(例:eggとかphoenix)使ってたらエラー時に落ちるものは結構あるようだけど
>>418 ??? そんなことは百も承知だが
関数型がテンプレートの引数一つで取り扱える例を出しただけ
そういや、boost::function は昔は <R, A1, A2> みたいに書いてたころも
あったけな
自意識過剰の変な奴…
美少女中学生スレたるこのスレにはふさわしくないな
0xの可変個引数テンプレートがDのそれとよく似てるけど、どっちが先なのかな? それとももっと古くからあった?
>>434 先に実装したのはDだが、発想自体は別に新しいものじゃないだろ
>>435 可変個引数関数のことを言ってるんじゃないよ
>>436 そうなのか。作ったタプルを転送して展開して…とか初めて見たとき、何じゃこりゃすげぇと思ったんだけどな〜
C++0xを使いこなせる自信がない。 無理だろあんなもの。疲れるだけ。
大丈夫、苦労するのはライブラリ実装者だけだから
>>437 > 何じゃこりゃすげぇと思ったんだけどな〜
かわいいねえ。
美少女中学生がいるな・・・
auto以外は普通の利用者には関係ないね
「C++0x?D言語最強に決まってんだろwww」って言われたときのためのコピペ作ろうぜw
おまえDスレにいるだろ
可変テンプレートは型リストの構文糖衣でいいのに
>>442 コンセプトでエラーメッセージがましになることが期待できるってのはないですか?
普通の利用者は自分でコンセプトを定義しないっていう点では関係ないと言えるのかもしれないけど。
D? ああ、C++とJavaの悪い所取りした哀れな言語ね
>>442 (現在STLやboostを利用するレベルの)通常のC++ユーザーにとっては、
・auto
・initializer_list
・新型for
・lambda
・template typedef
・nullptr
くらいは結構書く機会があるのでは?
あと、以前も出てましたが、template同様自分で書くことはなくても、
conceptに関してはユーザー全員が理解すべきものと思います。
個人的にはあとdecltypeとそれに伴う新たな関数宣言も。
まあ、新しい関数宣言は人のソース読むときには知っとかなきゃならんな… こんなんだよな []main(int argc, char *argv[]) -> int{return 0;} きめえwwwwwwwwww 自分では絶対に書かない
>>449 これまでのパラダイムから、あまりにもかけ離れすぎてて
これだったら無い方がまだマシ
こういうことしたい時に便利かも。 template <typename T> struct complex { T re; T im; template <typename T2> []operator+(const complex<T2>& rhs) -> complex<decltype(re+rhs.re)>{ /* ... */ } };
だったらこれ認めるようにすりゃいいじゃないか… complex<decltype(re+rhs.re)> operator+(const complex<T2>& rhs){ /* ... */ } rhsを宣言より前に使ってるからダメってのはわかってるよ でもそんなの戻り値型は後で解決することにすりゃいいだけじゃん
見慣れない以外の欠点が無いならどうでもいいかと
コンストラクタとかどうなんの もしかしてこう? []Foo::Foo() -> : a(0) {} オェェェェ
N2582 って通りそうなん?
>>454 コンストラクタではその書き方はできないだけだと思われ。
>>449 要は、戻り値は後ろにある方が型推論ができていいってことらしい。
あと、数学でも、関数の宣言って f: 定義域 → 値域 なのよね。
けども、この書式で、C++ でやるとキモいよな。
>>452 C++ 屋さんは LL 文法大好きだから。
言語としての優劣はともかく、コードの視認性では最近のLLに大きく劣ることになるわけだが。
LL違うwww
C++ がそっちの意味の LL なわけねぇww
そのうち、Perl みたいに $ とか @ とか出てきそうだw
>>455 じゃあコンストラクタ、デストラクタ、変換関数は新形式では書けないって事なのかな
書ける関数と書けない関数があるような一貫性のない書き方はダメだなぁ
$と@は色んな事情で使えないってD&Eで禿が言ってた
コンストラクタは現時点でも特殊じゃん。 戻り値書かないのはコンストラクタ・デストラクタだけなんだし。 新書式の目的が戻り値の型推論だっていう目的を考えても、 戻り値のないコンストラクタに使えてもしょうがないし。
もう[]に別の意味を付けるのはやめて! []のHPは0よ!
それを言ったらC++のHPは(ry
>>448 あとコンストラクタ関係(委譲、default/delete)は便利だと思う
>>454 ラムダからの類推で行くと、書けたとしても
[]Foo::Foo() : a(0) {}
となるだけでは?
まあそこまで行くと[]つける意味は皆無に等しいけど
>>463 と、変換関数な
[]operator int() -> intって書かせることになるのかなぁ
どういう使われ方想定してるのかな 今まで通り普通は旧形式で書いて、戻り値で型推論したいときだけ特別に使う物なのか それとも旧形式をobsoleteとして新しいプログラムは全部新形式で書かせることを狙ってるのか 後者だとしたら書けない関数があるのはまずい
>>465 このC++はバージョンアップするたびに規格書の厚みがはるかに増す…
n2582はどうなってんの?
却下されろとみんなが願ってるけど 例によって祈り空しく採用される流れ
473 :
471 :2008/09/13(土) 18:56:28
>>470 に追記入ったな
というか、n2582でググったらあのブログがトップに出てくるから気になって書き込んだんだが、
知らなかったわけはないので忘れてたってことだろうか
個人的には
>>470 の追記と同じく、面白いと思うけどな
気持ち悪いのはラムダ関数の構文であって、
それをとりあえず認めるならば、それと統一が取れていてまだマシ
[]が関数を表す予約語ならまだいい感じなんだがな function main(int argc, char *argv[]) -> int{return 0;} function Foo::Foo() : a(0) {} Cっぽくはないがそれほど悪くない
色々ぐぐってみた fncdef 14件 funcdef 14500件 fundef 861000件 deffnc 189件 deffunc 12900件 (HSPで使われてる) deffun 1170件 lambdadef 15件 lambdef 2580 lmbdef 8 lmddef 4 lmbddef 1 deflambda 118 deflamb 42 deflmb 24 deflmd 42 うーん、fncdefかな
日本語の教科書なら速攻でεπιστημηさんが書いてくれると思う。
絶対誰かが思い付いててかつ却下されてそうだけど、 「C++0xの関数定義用記号をUnicodeに追加する」 という案はどうだろう?
却下
速攻却下されておまたが濡れ濡れになっている美少女中学生がいるな・・・
>>478 おまえはくさび文字使って60進リテラルでも書いてろw
_Functionでいいよもう。 それで、<stdfunction>で#define _Function functionしとけ。
function をキーワード化でいいじゃん。 え、昔のコード? そんなもん機械的に書き直せばいい。
機械的にリファクタリング出来るほど、素直な言語ならここまで悩む必要はなかったはず。
機械的にコンパイルできる言語が、機械的にリファクタリングできないわけがない。
ソースがどっか行っちゃってて書き直せないこともあってだな そういうのとリンクできないと困ったりするんだよ まあfunctionなんて名前の関数は最低だけどな
できなくはないけど難しいからツールが発展してこなかった
まあここで何をグダグダ言おうとキーワードフォビアの標準化委員会が新予約語なんて取り入れるはずがない 個人的にはfunctionなんかよりconceptだのrequiresだのの方がよっぽど問題起こしやすそうだと思うが
むしろなんでそんなにfunctionなりなんなり、記号ではなく言葉でないと嫌なのか。
記号でもいいけど、卑猥なAAみたいな記号は厭だ。w
記号でもいいが今回のは悪趣味 センスのかけらもない
二項!が使われていなかったことに注目してテンプレート引数を!(...)にしたDを見習うべき。
cpp_0x_reserved_word_function でいいお
キーワードにも名前空間が必要かww
using keyword function = _Core::function; 変態言語を名乗るならこれぐらい出来ないとな
[]とか->って関数と何の繋がりもないからな 予約語もそうだけど同じものに全然違う意味持たせまくると暗号になっちゃう
0xまでには間に合いそうにないからC++xxにしろよ。
西暦20xx年とかいうと安っぽいSFみたいだ
おっとロックマンの悪口はそこまでだ
可変個引数テンプレートとクロージャのおかげでboostのFunction objects and higher-order programmingがとんでもなくシンプルもしくは不要になるんだな〜 でもいつ仕様が確定するのやら…
boost::eggでやってるのが素で、さらにハイパフォーマンスでできるわけですか凄いですね
先人の偉大な変態行為を規格化するという しんどい作業なのでもうちょっと時間がかかります
先に2000をHexにしろよw
ヲイラが生きている間で勘弁して下さい ><
C++くらいのインフラになると変な変更される方が怖い。
しかし、まともな神経の人が書いたコードは 相当無茶な変更がない限り、ほとんど影響が無い罠
0xが存在しなかったとしても、処理系のバージョンアップでコンパイルできなくなるなんてよくある話。 将来コンパイルが通らなくなったとしても、0xのせいとばかり思われないでほしい。 多少は0xのせいの部分もあるかもしれないけど。
0xいらない所は03をずっと使い続ければいいだけの話だしな 0xでないと書けないものが新たに加わる訳じゃないし
>>507 どうせコンパイルオプションで disable できるから安心ですよw
待て待て、enableがデフォルトとか困る
disableしたら、 コンパイラ付属のライブラリがほとんど使えなくなると思われますが。 今回はかなり大きな改正ですので。 template入った時以来?
#ifdef ガードでどうにでもなるんでは?
>>514 #include <iostream>
しただけでコンセプト満載なんですよ。
iteratorがコンセプト化されるので。
ifdefなら平気じゃん。
アルファギークの大半がLL言語に移行したというのに なんなのこの体たらく
↑ブログ読みすぎのバカ
>>516 iostream使いたい時は具体的にどう書くの?
>コンパイラ付属のライブラリがほとんど使えなくなると思われますが。
標準iostreamの中身を #ifdef __CPP_ZX_ #include <c++0x/iostream> #else #include <c++/iostream> #endif とすればいいだけのことじゃないかという意味
>>520 バイナリ提供のライブラリも切り替えなきゃいけないのと
混在環境でどうするかが大変そうだな。
Concept抜きのライブラリも提供される事が前提なわけね。 そういう手厚いコンパイラなら、コンパイル時オプション指定で可能でしょうね。 ただtemplate導入時の事を考えると、(二枚仕立ては皆無に近かったので) 新しいバージョンのコンパイラからC++0xへの切り替えを行うのでしょうね。
iostream.hを思い出したぜ
たぶん一番悩むのが入門書書く人だろうな conceptなんて入門者に説明すんの大変だろうし その辺はまるっとスルーかな
>>524 今でさえテンプレートとかろくに解説していないのはよくあることなんだから、当然無視だろ。
せめてコンストラクタでは初期化子並びを教えろと
でもコンストラクタとは何ぞという説明をする時に その中でさらにコンストラクタ呼んでる例見せるとわかりにくいんだよな あれは教えづらい
まず組み込み型と構造体を デフォルトコンストラクタの書き方で初期化できるあたりから教えてみたら
それも考えたけど、その話から入ると デフォルトのデフォルトコンストラクタの話も先にしなきゃならなくなるし… (どうでもいいけど何とかならないかなこの名前)
スレ違いです。
コンパイラ生成のデフォルト・コンストラクタ
>>524 今や入門者が使う言語ではないので、入門書は要らないのではないか?w
最初から上級者を育てるための導入書として書いた方がいいかもしれんね
こうしてまたC++は狭く深くなるのであった
ちょっとしたアプリ書いたらコンパイルが終わらなくなりそうな 仕様てんこ盛りだなw
>>534 懐は広く入口は狭い
巾着みたいなもんだなw
入り口閉められて出られなくなるんですね
>>537 食虫植物キタ━━━━━━(゚∀゚)━━━━━━ !!
>>537 は童貞だな
いや、あるいは膣痙攣の被害sy
名器でググって顔を赤らめブラウザの履歴を見てあわてふためく美少女中学生
>>532 Stroustrup が入門書を書いたみたい
びょーん・すっぽすっぽ
D言語って来ないの? みんなC++0xに行っちゃうの?
VisualStudio並のIDEが出来たら行くよ
GCを簡単に取り外す方法が用意できたら行くよ
>>544 JavaとC++があるから。
俺様言語は必要ない。
アキラさんがこのスレはレベルが低いって嘆いてたよ 皆もっとペーパー読もうぜ
他に大した情報元もないって言ってた気がするんだけど。 548 と両方が真だとすると、 それは日本のレベルが低いんでは。
まあこの板の中ではレベル高いほうだろw 残念ながら英語だと読む気が激減する人が多いと思われます ところで0xって10進法じゃなくてry
2ちゃんのスレに全力でレスする奴もおらんだろ。 上の方に「誰も指摘しない、俺は規制で書き込めない」って ブログのURL張られていたけど、w付きのおふざけレスにはレスしないよー
まぁ、何か恥かいたときに「本気出してないからだ」って 自分に言い聞かせられる状態を常に保って書くのが2chだしな。
いや、俺はリアルで全力出せない分全力でレスして全力で恥をかくぞ
確信度によって態度変えるのが皆のため
555 :
デフォルトの名無しさん :2008/09/19(金) 20:34:41
cpp_akiraさんもう何がしたいのか分からなくて痛々しくなってきてるからやめて。
557 :
アキラ :2008/09/19(金) 21:20:31
また誤解されるのはイヤなので書いておきます。 548-551の話は、私のことではなくhitoさんのことですよね。 なのでTwitterでは、そんなこと言ってない、というようなことを書きました。 それと、555は私ではありません。
558 :
デフォルトの名無しさん :2008/09/19(金) 21:20:56
>>556 cpp_akira より晒し続けてるバカのほうが痛々しいし心配だ。
559 :
558 :2008/09/19(金) 21:21:32
あ、すまん age てもうた。
>>557 >>555 みたいなのは相手をするだけ調子づくだけだから、シカトこいたほうがいいよ。
それが
>>555 みたいなヤツの為にもなるし。相手にすると双方、馬鹿を見ることになるよ。
Twitterで誰が何やってるとか、いちいち構うなよ
同じ人じゃね?w
お前らもっとレベル高い話しろよ。 人の事なんてどうでもいいだろ?C++0xの話をしろC++0xの話を。
じゃ、話題でも振るか。 late_checkは必要悪なんだろうか。 late_check { //以下、スレ違いの話題も可
}
>>565 ないとどうにもならん。
N2719を読んで鬱。
俺にmove semanticsは使いこなせるだろうか…
そんなキモチワルイ構文よりプロパティをですね
わちゃー! late_check! なんだこれは 直感的に拒否反応が出たけど でも今はしっかり飲んじゃってるんで理解できないや
また性懲りもなく「xxxは僕です」ごっこやってんのか ウザいを通り越してイタいぞ はてなだかツイッターだかしらんが村から出てくんなよ ガキが
ここは C++0x を語るスレなんであって、C++0x を語る人を語るスレではないのでそこんところよろしく。
美少女中学生を語るスレでもあるぞ
違いますやめてください迷惑です
hitoに触れるなよ 人間性に問題がある奴なんだから
人間性に問題ないプログラマなんているの? C++やってるやつなんて特に
それでも
>>570 みたいな匿名で粋がってるだけのチキンと一緒くたにはされたくないです!><
そこでデレて!
みんな好き…
またアキラか
for(;;);
0bの話しようぜ!
>>582 それは2011年になっちゃったってこと?
それとも2進リテラル?
オービー?
いいえ女子中学生です
586 :
アキラ :2008/09/23(火) 13:57:11
これだから2chは・・・
はいはい偽物
美少女中学生の人気に嫉妬
スレッドスコープ変数とかあるのかな
スレッドとは何かを言語で規定しなきゃならなくなるからなぁ 無理だろ
済んでるの? スレッド関係はライブラリにするんじゃなかったっけ あったとしてもスレッドの寿命に合わせて管理されるヒープ変数を保持するテンプレートクラスとか そんなんだろ
ちゃんとメモリモデルから言語に組み込まれてるよ。↓こんな感じで。(ドラフト N2723 から) > 1.10 Multi-threaded executions and data races [intro.multithread] > 1 Under a hosted implementation, a C++ program can have more than one thread of execution (a.k.a. thread) > running concurrently. The execution of each thread proceeds as defined by the remainder of this standard. > The execution of the entire program consists of an execution of all of its threads. ...
この世にはスタックとヒープしかないっていうCの潔さが好きだったのに…
>>595 getenv(3)やstdio.hの事も忘れないであげてください。
597 :
デフォルトの名無しさん :2008/10/09(木) 05:12:59
News 2008-10-08: The 2008-10 mailing is available News 2008-10-08: The C++ Standard Core Language Issues List (Revision 59) is available News 2008-10-08: The C++ Standard Library Issues List (Revision 60) is available
N2763からnamed lambdaとblock-local functionが取り除かれている。 残念だ。
finalとか追加されんのか class hoge [[ final ]] { } sealedが欲しかった俺としてはうれしいが文法が・・
finalとconstって、どう違うんだ? 継承不可ってだけ?
属性が後ろに付くのがダサイ
じゃあDつかおうぜ
なぁにconstメンバ関数と一緒さ。
まあ、Cの時代から属性は後ろに書くものだったからなあ…
他が前にたくさん付き過ぎなんだよ
遂にconceptが草稿に入った
いまさらどうした? ドラフトが出たのは九日も前だぞ。
後ろに付くのはいいけど[[]]が激しくダサい wikiのリンクみたい
Microsoftが頑張ってC++/CLIのと似た構文にしてくれればいいのに、とVC++使いは思う。
なんだかんだ言ってC++/CLIの記法は悪くないよな まぁ、使う気はないんだが
洗練されているって感じがいいんだよなC++/CLIの文法は
しがらみがないってだけじゃね
しがらみがないおかげでグロ構文が必要ないことは素晴らしいことだ
[&]
spaced keywordなんて最悪のグロだ。頭おかしいと思う。
C++/CLIよりはManaged C++の方がマシだな俺は。
泥団子lisp
public ref class Hoge sealed
C++でGCサポートしようと思ったらああいう方法しかないよなぁ
C++/CLIはチルダだったっけ
ハット。結局、構文を整理し直したら C++/CLI になった、なら馬鹿馬鹿しい話だな
いいところは一緒になってもいいよ。 プロパティは止めて欲しいけど。 メタなスロットアクセスフックにして欲しい。 move semanticsみたいにね。
>>623 >メタなスロットアクセスフックにして欲しい。
>move semanticsみたいにね。
kwsk
結局ラムダのウンコ構文はそのままか…
まだまだ変更される可能性があるから、いったいどこから最終なんて言葉が出てきたのか疑問。
所でconcept gccみたいな産廃じゃないまともな処理系ができるのはいつですか?
規格が制定されてから五年後ぐらいには、まともな処理系が登場すると思ってるんだけどね。
すでにC++のコンパイラは一人の天才の手の負える仕事ではなくなっているわけだが。
じゃあ発想の逆転で、C++インタープリタを作る。
LLVM/clang のひとたちががんばってくれないかな... Apple に買収されたから C++ にはあんまり興味ないのかな。
>>632 仕様が決まってる言語処理系の実装に天才なんて不要
時間さえあれば経験豊富な凡才一人で完成するだろう
アホなのかな、この子は?
アホだな。
エロい会話禁止
639 :
デフォルトの名無しさん :2008/11/02(日) 05:33:25
C言語コンパイラなんか天才なら8時間で作っちゃうよ。 最適化までは無理だが。
天才じゃないだけあって説得力が無いな。
641 :
639 :2008/11/02(日) 06:11:01
30年ほど前、3歳のときに実際に作ったからそう言ってるの。 正確にはコンパイラジェネレータを8時間で作って、あとは1ヶ月かけて自動生成したんだけど、 いまどきのパソコンなら数分で完了するよ。 もちろん全ての仕様を網羅してるわけじゃないし基本ライブラリもないけどな。 最初のコンパイラだから。
もうちょっと面白くならないものかな。
もうちょっとひねりが欲しかったね 期待外れと言わざるを得ない
644 :
639 :2008/11/02(日) 06:33:00
神童も大人になればただの人...どころかただの馬鹿と化してしまったわけですね、わかります。
646 :
639 :2008/11/02(日) 07:58:08
> 大人になればただの人 いえいえ 完成品を渡して翌日には殴られて記憶喪失ですよ。 しかも殴られた理由が、「次はTRONを1日で完成させろ」って言われて拒否したから。
647 :
639 :2008/11/02(日) 08:00:56
要するに人身売買暴力団が仕切ってる限り日本に技術は育たない。 パチンコのゴト師だとか中国スパイに暗号技術者が殺されたりしまくってるでしょ。
久々にやねうらおみたいのを見た
面白さがみじんもないな
本人は面白いと思ってるんだから、そっとしておいてやれ
一番大事なautoを実装してるのはメジャー所ではVCだけかよ…
ほかはdecltypeがあるからいいじゃない。
しかしだね。 auto x = a + b ; auto iter = v.begin() ; の変わりに、 decltype(a + b) x = a + b ; decltype(v.begin()) iter = v.begin() ; では面倒だぜ。
#define demi_auto(X, Y) decltype(Y) X = Y; ...こんなマクロが流行るんですね、わかります。
>>657 既にBOOST_AUTOが切り開いた道
autoとdecltypeってどっちかが出来たらもう片方もすぐ出来そうだけどな(効率は別にして) 一番目立つ機能だから変なマクロが流行る前に最優先で実装して欲しい
demi って中二病っぽいね。
美少女中学生は中二が一番いいよぜ?
662 :
657 :2008/11/02(日) 22:43:22
decltypeの読み方は 「でっくるたいぷ」 でよろしいですねッ!
demicup
>>659 decltypeはsizeofの変種でめっちゃ簡単。
autoは宣言/定義を解釈するコードを書き換える必要がある。
最悪トップダウン/ボトムアップを入れ替える必要あり。
式の型が分かったら、 そのサイズを計算せずに、 その型のまま返すだけだからね。 sizeof → decltype
だからVCがベータにもならないのに、いきなりautoをサポートしてるのに驚いたんだがな。 普通decltypeが先だろと。
GC入るって本当?
autoはC++/CLIがらみで追加を計画していたと推測してみる。
C++/CLIの記法というか、MSがここまで評価されるのも珍しいなw
そうかautoって難しいのか auto検出したら内部で657のマクロみたいな置き換えすりゃいいだけかと思ってた
>>671 確か、VC++が標準対応売りにしだしたのはVS2002の辺りから。
ひどかったのは、VC6からVS2002の間が開き過ぎたせい。
2002 も結構ひどかったけどな。4年も待ったのにそれかよって感じで。 そして 2003 で一気に改善されて、2002 のアカデミック(無料アップデート対象外)を買った俺涙目。
4年どころじゃなくない? VC6って96年だった気が。 C++の標準化の1つの節目が98年なんで、VC6が対応しているわけもないという。
今もバグフィックスが遅れているから、 boostなんかVC++パッチの嵐だよね。 testが一番通ってるのもVC++なんだがw メジャー・バージョンアップで適合率トップ、 マイナー・バージョンアップではノロノロで追い抜かれる、 の繰り返しだね。
まあ開発スタイル的にそうなるのが必然だろ gccなんかと比べると特に
開発スタイルよりも、バグであっても、自社のものに依存しているものが多いから、 簡単にフィックスできないって事があるね。
boost が Comeau 非対応なのはなんか理由があったんだっけ?
メンテナンスするひとがいないだけでしょ
conceptを実装するのが一番しんどいイメージが
現状の型のセマンチクスを変更しないからそうでもないような あ、conceptとか入れたらlookupの挙動が変わる?
どこかのサイトに書いてあったけど、 VCはconceptを実装するのに一年はかかるとか なぜかはわかんね
一年で実装できたら大したものだ。 五年はかかるぜ。
俺なら8年で実現してやる
俺なら3年かけてから挫折する自身あるぜ
>>683 C++03やC++/CLIが使えなくなるわけじゃないから、
MSにとってそんなに優先順位の高い仕事じゃない。
コンパイラだけでライブラリはそのままじゃアレなんで、
ライブラリやらないといけないし、
独自ライブラリの部分のconcept化をどうするか考えて、
設計しとかないといけない。concept化やらない部分も、
やる部分との整合を考えないといけないから。
g++は規格部分+独自拡張だけだから身軽。
規格に全て書いてあるわけじゃないしね。
Issues Listにあるようなことを実装しながら考えないといけない。
initializer_listよお前もか
中途半端な物を実装されるよりはましじゃないの まだ仕様の方がちゃんと決まってないのに無茶言うな
上流設計の遅れを現場に押しつけるのイクナイ!
下手に実装したら、数年後VC6の悪夢が再びやってくること間違いなしだな。
VC10の寿命がVC6並に長くなる理由が ないので、それは大丈夫じゃないかな。
constructor delegationにmember initialization、 どっちも後から付けやすい機能だから、 次のアップデイトに入るんじゃないか?
サービスパックでだすような変更じゃないと思うんだが。
それを考えるのは美少女中学生だな
本格対応はVC11待ちか・・
サービスパックで対応するかどうかはまだ分からないとvcblogの人が言っていたな
あれ?ガベージコレクタ入るのん??
C++0x2EEAか。
704 :
デフォルトの名無しさん :2008/11/12(水) 22:54:20
C++0xの0xとは実は16進数のことだったんだよって 公式に言い訳しないの?w
0xの時点ですでに16進数ぢゃない
C++0xFFFFFFFF だお
BOM付けてくれ。
>>704 それは言い訳というよりは、むしろ愚直な反応というべきかも。
自分達からはその件について何も言わず、誰かに突っ込まれてから
「え? どう考えても16進数でしょ? アナタ何だと思ってたんですか?」
とか返すよりはw
なんで2010年の10進数で下二桁とってそれを16進数にするんだよw 2010は、16進数で 7DA な。 C++Dx ならまだ納得できるがw
そんなことよりGC導入って本当? 見送られたんじゃなかったっけ?
3.7.4.3
本格的に使えるようになるのは0f年ごろかな
これってコンパイラは現存するの?
いったい何をいってるんだ?
0xコンパイラは絶滅したよ
未来に戻れ
0x80xだな 西暦2048〜2063年までには
もういいよ
0xネタはもういいよ もっと面白い話題にしようぜ ユーザー定義リテラル採用で0b厨歓喜とか
俺、wwwwで一進数リテラル作ろうと思うんだ…
1: w 2: ww 3: www 10: wwwwwwwwww なぁ、0は?
0: w 1: ww 2: www 3: wwww
頭悪いな
素直にwWの二文字を使って2進数にしたほうが読みやすいと思うんだ。 夢はないけど
文字列リテラルをtemplate引数で受けれたらすごく楽しいことができそうなのに。 template<char c...> vector_c<char,c...> operator "" S(); decltype("hoge"S) → vector_c<char,'h','o','g','e'> templateで受けられるのは数値(を構成する文字)だけっぽい。残念。 でもこれはできる? decltype(123S) → vector_c<char,'1','2','3'>
文字列リテラルをtemplate引数で受けれたらすごく楽しいことができそうなのに。 template<char c...> vector_c<char,c...> operator "" S(); decltype("hoge"S) → vector_c<char,'h','o','g','e'> templateで受けられるのは数値(を構成する文字)だけっぽい。残念。 でもこれはできる? decltype(123S) → vector_c<char,'1','2','3'>
すまん。連投してしまった。
>>722 よくやった。わかりづらい。
さて次の議題だが、マイナス値はどうする?
>>728 0: w
1: ww
-1: www
2: wwww
-2: wwwww
またひとつ変態のためのオモチャができるわけですね
凶悪すぎるw
wとWでマイナス2進法を使って表せば任意長の整数が表せるな
>>728 そこでboost::lambdaでチャーチ数ですよ。
int w, h; なんてのがコンパイルエラーになるワケww?
>>720 は軽い気持ちで書いたが、規格では、
<literal> <user-defined-suffix>
しか許されないから、wwwwがリテラルになるのは無理なんだ。
int operator "" w(const char*p, size_t s) { // 提案ではoperator "w"と書いた。
return s; // '\0'は抜いたサイズが渡される。つまりstrlen(3)と同じ。
}
"www"w // == 3
なら可能。この定義なら ":-)"wでも3だが。
vで0、wで1を現わすとして2進数を実装するとこんな感じなのか。 "wvvvwvvwvwww"w // == 0x897 Vで2、Wで3を現わすとして4進数とか。 "WwVvwW"w // == 0xd87
-5 == "WWWW"w -4 == "WWww"w -3 == "WWwW"w -2 == "Ww"w -1 == "WW"w #0 == "w"w +1 == "W"w +2 == "WWw"w +3 == "WWW"w +4 == "Www"w +5 == "WwW"w
-2進数採用で負数も統一的に扱えるぜ 0 -> ""w 1 -> "W"w -2 -> "Ww"w -1 -> "WW"w 4 -> "Www"w 5 -> "WwW"w 2 -> "WWw"w 3 -> "WWW"w
-2進数とかワロスww この話題に触れたのはクヌース先生の説明を読んで以来だぜw
どんどんわかりづらくなってるwww GJ!w
インタプリタ書けば別言語を埋め込むことも出来るよな "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.\ ------------.<++++++++.--------.+++.------.--------.>+."BF =>"Hello world!" 夢が広がりんぐ
コンパイルタイムに評価できないと意味なさげ
仕様全然知らんのだけど、 ローマ数字をコンパイルタイムで数値変換とかは無理?
constexprって再帰もループもできないんだろ?
引数にコンパイル時定数しか取らないんだからあらかじめ計算できそうなもんだけどな operator""の中でグローバル変数使う可能性があるから無理なんだろうか
>>744 再帰にしない代わりに同じ内容の関数をたくさんつくれば、
有限ステップの計算ならできるんじゃね。
boost::protoを使ってbrainfuckを実装する作業に戻るんだ
>>741 operator "" BF("abcdef")は、
operator "" BF<'a', 'b', 'c', 'd', 'e', 'f'>()と等価だから、
必要な分だけ特殊化しておけば大丈夫。
C++厨はすぐにTMPしようとするから困る。
C++はD言語の爪の垢でも煎じて飲めば良いのになぁ>コンパイル時文字列操作
今度はD厨か。
Dといえば以前はDelphiだったのにな・・・
D厨は関数のコンパイル時実行で無限再起でも起こしてコンパイラを落としていればいい。
コンパイルタイム無限再帰で悩むのはC++、 コンパイルタイム無限ループで悩むのがD。
そろそろ文字列mixinを導入して本格的にマクロを捨てようじゃないか
importディレクティブマダー?
mixinなんてD臭いキーワード嫌だ
late binding指向のmixinなんかC++に入るわけがない。
後置単項の+はC++の演算子じゃないから
>>19 は構文エラー
後置+++はC+++の演算子だよ。
C# は # という演算子を作るべきだった。
C や C++ にすらあるというのに
でもC/C++の#演算子は前置単項だからな
使ったことないな
ASSERT のようなマクロを使う時に 引数をエラーメッセージに表示する時とかによく使う。
使う時に、じゃなくて、作る時に、だ。
プリプロセッサ演算子だな
ぷろぷりせっさ
ぷるぷるそっさ と空目
772 :
デフォルトの名無しさん :2008/11/24(月) 19:19:49
スレッドとメモリモデルに関してはどこを探せばいいですか C++0xで決まるのかどうかもわかってないレベルですが
C++0xのラムダ式は再帰できますか?
C++2003でも不動点演算子となるような関数オブジェクトが定義できるんで こういうのを0xでも実装すればかのうだと思います
>>774 VC++blogに0xのラムダを使った再帰の例が出てたよ
777 :
デフォルトの名無しさん :2008/11/30(日) 11:56:57
/ ..::::::...ヾ,-┐:::::.. ヽ、 /:::::::: :::::::::::::::..ヽ|、::::::::... ヽ、 / :::::::: 、:::::::::::::::::...ヽ::::::::::::.. ヽ / ::::: 人、 | ヽ、_:::::::::::::: |:::::::::::::. | ,イ´ | :::ト、 | `'-,r‐=,、ヽ、 ::: |:::::::::::::: | rv' l´ ヽ、:.| r-、 p ヽ `l ,ヘ::::::::::::::::: | | | | ヾヽ、 ハ ヾ_ノ .| |' .|:::::::::::::::::: | ラムダっちゃ♥ '´ ̄ ̄`ヽ、、_ | | | ヽ、l ゞ ー | レ'::::::::::::::::::: |  ̄ ` r-L l ', |` 、 ,' |:::::::::::::::::::::: | _rヾニ `ヽ ', ヽ、 r‐-ァ /::|::::::::::::::::::::::::.. | ヾゝイ´ ,/ .', ヽ、ゝ' _,.-;ノ:: |:::::::::::: ::::.. | :.. ト ´ /.... 'ヽ,、_ >r' /:: /::::::::::::: ::: | 〉 .|:::::::::::...... `ー-‐'´,-/ /::::: / `ヽ、::: | :.... .:::::::::::| |:::::::::::::::::,、-r―'''´ ̄ ,.-‐'´:::. / |:::::.... . | ::::::::::::::::::::::::::::::::| ',:::::::::::::∧ヾ V/―/::::::::::: / |:::::::::::.......:::. | ::::::::::::::::::::::::::::::::| ',:::::::::::ト kl /三/:::::::::: / ,'::::::::::::::::::::::: | ::::::::::::::::::::::::::::::::| ',:::::::::|ヾヾ|、 /::::::::: ,イ ,'::::::::::::::::::::::::: | | ::::::::::::::::::::::::::::::::| ',/ヽ__ヾ、|:::::: ∧/ /:::::::::::::::::::::::::: |.|.| ::::::::::::::::::::::::::::::::', ! / ヾ:: ∠__/ /:::::::::::::::::::::::::: | ||
N2554: The Scoped Allocator Model (Rev 2) ってあるけど、これ地味にいいね 組み込みでもSTLコンテナとか使いやすくなる予感
そもそも組み込みではSTL自体が提供されていないことも珍しくなく STLPortがコンパイル通るのも夢のまた夢だったり
組み込みって標準入出力ないんでしょ? cin,coutとかどうするんだろ
そういうとこでは<iostream>などが無くても良いことになっている。 フリースタンディングとかでググれ。
784 :
デフォルトの名無しさん :2008/12/07(日) 01:44:06
C++のISO 標準仕様の文書を無料で手に入れたいんだけど、転がってるところ知らない? JIS のHPにいったらPDFで閲覧できたんだが、こいつはスキャナかなんかで読み込んだのを PDF化したものらしく、ろくに検索もできないんで、ほとんど使えない。
draft + 規格名 + filetype:pdfでググって。
>>784 ありゃひどいよな…。
検索できない電子文書とかただのバイト列だわ。
無料じゃ手に入らない。金を払え。
>>784 なんで ISO の規格が見たくて JIS に取りに行ってんだ?
ISO のやつなら >1 のページにあるドラフトと Issue リスト見ればおおかた情報は揃うし、
検索もできる。
だいたいJIS規格のアレをまともに読んでいる奴はこの世にいるのか? 訳した奴でさえ、多分意味分かってないんじゃないのかアレ。
何で売っているものを無料で手に入れようと思うんだ?
この御時世に規格書を売るってのが変だと思うんだが。 C++0xの規格もやっぱり有料なのかな。
>791 公的標準化機関の制定する規格書で無料のものの方が少ないんじゃね? 運営費も必要だし。全額寄付だと公平性に問題がって話になるし、全額税金だと ある程度は受益者負担でって話が出てくると思う。 と思ったけど結構高いな、おい。 現行 C++ で JIS だと PDF がまだないけど、冊子で \17,325。PDF できても同額になると思われる。 ISO だと CHF 370,00 で 3万弱か? ANSI だと $30.00 なのに。 一時期 $15 で売ってたはずでその時に買ったから高いという意識があんまりなかった。
JISの規格票の値段はページ数に比例します。 恨むならでかい規格作った方を恨んでください。
794 :
デフォルトの名無しさん :2008/12/07(日) 12:38:07
CHFてどこの国の通貨単位か当てっこしようぜ。 おれはチャイニーズフランだと思う。
>>794 Confoederatio Helvetia Franc
コンピュータ技術者ならお馴染みのフォント名が実はあの山国のラテン語名だったのね。
すまん。TR1じゃなくてTechnical Report on C++ Performanceだった。
>>797 そいつはずっと前から >1 のリンク先でダウンロードできる。
C++0x の初期ドラフトは C++03 に近いからそれでいいんじゃね。
みんなちゃんと金だして買えよ。俺はISO版とANSI版とJIS版を買ったぞ。 そこまで揃えろとは言わんけど、せめて一つぐらい買ってやれよ。 こんなC++の新規格追いかけてるようなプログラマなんだから、みんないい給料貰ってんだろ?
そもそもその金は誰の懐に入るの?
803 :
802 :2008/12/07(日) 23:45:19
ちなみに俺はISOの奴、 INCITS+ISO+IEC+14882-2003.pdf だけ持ってる。古いのもあるが、最新はこれだけ。
804 :
800 :2008/12/08(月) 05:43:34
g++ 4.4にautoの実装と新しい関数宣言の構文来てるね。 あまり使い方わかってないけど、適当に4.4の新機能を使ってみた。 #include <iostream> #include <vector> template <typename T> auto f(T x) -> decltype(x*x) { return x*x; } int main () { std::vector<int> x{1, 2, 3, 4, 5, 6, 7, 8, 9}; for (auto i = x.begin(); i != x.end(); ++i) std::cout << f(*i) << std::endl; return 0; } 出力 1 4 9 16 25 36 49 64 81
やっぱりきもいな。 Dだと、 typeof(T*T) f(T)(T x) { return x*x; } auto f(T)(T x) { return x*x; } でいけるから、C++ももうちょっと頑張って欲しかったのに。
しばらく*iな理由を考え込んでしまった……
>>807 iがイテレータだからだよな
パッと見だと分からないね
んなわけねーべw > 考える、分からない
インクリメントされるint型がポインタで渡されてる(´・ω・`)??? って、一瞬なるよ。
iじゃなくてitにでもしておけばいいな。
>>811 ならねえよ。
concept map InputIterator<int> {
typedef int value type;
typedef int reference;
typedef int* pointer;
typedef int difference type;
int operator* (int x) { return x; }
};
でさえ全然普通。begin(), end(), *iでiterだなって分かる。
そんなのできないだろ コンセプトマップ貼り付けられる組み込み型ってポインタだけでしょ?
>>805 はイテレータの名前がiになってるから違和感あるんだな
あまりイテレータをiって名付けてるソースはないと思う
itとかiteとかiterとかならよく見るが
>>814 んなこたない。組み込み整数型も関数型もいけるはず。
そもそもループ変数がiなのはiteratorから来ているんじゃないの?
intだろ……、と思わずマジレス。
indexじゃなかったか?
intだろうとiteratorだろうとループ変数で使うならiだなぁ スコープが狭くて使用頻度が高ければ1文字は基本ですよねー
オッサンがマジレスしちゃうぞー
数学の積分で使うiはindex? どっちにしてもiとかjとかnという変数を見たら整数だと思うよ FORTRANerじゃないけど
よくわからないけどintegralでは?
頻度が高いからこそ二文字変数にしてインクリメンタルサーチで引っ掛けやすくすると言うこともあるが。
>>816 iotaからきてるはず。
だからC++0xには
void iota(Iter first, Iter last, T value)
なんて関数が<numeric>に入るんでしょ。
C++スレ見てたから、なぜitoaが? 卵から鶏が・・・とか思ってしまったんだぜ
え、素直に、FORTRAN の最初の整数値変数のiから来てるんだと思っていたが 算術周りは後付でしょ
大本は数学で行列や数列の要素を書くのに下付き文字でa_ijとか書いてたのだろ 1800年代からの習慣だ
それはそんなに古くない習慣だと思うが
>>814 ConceptG++で動いているコードだよ。
ユーザー定義リテラルのサフィックスに使えるのって'_'+小文字で始まるものだけ、で合ってる? _で始まらないのサフィックスは予約されてるし、identifierには違いないから '_'+大文字や__でを含むのもダメなんだよね?
'_'+小文字の識別子はファイルスコープで予約されているのだが。
コンセプトよくわかんないから質問していい? concept B<typename T> {/*...*/} concept D1<typename T> : B<T> {} concept D2<typename T>{ requires B<T>; } D1とD2って何が違うの?
refinementのばやい、concept_mapを定義すると、 refine関係のあるconceptでも、concept_mapが自動生成されます。
つまり、D1の場合は concept_map D1<Foo>{/*...*/} だけでconcept_map B<Foo>も自動で作られるけど D2の場合はそうならない で合ってる? てことはauto conceptの場合は全く同じでいいのかな
そうです。auto(以下りやくのところは節立てして書いてあります。 implict conceptがどうしたこうしたと。 仕様書から読み取るのは結構大変なんで、 六人記名の紹介論文を熟読することをお勧めします。 とはいえ、酔っぱらってて、チャックしないで書いてるから間違ってたらゴメンネ。 上のは14.9.6だとあてずっぽうで書いときますw
http://d.hatena.ne.jp/faith_and_brave/20081224/1230109605 "JP-29. 例外クラスのUnicode対応" について。
現状の std::exception::what() に "Remarks" として以下の記述がある。
> The message may be a null-terminated multibyte string (17.5.3.2.4.3),
> suitable for conversion and display as a wstring (21.2, 22.2.1.4).
ちなみにこの記述は C++ 2003 でも今のドラフトでも変わってない。
Unicode とか関係無しに、ここの "may be" を "must be" にして、
"conversion" の具体的な方法を示してもらえばそれでいいような気がする。
たとえば mbstowcs() + std::wstring(wchar_t*) とか。それがあれば、
投げる側はその変換に合うように文字列を std::string に変換してやる
ことができる。
っていうか、そうしないと std::cerr << e.what() のようなごく自然なコードが
不正となってしまう。
今の記述で十分。 m17nしたければgettext()使えばいい。
>>839 たとえばファイルが開けなかったときの例外を表示するときには開こうとしたファイル名が
表示されてほしいんだけど、投げる側で what() にファイル名が入るようにしてたら
gettext() に支障が出るんじゃない?
>>838 この人らは何者なの?
最終ドラフトにこんなに要望したって通るわけないだろ
これ以上禿に日本の悪い印象与えるのやめて
誤字の訂正とか真面目な部分もあるけど、
std::string、char*をUTF-8前提にしろとか言った奴は頭悪すぎ。
>>840 そういうことをwhat()に押し付けないで。
>>841 機械振興会館でやってるから、情報規格調査会のWGに集まった人たち、って
ところだね。なんか変な香具師が混じったんだろ。
what 内で表示すればいいんじゃね。
>>841 C++0xに関する作業はもうISO/IEC JTC1のWGへ移ってる。
ここでは上がってきたドラフトに対して各国の代表 (national bodies) が
コメントを出し、それを受けて手直しして、最終版 (FCD) を作り上げる。
そしてそれを national bodies による投票に掛けて、通ればISO/IECの規格として成立する。
日本は情報処理学会というところがnational bodyとして出席していて、
>>838 はそこの関係者。
そうか、正式な日本代表なのか あんなのが日本代表の正式な意見書になるのか…
最終版はちゃんとまとめられると思うよ。 国際規格に対するJISの貢献は結構大きいよ。 本家WGに参加する日本人はまだ少ないけれど。
>>842 「そういうこと」って何?
捜査対象ファイル名の表示を what() でやらないとして、ほかにどうするの?
C系の言語規格の立場としては、 そういうのはローカルプラットフォームの規約や コーディング規約でやってねってことになっているんじゃない? 少なくともMBSについては。 // WCSだとwstringパスに対するfstream APIが増えたけれど。
>>850 完全にアプリ側だけで使うものならそれでもいいんだろうけど、
std::exception は標準の例外として bad_alloc やら ios::failure やら
stdexcept のやつらを同じ方法で扱うためのインターフェースとなるべきだろう。
そうでなければ、毎回 bad_alloc, ios::failure, ... の catch を分けて書け、とでも言うの?
>>842 無理だろjkって空気だったよ、あの場でもさすがに。結局、コメントには残ったみたいだけど。
wchar_t と Unicode がごっちゃになってる Windows オンリーな人なんだろうなと思う。
>>851 std::stringにマルチバイドキャラクターストリング入れて悪いわけじゃないから、
やりたい奴は勝手にやればいい。ただそれだけ。
>>854 だからさ、それじゃ「std::exception の what() を表示する」っていうコードが書けないじゃん。
今のドラフトじゃ
throw std::runtime_error("実行時エラー");
throw std::runtime_error(u8"実行時エラー");
の両方が黙ってコンパイルできてしまうし >838 にある "may be ..." にどちらも
違反しない。複数のライブラリを使ってたりすれば同じプログラム内で両方使われてる
可能性だって出てくる。 catch (std::exception const&) {...} 中でどうすりゃいいんだよ、
って話。
>>855 標準の枠内で書きたければそうすればいいし、
枠からはみ出る必要があればそうすればいい。
> だからさ、それじゃ「std::exception の what() を表示する」っていうコードが書けないじゃん。
問題ない。表示されるかどうかは、
取り出してからどう扱うかと環境によるってだけ。
>>856 > 標準の枠内で書きたければそうすればいいし、
「標準の枠内で書く」ということがどういうことか定まらないのが問題なんだろ。
> 問題ない。表示されるかどうかは、
> 取り出してからどう扱うかと環境によるってだけ。
「○○だと困る」って話をしてるのに「問題ない。○○ってだけ」とか、もうね。
定まってる。 charには何を入れてもいい。
>>858 「何を入れてもいい char の列を表示するコード」、ってバイナリダンプとか?
>>842 「真面目な部分」として「誤字の訂正」をあげるようなヤツに「頭悪すぎ」とか言われたくないなw
変なのが沸いてるな・・・
what()のメッセージに付記入れるなら__func__にも付記欲しいな 人が読めるようにとかオーバーロードやテンプレート実体化ごとに区別付くようにとか 縛りがないとどうせマングリング名になるだろ
和製の処理系とか見たこと無いんだけど。 JISにおけるC++規格って誰が使うの?
富士通が処理系出してたよ。 templateも結構まともだった。
日立もつくってますね。 boostもサポートされているようです。
ほぇ〜、意外。 ぶっちゃけGCCからフロントエンドパクればいいだけじゃんとは思うんだけど。 なんか自作する理由があんだね。
大型やっているところなんでも揃えとかないといけないから。 あれがないって事になると顧客を失う。
default constructorによるconstructのことだろ。
クラスはそれでいいんですけど "default constructed"された非クラス型が value initializedされるのかdefault initializedされるのかが問題なんです
POD 型の場合、0 初期化されるの? されないの? って問題だな。
873 :
デフォルトの名無しさん :2008/12/27(土) 02:51:38
これってさぁ、基底クラスにObjectは採用してくれるの?
JavaのObjectクラスみたいな全クラスの暗黙の基底クラス? するわけがない
>>864 あ、NECもSXシリーズのためにコンパイラ作ってましたね。
スパコンのベンダはだいたいC++のコンパイラを作っている、と。
>>873 void*でエエがな。リフレクションならtype_infoを継承してリフレクション情報
を混ぜたクラスをtypeidで返すように各ベンダがすればいいだけだし。
関数テーブルが標準で乗るような設計はC++の理念に反する。
>875 SXC++はtemplateが哀しいほど使えないぞ complex<>も遅くて話にならないし
878 :
デフォルトの名無しさん :2008/12/27(土) 15:12:12
Objectが基底クラスじゃないからライブラリや設計が面倒くさいのに・・・ templateで無理やりぶん回すこともなくなるのに
>>878 あんまりプログラミング言語のこと知らないんだね。
>>878 キミObject型を何につかってんの?
現C++はSmalltalkやObjective-Cの様にObjectクラスが
存在しないとオブジェクト生成すらままならないという訳じゃないんだけど。
むしろC++はノイマン型アーキテクチャを直接叩ける言語にしては、
異常なくらいプリミティブ型へのサポートも厚い言語。
登場した時は恐れ入りました感があった。
今流行りの言語ではプリミティブ型コンテナの
ボクシング/アンボクシングが盛んだけど、
そのきっかけの一つになったと思っている。
C++は今のやり方を貫いて欲しい。
>>880 Objective-Cは、プリミティブ型のことは知りません、
Cで取り扱ってくださいって態度。
Smalltalk ならともかく、他の言語で単一継承モデルを採用している理由はなんなのかな 多重継承時のトラブル対策のみ?
interface/protocol があると多重継承はあんまり要らない気がする
>>881 SymbianやAndroidなど組み込み機器用のOOPとして現役だしね。
>>878 みたいなことしても、客が逃げていくだけで何のメリットもない。
>>882 実装継承以外がinterface, trait, conceptになっただけで、
今は事実上多重継承ばかりかと。
てか、Objective-Cとか知ってる人間からすると、 実装無しで継承って(笑)と思ってしまう。 interfaceなんかはあくまで、型システムによって機能しなくなった メッセージングを補完する為だけの苦肉の策で、本来の継承とはかけ離れたよに思う。
>>884 Mixinは実装多重継承との関わりがあると言っていいんじゃないの?
>>872 されない
struct foo {
char bar[1000000]
}
が自動的に初期化されたらいやだろう
デフォルトコンストラクトは文字通り「何もしない」ので不定値が入る
Objective-Cとか知ってる人間(笑)
>>882 多重継承は仮想関数テーブルが複雑になって実装が面倒だからじゃね?
>>888 そうか?見識が広がっていいと思うぞ。
C++とは真逆の言語だからね。
>>889 invokeinterfaceやmixinでも同じだよ。
いい加減exportの扱いどうにかならんか? 0xなるんだから委員会も、もう少し強制するなりしろや。 コンパイル速度が遅くてかなわんぞ。
exportは実装に見合うだけの利益はないよ。 コンパイル時間が一割ぐらい早くなるかもしれんが、exportによって、 今までできなかったことができるようになるとか、そういうことは一切ないから。
895 :
875 :2008/12/27(土) 18:35:24
>>877 実際に使ったことはないのですがw
情報ありがとうございます。
まあ、日立、富士通、NECといったスパコンベンダは
C++コンパイラを作っているのは事実、ということで。
>>887 引用スレに書かれている通り、foo() の書き方だと0初期化だよ。その互換性の話をしているんだと思う。
>>894 そんなにみみっちいかなぁ。
GCCのpragmaでやってるような、翻訳単位ごとにテンプレートのインスタンスが
発生するという事態は改善できるだろ。それから、ヘッダーの見通しもよくなるし、
STLの内部実相の為にベンダーが用意した__imp__comperなんて関数も取り込まなくて
済むようになる。(ファイルスコープが効く)
まぁ、実装が一つしか無いから机上の空論ではあるけどね。
class Parent { public: int Method(int); }; class Child:Parent { public: using Parent::Method; }; って感じのprivate継承とか static using { struct { int a,b; }; char c: }; みたいな無名共同体。 int (Class::*member)=0; の様なメンバー変数に対するポインタ(メンバー関数では無い) なんて、使ってる人いる?むしろ使ったことある人いるか?
private継承は使うだろ普通に 無名共用体はC++ではあんまり使わないかもしれないけどCではよく使う
上に関しては、そんな書き方初めて見た。 それprivate扱いなの? 書き忘れ?
>>900 C++のclassはアクセス指定を省けば
基本private。structはその真逆。
なるほど、そのルールは継承にも適用されてたのね。。
メンバー変数に対するポインタは、 自作インタープリタ上のオブジェクトを C++のクラスに結び付けるテンプレートを書いた時に使ったことがある。
メンバ変数に対するポインタは リストの prev/next のどちらにも適用できる処理を書く際に使えたりする。
いよいよ09年なわけだが
今年中に纏まるとは思えないのだが。
日本限定なら09年度という便利な言葉が使えるんだが。
それでも猶予は4ヶ月しか増えないのだが
いや、そもそも0x年まであと27年もあるわけだが
C++0xa
(++0x) だからあと2年猶予があるぞ
どうせ急いで制定してもC++プログラマの大多数は飛びつかないな・・・
とりあえずautoだけでも早く使えるように頼む
いやいやunique_ptrを
スレッドの概念が入るだけでありがたい
variadic templatesが使えるようになるのはいつですか
2011
>916 gcc 4.3 以降を入れれば今すぐにでも。
const int n1 = 10; と constexpr int n2 = 10; って何が違うの
右辺が整数定数なら差はないんじゃね
constexpr って導入する意味あるの?
constexprな関数の導入に意味がある。
constexpr constructor凄く便利。 ダラダラと逐次的な初期化コードや それを含む初期関数を書く必要がなく、 データを宣言的に書ける。
>>923 kwsk... constexpr って(有る程度複雑な)計算結果が定数として扱えるように
なるとしかわかってないんですが、それがデータが宣言的にかけるとは
どういうことでしょう?
925 :
923 :2009/01/04(日) 23:00:49
日本語訳もあるからググれ
しかし本当遅くなったよな。
もう大体固まってるからなぁ ネタがない
じゃあVS2010にconceptが入らない愚痴でも語るか
愚痴って語るものなのか
VSどころか大手商用はどこも入れてこないし ConceptGCCは相変わらずグダグダだし 普通に使えるようになるまではまだまだかかりそうね
一部でいいから実装してほしいな。 ていうか標準作るときにもうちょっと段階的に作って欲しかった。 autoとか超欲しいんですけど。
>>930 > ConceptGCCは相変わらずグダグダだし
中の人は去年はMPI.NETやっていたみたいで、
ConceptGCC Developer's Blogもほとんど更新してないね。
寄付でMSに釣られちゃったんじゃないことを祈る。
MSに釣られてConcept VC++作るんですね。
>>932 javac.infoの中の人は、
MS Researchいっちゃったしね。
conceptがexportみたくなったら超笑える
それはないわ。 Conceptはむしろ流行る。 他の言語にも伝染すると思う。 Template並みのムーヴメント(笑)かと。 既にあるHaskellは除いて。
ConceptGcc使ってみた感じだと こんなのも明示的に指定しなきゃならないのかよ感が漂う
こんなの流行るわけがねぇw
conceptってconcept mapつかなかったらただのコンパイルエラーがわかりやすいテンプレートだよね。 そんなの流行るにきまってるじゃん。
標準ライブラリのtrait→conceptの書き換えがまず起きる。
templateってメタプログラミングしなかったらただの型を明示するわかりやすいコンテナが作れる機能だよね。 そんなの流行るにきまってるじゃん。
>>941 マクロなしでmax(a,b)を書ける機能のことも忘れないであげてください
最初の頃は、特殊化して別のクラス作るなら、 今までやっていたとおりマクロで十分じゃないかって意見も多かったよ。 #define List(T) \ class List_##T ... ってのをtemplate以前にやってたから。
C++はいい加減テキストマクロ廃止すべきだよ。 代わりに、ユーザ定義シンタックスとか入れれば流行るだろうに、 コンパイラベンダが許さないんだろうなあ。
いちおーCでできることは全部できる建前だし
HaskellだってGHCでCのプリプロセッサを使えるようにできるよ 多くのフラットフォームに対応するのには便利だよね
マクロが必要=言語の不備という構図が見えてきて面白い
コンパイラにジェネレータを統合できれば面白いのに
マクロは必要だろ コンパイル時の機能制限とか、環境依存のインラインアセンブラ切替とかAPI呼び出しとか、どうすんだ?
その辺を閉じこめるためのattributeなんだろ
>>949 その辺は、D言語ですでにマクロなしで実現されている
D の version は素晴らしい。
高度な言語機能でマクロの代わりのをするのは無理な感じがする コンパイラのバグや処理系ごとの違いの吸収もマクロでやってるんだから マクロを不必要にするための言語側の機能にバグや処理系ごとの違いがあると... マクロぐらい簡単な代替が必要 ちなみにDのことはよく知りません
今までもインライン、テンプレートなどはマクロを使わなくて済むようにするためという見方だってできるだろう。 一歩ずつ、着実に。 C++1xでは#includeの後継が欲しい。
const 定数もだな。
必要とか不要とか言ったところで今更なくすの無理だろ
不思議と便利になる気がしない言語だな。 何でわざわざ改良してくんだか、腐った料理にホイップしても食えるようにはならんべよ
たしかに局所的には良くなっているように見えるんだが、 全体として見ればますます複雑になっているだけだ。
言い忘れた。だがそこがいい。
それはあらゆるプログラミング言語の宿命
このスレにいる人は既に仕様見て全て把握してるのか・・・
建て増しを重ねてカオスになるか(C++,Java) 作り替え続けて互換性地獄を招くか(D、各種LL) 変化をやめて引きこもるか(C89) どれがいいんだろうね
LispとかForthのことだな
C:寿司 C++:フグ刺し Java:フランス料理 LL:日替わり定食
.NET:和洋折衷
人それぞれだが、C++ の魅力はコンパイル時決定性の高さ。 その能力を向上させつつ柔軟性を増しており、素晴らしいと思う。 まあ、C++ はどちらでも一番ではないわけで、真の需要は高機能アセンブラとしてのものだろうけど。
>>968 そう考えると、いかに間抜けな次規格ってなもんだよな。
>>969 なんか「コンパイル時決定性」を損なうような変更入ったっけ?
スレッドとか?
アセンブラとして中の動きをちゃんと把握したいのに 規格はどんどん無駄な抽象化の方向に進んでるからな 隠れて何かをコソコソやる機能はいい加減やめて欲しい コンセプトマップとかどう考えても不可解なバグの温床になるとしか思えないから消えてくれ
アセンブラ使いたいならアセンブラ使えば? 抽象化を理解できないお前がバグの温床かと。
もうちょっとOOPよりの変更を入れてくれても良かったのにな
C++はマルチパラダイムです。
やっぱあまり率先して使う規格じゃないなー。
>>971 アセンブラとしてってことなら実行時の話だろ?
動的メモリを隠れてコソコソってのが嫌というなら分かるが、
コンセプトマップは関係なくね?
脳ミソがembeddedな人のために、ちゃんとembedded C++が制定されてますよ。
>>977 テンプレート削るとか問題外だろ
さっさと滅びればいいと思う
さすがにもう滅びてるだろ。
見て見てー #define loop(n) __loop(n)->*[&] class __loop{ unsigned int times_; __loop(unsigned int u) : times_(u){} void operator ->*(std::reference_closure<void()> &block){ while(times-->0)block(); } }; int main() { int x = 0; loop(100){ ++x; } } どう思う?
__の使い方がなってない
namespaceという簡単な仕組みすらこれほど周知されていないのに、 いったいどうやったらコンセプトがメジャーになれるのか、はなはだ憂慮すべき一例ではある。
ラムダ式早くきてくれー!!
現場で誰も望んでないのにな。 仕様だけ決まってどうする。 c++/CLIを思い出すよな!
C++0x/CLIの計画はあるんだろうか
C++/CLIなんて必要な時に必要なところ限定で使えればいい言語だろ
追跡右辺値参照が追加されるんですね
interface が欲しい。 public 強制で virtual も = 0 も書かなくても純粋仮想関数になって 仮想デストラクタが自動的に作成されるやつ。
じゃあインターフェイスメンバの明示的実装もお願い
>>983 個人的には、テンプレートのエラーメッセージがまだましになる機能として有望視している。
つか、次スレ立ててくれ
次スレいる?
おつ
998 :
デフォルトの名無しさん :2009/01/20(火) 23:16:05
うめるか
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。