C++0x 2
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/10/08(月) 20:29:11ttp://www.open-std.org/jtc1/sc22/wg21/
前スレ
http://pc11.2ch.net/test/read.cgi/tech/1149440647/
0002デフォルトの名無しさん
2007/10/08(月) 20:44:390003デフォルトの名無しさん
2007/10/08(月) 21:29:390004デフォルトの名無しさん
2007/10/08(月) 21:33:370005デフォルトの名無しさん
2007/10/08(月) 21:52:06乙
0006デフォルトの名無しさん
2007/10/08(月) 21:53:140007デフォルトの名無しさん
2007/10/08(月) 21:54:53--- C++98 Code ---
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vector<int>::iterator i = find(v.begin(), v.end(), 2);
--- C++0x Code ---
vector<int> v = { 1, 2, 3 };
auto i = find(v, 2);
STLヴァリヴァリな人にはとってもラクチンになる予感。
0008デフォルトの名無しさん
2007/10/08(月) 22:05:18ttp://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!159.entry
2007年10月に最初の完全なドラフト
2008年10月に最終文書
2009年に "ISO/IEC 14883(2009): Programming Language C++"
……という予定で今のところ作業中らしい。
0009デフォルトの名無しさん
2007/10/08(月) 22:15:41これってmapにも使えるのかな
map<int,string> m = {{0,"hoge"},{5,"hage"}}
とかできると個人的にはうれしい
0010デフォルトの名無しさん
2007/10/08(月) 22:41:24うえー
0011デフォルトの名無しさん
2007/10/08(月) 23:00:04va_list よりは大分ましだと思うが、std::initializer_list<T> を使うことになる。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2215.pdf
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2385.pdf
>9
std::map にも initializer_list を受けるコンストラクタができるようなので可能。また、n2215 の 5 章にほぼ同じ例がある。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2220.pdf
0012デフォルトの名無しさん
2007/10/08(月) 23:04:28コンストラクタの引数に std::initializer_list<T> を指定するだけらしいよ。
0013デフォルトの名無しさん
2007/10/08(月) 23:16:03template <typename T>
std::complex<T> operator"i"(T arg) { return std::complex<T>(T(0), arg); }
として、
std::complex<double> z = 1.0 + 1.0i;
でいいのかな?
0014デフォルトの名無しさん
2007/10/08(月) 23:41:480015デフォルトの名無しさん
2007/10/09(火) 00:14:380016デフォルトの名無しさん
2007/10/09(火) 00:28:29ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2369.pdf
0017デフォルトの名無しさん
2007/10/09(火) 00:43:08コーディング規約とかで真っ先に使用禁止になりそうな機能だ(w
0018デフォルトの名無しさん
2007/10/09(火) 01:05:02まあ適切につかえば便利。>>15 と初期化リストとあわせて
vector<complex<duble>> v = { 1.0, 0.707 - 0.707i, 0.6 + 0.8i, 1.0i };
こう書けるし。これを従来の方法で書くのはうんざりするよ。
0020デフォルトの名無しさん
2007/10/09(火) 01:30:47×duble
○double
0021デフォルトの名無しさん
2007/10/09(火) 01:35:530022デフォルトの名無しさん
2007/10/09(火) 01:51:470023デフォルトの名無しさん
2007/10/09(火) 01:52:320024デフォルトの名無しさん
2007/10/09(火) 02:29:02それはコーディング規約で禁止になるなwww
0025デフォルトの名無しさん
2007/10/09(火) 02:30:350026デフォルトの名無しさん
2007/10/09(火) 09:40:100027デフォルトの名無しさん
2007/10/09(火) 12:47:170028デフォルトの名無しさん
2007/10/09(火) 15:46:48Boostは今も戦いの最中
0xはとんでもないバグだらけと予想
0029デフォルトの名無しさん
2007/10/09(火) 16:36:270030デフォルトの名無しさん
2007/10/09(火) 16:42:21VC7.1になるあたりの頃にHerb SutterがMSに入って直しまくったわけだが
まだ彼がMSにいるならすぐ追いつくんじゃないのかなあ
0031デフォルトの名無しさん
2007/10/09(火) 16:43:080032デフォルトの名無しさん
2007/10/09(火) 16:44:10○ C++/CLI
0033デフォルトの名無しさん
2007/10/09(火) 16:48:49C++0x/CLI
の登場ですよ!
0034デフォルトの名無しさん
2007/10/09(火) 17:01:14にわかだな
MSは速攻対応するに決まってるだろ
ただしバグだらけ
0035デフォルトの名無しさん
2007/10/09(火) 17:02:050036デフォルトの名無しさん
2007/10/09(火) 17:03:100037デフォルトの名無しさん
2007/10/09(火) 20:08:280038デフォルトの名無しさん
2007/10/10(水) 12:35:200039デフォルトの名無しさん
2007/10/10(水) 18:23:550040デフォルトの名無しさん
2007/10/11(木) 05:59:41かなりいい成績出してるようだが。
ただし Boost 側の対処が頑張っているからではあるのだが。
それ言ったら Boost のコード読むと Borland C++ 向けの
#ifdef のほうが多い気もする。
というわけで、さっさと auto による型推定はできるようにしてほしい。
正直、テンプレートとか複雑になってくるともうわけわかめになるから。
このコンテナ使おうとしてるんだからイテレータの型くらい理解してくれよ、
とか思うこともある。
0041デフォルトの名無しさん
2007/10/11(木) 06:27:54もっと難解なコード書けるけどな。
0042デフォルトの名無しさん
2007/10/11(木) 08:24:123ぐらい?
0043デフォルトの名無しさん
2007/10/11(木) 10:49:04tr1 とかの名前空間に配置変えされていくの?
最終的には std の下に入るの?
0044デフォルトの名無しさん
2007/10/11(木) 17:50:130045デフォルトの名無しさん
2007/10/11(木) 18:43:03それだけで劇的に違うと思うんだがなあ
0046デフォルトの名無しさん
2007/10/11(木) 19:36:01working draftではもうstdに入ってる>>16
0047デフォルトの名無しさん
2007/10/11(木) 19:39:26名前の重複を避けるためにunorderd_map
とか妙な名前になってるらしいですが、
現実にhash(hash_map?)をstd名前空間に定義しちゃってる
著名なライブラリとかってあるんですか?
そんなん「stdに書いちゃう奴が悪いだろ」で終了の気がするんですが
あるいはマクロでもあるのかな・・
0048デフォルトの名無しさん
2007/10/11(木) 21:24:46namespace std::collections
{
class AreKore
{
};
}
みたいな奴
0049デフォルトの名無しさん
2007/10/11(木) 21:56:02もしGC入ったら趣味プロレベルはそっちに流れそうな気もする
0050デフォルトの名無しさん
2007/10/11(木) 22:04:29SGI -STLはかなり初期から入ってた。
というか、今じゃほにゃららext系の名前空間にむしろ入ってないケースの方が多いくらいだが、
こいつらも一時期は std 内に生息していた。
0051デフォルトの名無しさん
2007/10/12(金) 01:27:50C++はパッケージがないしなあ。
0052デフォルトの名無しさん
2007/10/12(金) 06:44:24それ、便利だよなぁ。あったら。
0053デフォルトの名無しさん
2007/10/12(金) 07:06:19提案はあったようだけど
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1524.htm
Not ready for C++0x になってる。
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2389.html
0054デフォルトの名無しさん
2007/10/12(金) 17:15:280055デフォルトの名無しさん
2007/10/12(金) 17:39:48つまりない。
0056デフォルトの名無しさん
2007/10/12(金) 18:29:100057デフォルトの名無しさん
2007/10/12(金) 19:58:56最終投票まで油断は禁物。
0058デフォルトの名無しさん
2007/10/12(金) 22:27:28新しい予約語は増やさないで可能な限り記号で。
拡張forでbeginとendが必須とかいらん。[]辺り使ってくれ(現状は知らんケド)
nullptrとかlong longとか絶対要らん。
折角bit長決定してねぇんだからlongで代用させとけ。
いかにMSが文句言おうと規格無視して32bit前提にしてるのが悪い。
0059デフォルトの名無しさん
2007/10/12(金) 23:57:31C++0x に入るかもしれない提案だと、本当の予約語としてこれくらい追加。
() で囲んでるのは attribute の提案(n2379)が通ったら予約語にはならないと思われるもの。
実際には、キーワードの再利用とかもひどいし、std::inializer_list とか予約語じゃないけど
基本的な機能で使用されるものとかも多いので望み通りにはいきそうにないね。
[working paper]
(alignas), alignof, char16_t, char32_t, constexpr, decltype, static_assert
[concept]
axiom, concept ,concept_map, late_check, requires
[GC]
(gc_forbidden, gc_relaxed, gc_required, gc_safe, gc_strict)
[雑多なやつ]
nullptr, (thread_local)
0060デフォルトの名無しさん
2007/10/13(土) 00:04:35long longは現状追認で仕方ないだろ。C99にも入っているし。
それよりint 32 bit, long 64 bit, long long 128 bitなんて妄想しようぜ。
でもnullptr不要には同意。
0061デフォルトの名無しさん
2007/10/13(土) 00:18:010062デフォルトの名無しさん
2007/10/13(土) 00:18:020063デフォルトの名無しさん
2007/10/13(土) 00:28:59gccにあったsignatureの方がよくね?
まぁ、廃止されたんだから、廃止されたなりの
デメリットがあったんだろうケド既存のクラスをいじらなくて済む分
signatureの方が便利そうだ
0064デフォルトの名無しさん
2007/10/13(土) 02:14:030065デフォルトの名無しさん
2007/10/13(土) 02:51:430066デフォルトの名無しさん
2007/10/13(土) 04:42:020067デフォルトの名無しさん
2007/10/13(土) 09:17:370068デフォルトの名無しさん
2007/10/13(土) 09:28:11それは nullptr がテンプレートとして実装されていればいいのにってこと?
0069デフォルトの名無しさん
2007/10/13(土) 12:09:20ポインタを保持できるコンテナやアルゴリズムを書いたりするとき
ヌルポインタに対するテンプレート特殊化が書きやすい、
ってことだべ。
NULL=0定数を使うと整数の特殊化とかち合う。
0070デフォルトの名無しさん
2007/10/13(土) 12:11:25WindowsがLLP64モデルを採用してるからじゃない?
0072デフォルトの名無しさん
2007/10/13(土) 12:44:480073デフォルトの名無しさん
2007/10/13(土) 16:29:410074デフォルトの名無しさん
2007/10/13(土) 16:56:24なんであそこまでC++/CLIに入れ込むのかわからん。
MSとの契約に書いてあるのかな?
0075デフォルトの名無しさん
2007/10/13(土) 17:05:590076デフォルトの名無しさん
2007/10/13(土) 17:18:330077デフォルトの名無しさん
2007/10/13(土) 18:32:59リソース混合状態を考えると、何かがいることは確か
0078デフォルトの名無しさん
2007/10/13(土) 21:29:450079デフォルトの名無しさん
2007/10/13(土) 21:32:11誰かやると思った
#if defined nullpo
#define ga nullpo
0080デフォルトの名無しさん
2007/10/13(土) 21:37:10はダメなのか・・・
やっぱり誰かが使ってそうだから?
0081デフォルトの名無しさん
2007/10/13(土) 21:46:52それだと全てのgaがnullpoに置換されないか?
0082デフォルトの名無しさん
2007/10/13(土) 21:51:510083デフォルトの名無しさん
2007/10/13(土) 23:22:060084デフォルトの名無しさん
2007/10/13(土) 23:25:200085デフォルトの名無しさん
2007/10/13(土) 23:28:420086デフォルトの名無しさん
2007/10/14(日) 02:59:020087デフォルトの名無しさん
2007/10/14(日) 03:55:27T* p = ...;
if (!p) あぼん
は生きてるよね?
0088デフォルトの名無しさん
2007/10/14(日) 03:56:30あれが入ったらダブルディスパッチが不要になるな。
0089デフォルトの名無しさん
2007/10/14(日) 04:08:52それなに?
C#の event みたいなやつ?
デリゲート使ってるやつ。
0090デフォルトの名無しさん
2007/10/14(日) 05:31:310091デフォルトの名無しさん
2007/10/14(日) 08:59:17/clr付ければnullptrが使える。
0092デフォルトの名無しさん
2007/10/14(日) 09:00:16どうせ
#define nullptr 0
ってなるだけだろ。
0093デフォルトの名無しさん
2007/10/14(日) 09:37:57それだと提案されてる内容を満たさない。
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2214.pdf
nullptr の型は nullptr_t であり整数値として扱うことができない。
>87
定数 nullptr そのものが出てこない限りプログラムの意味論には影響しないと思われる。
0094デフォルトの名無しさん
2007/10/16(火) 21:52:03C++ (c plus plus)
C# (c charp)
C* (c anal)
C@ (c gurochikuvi)
0095デフォルトの名無しさん
2007/10/16(火) 22:06:330096デフォルトの名無しさん
2007/10/17(水) 00:05:200097デフォルトの名無しさん
2007/10/17(水) 01:09:25Cωって存在するぜ?
http://ja.wikipedia.org/wiki/C%CF%89
0098デフォルトの名無しさん
2007/10/17(水) 01:16:470099デフォルトの名無しさん
2007/10/17(水) 03:21:290100デフォルトの名無しさん
2007/10/17(水) 03:36:300101デフォルトの名無しさん
2007/10/17(水) 08:04:36あっても良さそうなもんだと思うんだけど。
0102デフォルトの名無しさん
2007/10/17(水) 08:36:11boostにある日付を扱うライブラリはだめ?
0103デフォルトの名無しさん
2007/10/17(水) 09:45:290104デフォルトの名無しさん
2007/10/17(水) 10:46:040105デフォルトの名無しさん
2007/10/17(水) 11:10:130106デフォルトの名無しさん
2007/10/17(水) 11:37:03別の場所読んでた。
0107デフォルトの名無しさん
2007/10/17(水) 13:06:28このスレに来るの少し早いんと違うんかと
無いのかね、言いたいだけと違うんかと
0108デフォルトの名無しさん
2007/10/18(木) 17:35:17日本語でおk
0109デフォルトの名無しさん
2007/10/19(金) 12:14:52C言語でおk
0110デフォルトの名無しさん
2007/10/19(金) 12:48:57enumや配列の初期化では無視してくれるだろ。
0111デフォルトの名無しさん
2007/10/19(金) 14:12:07void foo(int x)とvoid foo(int x, int y = 1)を定義しておいて、
foo(2)で前者を、foo(2,)で後者を呼べるようにしろ、
とゆー輩が現れそう。
0112デフォルトの名無しさん
2007/10/19(金) 14:15:540113デフォルトの名無しさん
2007/10/19(金) 17:17:150114デフォルトの名無しさん
2007/10/19(金) 18:01:36if ( (i, j) == n )
||
if ( i == n && j == n )
って判断してくれないかなぁ
0115デフォルトの名無しさん
2007/10/19(金) 19:11:25変数でなく定数のnに関してまとめるというのに違和感が…
それだったら m < i < n を m < i && i < n と同一視してくれの方がまだましだと思う。
0116デフォルトの名無しさん
2007/10/19(金) 23:42:39Perl モジュールだけど、
ttp://search.cpan.org/~lembark/Quantum-Superpositions-2.02/lib/Quantum/Superpositions.pm
と同じような記法で良ければ今でもライブラリとして実現できそうな予感。
0117デフォルトの名無しさん
2007/10/20(土) 00:35:20なるほど、any とか all とかで範囲を確定するライブラリを作るわけですね
result = ( notstd::any( i, j ,k ) < index ) ? true : false;
とかって書くわけだ。便利そうですね
0118デフォルトの名無しさん
2007/10/20(土) 10:03:14これならいいね。
>>114はアレだけど、operator,で>>116を定義できちゃうかな?
0119デフォルトの名無しさん
2007/10/20(土) 10:42:500120デフォルトの名無しさん
2007/10/20(土) 11:52:290121デフォルトの名無しさん
2007/10/20(土) 12:10:380122デフォルトの名無しさん
2007/10/20(土) 12:40:26日本語でok
0123デフォルトの名無しさん
2007/10/20(土) 12:44:540124デフォルトの名無しさん
2007/10/20(土) 12:47:08具体例でおしえてください
0125デフォルトの名無しさん
2007/10/20(土) 12:54:28あと、関数型言語じゃないんだから、副作用のないライブラリなんてほとんど全然ないとおもうんだけども???
0126デフォルトの名無しさん
2007/10/20(土) 12:56:450127デフォルトの名無しさん
2007/10/20(土) 13:25:22それに対しOpenGLとかは副作用そのものを目的としたライブラリで、肝心のC++のライブラリは
どっちに目的を置いたライブラリか分かり辛いのが多い、て事が言いたいんだろ。
どっちが目的かはグレーゾーンみたく明確な線引きは無理だろうけど
0128デフォルトの名無しさん
2007/10/20(土) 13:34:59記述を簡単にするためのシンタクスシュガー的なライブラリと
それ以外の事か
前者はboost::noncopyableとかかな
0129デフォルトの名無しさん
2007/10/20(土) 13:35:060130デフォルトの名無しさん
2007/10/20(土) 13:37:030131デフォルトの名無しさん
2007/10/20(土) 13:42:54そういうのがキレイに分かれててほしいときはJavaとかC#を使えばいい。
俺は使い分けてるよ。
0132デフォルトの名無しさん
2007/10/20(土) 13:56:270133デフォルトの名無しさん
2007/10/20(土) 14:51:30News 2007-10-19: C++ Standard Core Language Issues List (Revision 51) is available
0134デフォルトの名無しさん
2007/10/20(土) 18:30:410135デフォルトの名無しさん
2007/10/20(土) 19:07:030136デフォルトの名無しさん
2007/10/20(土) 19:38:390137デフォルトの名無しさん
2007/10/20(土) 20:25:150138デフォルトの名無しさん
2007/10/20(土) 20:29:40/ \ 「ロリコン」に興味があるの?
/ ─ ─\ 変態っつーかキ○ガイじゃね?
/ (●) (●) \ こっち見んなよ
| (__人__) |
\ ` ⌒´ /
0139デフォルトの名無しさん
2007/10/21(日) 00:44:340140デフォルトの名無しさん
2007/10/21(日) 08:09:56気持ち悪い
0141デフォルトの名無しさん
2007/10/21(日) 08:50:04時代は変われば変わるもんだなぁ
Comeauのlibcomoはwchar_t関連の実装が空っぽなので注意な
0142デフォルトの名無しさん
2007/10/21(日) 12:16:270143デフォルトの名無しさん
2007/10/21(日) 12:34:06>>133
"block scope"って用語は消えて、"local scope"に統一されるんだな。
あとは特筆すべき変化はないが、sizeofを使った特殊化の奴は、
meetingで方向決まったものの、まだ文書化されてないんだな。
最初の話に戻るが、提喩ってのは女の子を映画に誘うことじゃないぞ。
0144デフォルトの名無しさん
2007/10/21(日) 16:12:470145デフォルトの名無しさん
2007/10/21(日) 17:08:26>sizeofを使った特殊化
kwsk
0146デフォルトの名無しさん
2007/10/21(日) 20:24:43でもよー、いつからロリコンが女の子をあらわす言葉になったんだ?
まあロリコンの女もいるかも知らんが…
0147デフォルトの名無しさん
2007/10/21(日) 20:29:43これは単に「正しく認識しているかどうか」の問題。
0148デフォルトの名無しさん
2007/10/21(日) 21:20:390149デフォルトの名無しさん
2007/10/21(日) 21:28:11ttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#339
特殊化とはちょっと違う文脈な気もするけどこれですか。
0150デフォルトの名無しさん
2007/10/21(日) 23:00:470151デフォルトの名無しさん
2007/10/21(日) 23:29:370152デフォルトの名無しさん
2007/10/22(月) 01:19:300153デフォルトの名無しさん
2007/10/22(月) 01:49:310154デフォルトの名無しさん
2007/10/22(月) 01:50:40誰だよ?w
0155デフォルトの名無しさん
2007/10/22(月) 23:35:350156デフォルトの名無しさん
2007/10/22(月) 23:53:160157デフォルトの名無しさん
2007/10/23(火) 00:11:43平清盛の大叔父の平清岡だよ。
ちなみに弟は平盛岡。
0158デフォルトの名無しさん
2007/10/23(火) 10:36:59>C# では、new 修飾子を使用して、継承メンバを明示的に隠ぺい
>する必要があります。
こういう安全機構(といっても構文上の)が C++ にも必要じゃね?
0159デフォルトの名無しさん
2007/10/23(火) 10:38:330160デフォルトの名無しさん
2007/10/23(火) 11:54:33メソッドの中で使ってしまって●一日悩んだ.
こういうのも言語仕様上明示的に隠ぺいしなきゃ
ならないとしてくれるとありがたい.
0161デフォルトの名無しさん
2007/10/23(火) 12:59:28今時のコンパイラなら適切に警告が出るはずだが。
0162デフォルトの名無しさん
2007/10/23(火) 14:29:32まじっすか〜?
Visual C++ 2005 で警告をレベル4にしても出なかった希ガス
0163デフォルトの名無しさん
2007/10/23(火) 14:57:09見た記憶はあるからgccのオプションであると思うんだけどなぁ。
0164デフォルトの名無しさん
2007/10/23(火) 15:34:17-Wshadow かな?
0165デフォルトの名無しさん
2007/10/23(火) 15:39:11まずい設計の尻拭いの機能は言語仕様にはないほうがいいと思う
コンパイラのオプションにあるのは別にいいけど
0166デフォルトの名無しさん
2007/10/23(火) 15:58:320167デフォルトの名無しさん
2007/10/23(火) 16:15:38class C {
int x, y;
int m(void) {
int x;
x = y * y;
return x;
}
};
$ g++ -c -Wshadow test.c
test.c: In member function 'int C::m()':
test.c:5: 警告: declaration of 'x' shadows a member of 'this'
0168デフォルトの名無しさん
2007/10/23(火) 16:16:12これにかかる「なぜ?」への答えは
以下のことが起こる可能性があるから
1 不必要なことを強制される
2 予約語が増える
3 言語仕様が大きくなる
4 まずい設計を支援する
> コンパイラのオプションにあるのは別にいいけど
これにかかる「なぜ?」への答えは、自分への悪影響はないから
0169デフォルトの名無しさん
2007/10/23(火) 16:53:404は丸っきり逆
0170デフォルトの名無しさん
2007/10/23(火) 16:55:240171デフォルトの名無しさん
2007/10/23(火) 19:08:56まずい設計のしりぬぐいってわけでもないと思うんだよ。
1)変数名の規則は設計というよりはコーディング規約
2)しりぬぐいじゃなくて、まずいコーディングが
やりにくいようにしておくのが幸せ
>>169 の指摘は正しいと思う。まずいコーディングを
支援するんじゃなくて「やりにくく」するのだから。
0172デフォルトの名無しさん
2007/10/23(火) 19:14:01によると、gcc でのお勧め警告フラグは、
* -Wall, -W
* -Wshadow
* -Wpointer-arith
* -Wbad-function-cast
* -Wcast-qual
* -Wcast-align
* -Waggregate-return
* -Wstrict-prototypes
* -Wmissing-prototypes
* -Wmissing-declarations
* -Wredundant-decls
* -Wnested-externs
0173165
2007/10/23(火) 20:11:50明示的に隠蔽を宣言しなければ、うっかり意図せず名前を隠蔽しちゃうような
巨大なベースクラスは設計がまずい
ということ
継承の階層が深すぎたり、メンバが多すぎたりしなければ
明示的な隠蔽の宣言が必要なんて、押し付けがましく感じるってこと
で、明示的な隠蔽の宣言はそういうまずい設計を助けてしまう
0174デフォルトの名無しさん
2007/10/23(火) 20:27:42逆に継承させた人が隠蔽してることを明示したいって事もあるんじゃない
0175デフォルトの名無しさん
2007/10/23(火) 21:25:501.隠蔽不可
2.隠蔽可能&明示不要
3.隠蔽可能&明示必要
どれがいいと思ってるの?1?2?
自分は3だけど
0176165
2007/10/23(火) 21:34:33継承時には 1
そのほかでは 2
が良さそうい思う
でも、ルールは少ないほうが良いので結局 2
つまり現状のC++
内側の名前が外側の名前を隠すのは直感的だと思うし
0177デフォルトの名無しさん
2007/10/23(火) 21:53:210178デフォルトの名無しさん
2007/10/24(水) 00:54:02巨大なクラスがどうこう、って話だったっけ?
導出クラスが作られた後で基底クラスが変更されて、
同じシグネチャのメソッドが追加されるととっても危険、
というJavaでの問題が報告されたから、
明示的な隠蔽みたいなのが出てきたんだと思ってたけど。
0179デフォルトの名無しさん
2007/10/24(水) 03:16:53俺は2
理由はC系の言語ってそういうもんだと思っているから。
けど隠蔽を警告しない糞コンパイラは使う気しない。
0180デフォルトの名無しさん
2007/10/24(水) 11:20:580181デフォルトの名無しさん
2007/10/25(木) 00:16:130182デフォルトの名無しさん
2007/10/25(木) 03:55:26Visual C++ 2005 で同等の強さの警告出させたいものだ。
>>181
まいにち使うと結構つらいよ。
0183デフォルトの名無しさん
2007/10/25(木) 07:57:240184デフォルトの名無しさん
2007/10/25(木) 08:01:260185デフォルトの名無しさん
2007/10/25(木) 09:10:11はやくこいこいC++0x
0186デフォルトの名無しさん
2007/10/25(木) 10:06:500187デフォルトの名無しさん
2007/10/25(木) 11:06:480188デフォルトの名無しさん
2007/10/25(木) 13:29:38なんか馬鹿の一つ覚えみたいに auto が氾濫しそう。
そんあこたーない?
0189デフォルトの名無しさん
2007/10/25(木) 13:41:15タイピング量を減らしたいからって理由で使ってたら可読性がワッシワッシ下がったのが俺
今じゃまったく使ってない
今までの言語仕様にautoだけプラスした、って環境ではかえって負担になる感じ
きちんとしたC++0xが出てくればまた違うと思うんだけれど
0190デフォルトの名無しさん
2007/10/25(木) 13:57:34そうでなければBoostからとっくにrejectされてるはず
0191デフォルトの名無しさん
2007/10/25(木) 22:08:42ってところから使えば肩もこらないんじゃないかと
0192デフォルトの名無しさん
2007/10/25(木) 22:17:37可読性の低下は感じない
ML系は暗黙の変換がないけどね
そこさえ避ければ大丈夫そう
0193デフォルトの名無しさん
2007/10/25(木) 22:28:36void func(int);
void func(void*);
auto ptr = func;
エラーだなこりゃ。
0194デフォルトの名無しさん
2007/10/25(木) 22:32:59そうそう。どこまで「自動」なのか知りたいね。
そして、C++0x的におkな限界まで auto を乱用されると、きっと萎えるよな。
0195デフォルトの名無しさん
2007/10/25(木) 22:36:32void func(vt &v){...}
std::vector<int> v_a;
std::vector<short> v_b;
func(v_a);
func(v_b);
こんな事もできるようになるのかね?
template要らずだな
0196デフォルトの名無しさん
2007/10/25(木) 22:36:440197デフォルトの名無しさん
2007/10/25(木) 22:48:06それは型のパラメタ化であって推論ではない
やっぱりtemplateの出番
0198デフォルトの名無しさん
2007/10/26(金) 00:09:59オーバーロードされた関数は名前だけで型を決められないので
auto だけじゃなく bind でも使いにくいしなあ。
それに、C++ のライブラリでは f(a) と f(a, b) が 2 つの関数として
定義されているのか、f(a, b = B()) みたいなデフォルト引数つきの
関数なのかは規定されてないらしく、bind1st/2nd をライブラリ関数に
使うことは(移植姓の観点から)よろしくないらしいし。
というわけで lambda 切望。むしろ bind イラネ。
0199デフォルトの名無しさん
2007/10/26(金) 00:51:25標準関数の引数並びは規定されてるだろ。
それ、どっから出てきた話?
0200デフォルトの名無しさん
2007/10/26(金) 01:05:36でも、どう読み違えて、そう解釈したのかが解らないから
うまくアドバイスしてやることも出来ない
0201198
2007/10/26(金) 01:35:31引数並びではなくシグネチャの話。
正確には関数じゃなくて「メンバ関数」限定だった。ごめん。
「std::mem_fun は標準ライブラリのメンバー関数に使うなゴルァ」
by はーぶさったー (Exceptional C++ Style)
だってさ
0202199
2007/10/26(金) 01:44:20シグネチャの意味で「引数並び」って言った。でもやっぱり決まってるでしょ。
メンバ関数に限定するってことは何か具体的な例があると思うんだけど、挙げてもらえる?
0203198
2007/10/26(金) 03:26:09Exceptional C++ Style
P.29
>・デフォルトパラメータを持つメンバー関数のシグニチャは、
> 「等価な振る舞いを持つ2つ以上のメンバー関数のシグニチャ」に
> 置き換えても良い。
>・メンバー関数のシグニチャには、追加のデフォルトパラメータが
> 含まれていても良い。
P.30
>つまり、コードの移植姓を保ちながら標準ライブラリのメンバー関数
>へのポインタを生成することは不可能なのだ。
これ以上は立ち読みでもしてくれ
0204199
2007/10/26(金) 12:13:51なんだかそういうルールがどこかに書かれてそうだな。
ってことで規格を signature あたりで検索したら、あった。
17.4.4.4p2
> An implementation can declare additional non-virtual member function signatures within a class:
> ? by adding arguments with default values to a member function signature;172) The same latitude does not
> extend to the implementation of virtual or global or non-member functions, however.
> ? by replacing a member function signature with default values by two or more member function signatures
> with equivalent behavior;
んで脚注 172 に
> 172) Hence, taking the address of a member function has an unspecified type.
うーん。 bind に push_back とかコンテナのメンバ関数を使ったことがあったような
気がするんだけど、実装依存なコードだったのか。
あ virtual なメンバ関数には static_cast でシグネチャ明示すればなんとかいけるね。
コンテナとか普段使うやつはほとんど非 virtual だから救われないけど。
0205デフォルトの名無しさん
2007/10/26(金) 15:28:41誰かコードに落としてくれ
0206デフォルトの名無しさん
2007/10/26(金) 16:23:30Exceptional C++ Styleにそのまま例が載ってるじゃん
std::mem_fun</*...*/>(&std::vector<int>::clear)が正しいかどうか
自分で検証してみればわかるはず。
0207デフォルトの名無しさん
2007/10/26(金) 21:48:45push_back(T val,bool hoge=true,int hage = 5,float foo = 0.05f)
なんて実装でもいいわけか
0208デフォルトの名無しさん
2007/10/26(金) 22:42:060209デフォルトの名無しさん
2007/10/26(金) 22:45:160210デフォルトの名無しさん
2007/10/27(土) 00:35:22実装に自由裁量権を認めたはいいけど、自由度あり過ぎて
std::mem_fun の位置付けが中途半端になってしまったのは
仕様の不備という気もするし
0211デフォルトの名無しさん
2007/10/27(土) 00:47:04コーディング標準として、
>>204に相当するようなコードは書かないようにするしかないかと。
0212デフォルトの名無しさん
2007/10/27(土) 01:07:04現状の話じゃなくて、C++0x にも同じ制限を持ち越すのか?
ってことが知りたいわけで
Exceptional C++0x Style でまた書かれるぞ
0213デフォルトの名無しさん
2007/10/27(土) 01:09:12また落とし穴が増えるのかよ
∧_∧
( ´Д⊂ヽ
0214デフォルトの名無しさん
2007/10/27(土) 01:12:22とりあえず>>180は前提ですよ。馬鹿じゃない限り。
0215デフォルトの名無しさん
2007/10/27(土) 01:26:380216デフォルトの名無しさん
2007/10/27(土) 04:01:16この件については >204 にあるような実装への自由度を制限することで
ライブラリユーザー向けに課せられていた暗黙の制限が解消されることになるだけで、
過去のコードは依然としてコンパイルできるし動作に変化は生じない。
2003 の規格に準拠した実装は変更された規格に適合しなくなるかもしれないけど、
古い実装が新しい規格に適合していないことになるのは何も問題ない。
C++09 にはもう手遅れだけど、提案してみれば将来につながる可能性はあると思う。
0217デフォルトの名無しさん
2007/10/27(土) 10:07:03> 実装への自由度を制限することで
> 依然としてコンパイルできるし
どういうこと?
禁止したらコンパイルできないでしょ。
0218デフォルトの名無しさん
2007/10/27(土) 10:39:080219デフォルトの名無しさん
2007/10/27(土) 13:46:39みたいな制限だけでもだいぶ違うね。
そうなれば vector push_back, clear は問題なくなる。
0220デフォルトの名無しさん
2007/10/27(土) 13:50:12そんな中途半端な仕様いやだよ。 push_back() はいけるのに insert() はだめとか。
仕様かえるなら半端にする必要ないでしょ。
0221デフォルトの名無しさん
2007/10/27(土) 13:58:080222デフォルトの名無しさん
2007/10/27(土) 14:20:42じゃあどういう修正なら納得するかkwsk
どのみちオーバーロードされたメンバ関数はシグネチャ明示しなければならんけど、
それ以外は一意に決まるってだけでも今よりだいぶマシじゃん。
根本的にはlambda式が導入されない限り解決にはならんと思うけど。
0223デフォルトの名無しさん
2007/10/27(土) 16:13:50>219 のやつだと、オーバーロードされてるやつは static_cast でシグネチャを
明示しても移植性を確保できない。
どうせやるなら >204 にある記述を全部削除して、 public なメンバ関数の
シグネチャを規格でしばることにしたほうがいいと思う。そうすれば
オーバーロードされてるやつでも static_cast での明示さえ我慢すれば
移植性を保ちつつメンバ関数へのポインタが使えるはず。
0224デフォルトの名無しさん
2007/10/27(土) 16:57:44そりゃ204全削除できれば一番いいけどね。
std::string とかメンバ関数100以上あるし、デフォルト引数使えないとなると
例えばfind_first_ofだけでも4つから7つに増えるわけで、実装側は大変だ。
少なくとも Defect Reports のレベルじゃ受け入れられなそうな印象。
0225デフォルトの名無しさん
2007/10/27(土) 18:14:05なんで「デフォルト引数使えない」なんて話になるの?
0226デフォルトの名無しさん
2007/10/27(土) 19:38:09ttp://yak.myhome.cx/junks/index.html#cpp.superposition
superposition と非 superposition 間の関係演算子だけ実装。
スレ違いかもしれないけど、発端はここだし Variadic templates 版実装も作ったってことでここは一つ。
>213
とりあえず Variadic template と通常の template は混ぜるな、に一票。
0227デフォルトの名無しさん
2007/10/27(土) 21:57:34読んで感想を書こうと思ったけど自宅モードでは
boost/preprocessorが使われているコードを読む集中力が沸かない
サンプルから察するに非決定的計算っぽく比較できるもの?
計算量はネストすると指数オーダーかな
0228デフォルトの名無しさん
2007/10/28(日) 00:21:59すまん早とちりした
デフォルト引数の部分も含めて仕様にすればたしかに問題ないね
デフォルト引数の存在を意識せずにシグネチャ指定を可能にする、
みたいなものを夢想してしまったようだ
x.f(a) -> R (X::*)(A)
x.f(a. b) -> R (X::*)(A, B)
0229デフォルトの名無しさん
2007/10/28(日) 00:47:28> 非決定計算っぽく
そこまで大それたことを考えてたわけではなくて基本要求は >114 ね。
any(a, b, c) == d → any(a == d, b == d, c == d) → any(bool0, bool1, bool2) → bool0 || bool1 || bool2
のように評価される(bool* はそれぞれの評価結果)。all の場合は最後の || が && になる。
で、↑から大体想像つくかもしれないけど、重要なこと書き忘れてた。
この実装だとショートカット評価しない。全ての項目に対して対応する演算子が呼ばれて bool の tuple に変換されてから最後 || とか && してる。
ショートカット評価するなら Expression Template 使うのかな。その上で Boost Lambda とか使えばほんとに非決定計算っぽくできるかもしれない。
0230デフォルトの名無しさん
2007/10/28(日) 01:47:110231デフォルトの名無しさん
2007/10/28(日) 02:22:58評価のタイミングもコントロールできるのが Expression Template の強みの一つだと思う。
operator&& それ自体をショートカット評価にすることはできないけど、Expression Template 使って木を生成した後で、
評価するときにこっちで勝手にショートカット評価してやればいい。
0232デフォルトの名無しさん
2007/10/28(日) 02:40:30で、ちょっと考え直してみたけど、a, b, c, d の評価自体が発生してしまうから、正しいショートサーキット評価にはならないってことでいい?
operator==() の呼び出しについてしか考えてなかった。
0233デフォルトの名無しさん
2007/10/28(日) 07:13:39Short circuitは古いだろ。マイキットじゃねーんだから。
0234デフォルトの名無しさん
2007/10/28(日) 08:12:400235デフォルトの名無しさん
2007/10/28(日) 09:42:07短絡評価(short-circuit evaluation)や最小評価(minimal evaluation)に次いで
新たな用語が出てきたのかと思って調べてみたけど、どこで使われてる用語なの?
ここで話題にするってことは言語はC++なんだよね?
簡略評価ならVB書籍で見たことあるけど・・・。(正直誤訳だと思ってた)
0236デフォルトの名無しさん
2007/10/28(日) 12:06:23ムリだって。
>>232
>で、ちょっと考え直してみたけど、a, b, c, d の評価自体が発生してしまうから、正しいショートサーキット評価にはならないってことでいい?
>operator==() の呼び出しについてしか考えてなかった。
operator==だけが短絡評価されて、なんの意味があるのか、普通そこまで考えるだろ。
お前の思考回路が短絡評価されてるよ。
void 思考回路(){
if ( (operator==呼び出しを遅延できる) || (a,b,cの評価を遅延できる) ){
レス(
"評価のタイミングもコントロールできるのが Expression Template の強みの一つだと思う。"
"operator&& それ自体をショートカット評価にすることはできないけど、Expression Template 使って木を生成した後で、"
"評価するときにこっちで勝手にショートカット評価してやればいい。"
);
}
}
0237デフォルトの名無しさん
2007/10/28(日) 13:16:450238デフォルトの名無しさん
2007/10/28(日) 14:26:16すまんね。a, b, c, d の評価はこっちではどうしようもないところだから思考の外にあった。
なのでむしろこんな感じだな。
void 思考回路() {
if ( (operator==呼び出しを遅延できる) ){
レス(/*略*/);
}
}
bool out_of_scope = (a,b,cの評価を遅延できる);
0239デフォルトの名無しさん
2007/10/28(日) 14:27:020240デフォルトの名無しさん
2007/10/28(日) 21:06:430241デフォルトの名無しさん
2007/10/28(日) 23:35:220242デフォルトの名無しさん
2007/10/28(日) 23:45:22今思えば opeartor overload の乱用は失敗だったし、
フォーマット出力は欲しいってのはみんな思ってる。
0243デフォルトの名無しさん
2007/10/28(日) 23:53:310244デフォルトの名無しさん
2007/10/29(月) 00:33:23役割が違う
使いたければstd::printfを使えばいいだけの話ではないのかな
そういう言語だよね
0245デフォルトの名無しさん
2007/10/29(月) 00:35:590246デフォルトの名無しさん
2007/10/29(月) 00:37:330247デフォルトの名無しさん
2007/10/29(月) 00:42:32typedef されてる整数型を正しく出力するために対応するフォーマット文字列を
マクロで用意とか、やってられないでしょ。
0248デフォルトの名無しさん
2007/10/29(月) 00:48:290xでこのあたり、なにか改善はありますか?
0249デフォルトの名無しさん
2007/10/29(月) 00:50:160250デフォルトの名無しさん
2007/10/29(月) 01:14:46コンパイラが型チェックするようにするのが結局いいんじゃないかなー
0251デフォルトの名無しさん
2007/10/29(月) 01:19:580252デフォルトの名無しさん
2007/10/29(月) 05:15:010253デフォルトの名無しさん
2007/10/29(月) 20:02:05boost::formatは別にコンパイル時にややこしいことをしてないと思うけど。
そんなことをする意味がない。
0254デフォルトの名無しさん
2007/10/29(月) 21:34:04仕組み説明してYO
0255デフォルトの名無しさん
2007/10/29(月) 22:56:21禿を含めたC++基地外共がややこしことばかり考えてるのに
これ以上つき合えるか!
どんなに論理的に強力な根拠があると言ってもややこしい論理は
結局受け入れられないんだよ。
お前らだけで勝手に遊んでろや!馬鹿
0256デフォルトの名無しさん
2007/10/29(月) 23:10:53まぁ他の言語でも楽しんできてください
0257デフォルトの名無しさん
2007/10/29(月) 23:17:18よく使われる主要な言語が難しいのは歓迎だけど、わかる人間の価値が高まるし
でもこの勢いだと主要でなくなりそう
0258デフォルトの名無しさん
2007/10/29(月) 23:21:140259デフォルトの名無しさん
2007/10/30(火) 00:06:35よしきた
俺たちだけで勝手に遊ぶよ
0260デフォルトの名無しさん
2007/10/30(火) 00:06:49>むしろわかりやすくなる方向に行ってると思うけどね
基本的には同意だが、どちらかというと
今までのややこしさを軽減させようとしているだけとも感じる。
つまり、今までのややこしさでC++に匙を投げた人間は、
C++0xを好意的に受け止めるとは思い難い。また、なんか追加されるのかよ的な感じで。
でも、そのおかげでオレのような本来はたいして有能でもない人間が、
チーム、部署内でのある程度の地位をキープできてる。
オレのまわりはC++敬遠ぎみの人が多いから。
まさにオレは禿のジョークを体現している。
そういうわけでC++0xには期待している。ほどよくややこしくしてほしい。
0261デフォルトの名無しさん
2007/10/30(火) 00:10:580262デフォルトの名無しさん
2007/10/30(火) 00:15:560263デフォルトの名無しさん
2007/10/30(火) 00:17:38functionやbindは無視されるだろうね
0264デフォルトの名無しさん
2007/10/30(火) 00:21:24bint1st, bind2nd, mem_fun, ptr_funなんかよりbindのほうが全然わかりやすい件について。
いまのMPLすら理解できない人には
C++0xの大部分はスルーされるだろうね
だったら同意。
0265デフォルトの名無しさん
2007/10/30(火) 00:26:09bind1stとかについては同意
でもC++の文法からbindの存在を想像するのが難しいので
理解できないんじゃないかと思ったけど
インターフェースが簡単だから大丈夫なのかな
0266デフォルトの名無しさん
2007/10/30(火) 00:29:130267デフォルトの名無しさん
2007/10/30(火) 00:34:18うん。大丈夫。以前経験した現場だと、C++初心者レベルのみんながboost::bindを使いまくって
プロジェクトが崩壊しかけたたよーん。
兄さん、そのbindしたthis、とっくに死んでます・・・みたいな。
0268デフォルトの名無しさん
2007/10/30(火) 01:56:250269デフォルトの名無しさん
2007/10/30(火) 02:03:57つまりC++を学ぶときは、いきなりC++の達人にならなければいけない
0270デフォルトの名無しさん
2007/10/30(火) 02:06:120271デフォルトの名無しさん
2007/10/30(火) 02:17:34News 2007-10-28: The 2007-10-post-Kona mailing is available
News 2007-10-28: The C++ Standard Library Issues List (Revision 52) is available
0272デフォルトの名無しさん
2007/10/30(火) 05:11:26bindやconceptなんてライブラリビルダが使ってればよろしい。
0273デフォルトの名無しさん
2007/10/30(火) 08:21:150274デフォルトの名無しさん
2007/10/30(火) 09:18:28沢山引数を指定する関数のある引数だけを変えながら実行する場合、さらに具体的にいえば
初期化ルーチンで動作モードを調べながら実行するときとかよく使うし
0275デフォルトの名無しさん
2007/10/30(火) 12:33:27そのレベルで使うならC++の必然性が少ない。言語は他にいっぱいある。
0276デフォルトの名無しさん
2007/10/30(火) 12:57:350xではいるんですか?はいらないんですか?
どうなんです?heheheh
0277デフォルトの名無しさん
2007/10/30(火) 13:21:270278デフォルトの名無しさん
2007/10/30(火) 14:53:31もう入ってるだろうっつーか
下駄がcast operatorで
雪駄がassignment operatorで代用できそうな
0279デフォルトの名無しさん
2007/10/30(火) 17:00:460280デフォルトの名無しさん
2007/10/30(火) 17:19:19プロパティは概念上、ダイレクトな生メンバとは違うものだから記述方法も違ってくるのかなと
下駄も雪駄もC++の原則
「テクニックでどうにもならない機能だけを言語仕様に頼む」
にはあたらないなあと
0281デフォルトの名無しさん
2007/10/30(火) 18:47:440282デフォルトの名無しさん
2007/10/30(火) 18:49:200283デフォルトの名無しさん
2007/10/30(火) 20:20:200284デフォルトの名無しさん
2007/10/30(火) 21:17:020285デフォルトの名無しさん
2007/10/30(火) 21:20:420286デフォルトの名無しさん
2007/10/30(火) 22:06:40プロパティの代用はできねーよ。
そんなので代用したらクラスのサイズが無意味に増えるだろ。
0287デフォルトの名無しさん
2007/10/30(火) 23:06:29getterとsetterが言語仕様に入るだろうか?という話をしているのに
なぜクラスのサイズという実装上の問題の話に摩り替わってしまうのだろうな?
0288デフォルトの名無しさん
2007/10/30(火) 23:23:14はぁ?頭大丈夫か?
プロパティは
>下駄がcast operatorで
>雪駄がassignment operatorで代用できそうな
とか言う奴に、それで代用なんかできてないという話をしてるのに、
何故getterとsetterが言語仕様に入るだろうか、という話に摩り替えようとするんだよ。
バカかこいつ。
0289デフォルトの名無しさん
2007/10/30(火) 23:25:260290デフォルトの名無しさん
2007/10/30(火) 23:57:080291デフォルトの名無しさん
2007/10/30(火) 23:57:24正論だが物言いがよくない
0292デフォルトの名無しさん
2007/10/31(水) 00:09:54(1)getter/setterのC++0x化 → (2)下駄雪駄 → (3)代用はできない → (4)クラスのサイズが増える
で (1) || (2) の話をしている所に (2)->(3) と飛躍して (3) && (4) を適用していますが
話を逸らしている行為以外の何だと思っているのですか?
「代」わりに「用」いる、ではなく「そのテクニックは既にある言語仕様で実現できる」という話ですよ
(1) || (2) の時点で「あぁそうですね」で終わっていた話から (2)->(3) と展開する合理性が見えません
0293デフォルトの名無しさん
2007/10/31(水) 00:15:31他の人は見えてるから問題無いし、君という一人の阿呆が困ったりムカついたりしても
誰も困らないし。
0294デフォルトの名無しさん
2007/10/31(水) 00:28:250295デフォルトの名無しさん
2007/10/31(水) 00:29:16>誰も困らないし。
>>292が困る件について
0296デフォルトの名無しさん
2007/10/31(水) 00:38:40それはお前の脳みその中だけで通用するパカ論理だということを忘れてはいけません。
0297デフォルトの名無しさん
2007/10/31(水) 00:55:41コードサイズだというならインライン化の度合はsetter-getterと同じかそれより強いと思うし、
データサイズが増えるわけはないし。
感情が先走って論理展開がムチャクチャになってないか。
本当に中傷メソッドが追加されるなこりゃw
0298デフォルトの名無しさん
2007/10/31(水) 01:00:340299デフォルトの名無しさん
2007/10/31(水) 01:07:11( ´∀`)< オマエモナー
( ) \_____
| | |
(__)_)
0300デフォルトの名無しさん
2007/10/31(水) 01:32:050301デフォルトの名無しさん
2007/10/31(水) 02:10:040302デフォルトの名無しさん
2007/10/31(水) 02:26:480303デフォルトの名無しさん
2007/10/31(水) 03:38:05ってか、もういー加減にしろよw
0304デフォルトの名無しさん
2007/10/31(水) 08:50:15パカ極まるなお前。
>下駄がcast operatorで
>雪駄がassignment operatorで代用できそうな
これで代用したプロパティを持つクラスを実際に作ってsizeofしてみろ場か
0305デフォルトの名無しさん
2007/10/31(水) 09:40:43あなたの意見を私が証明しなければならない、というのは筋が通りませんが…
sizeof にコード量が反映されるという処理系は知りませんよ?私は
0306デフォルトの名無しさん
2007/10/31(水) 09:41:41sizeof は変わらないでしょう。
0307デフォルトの名無しさん
2007/10/31(水) 12:13:12template< typename V > struct property { .... };
// プロパティクラス
class foo {
int value_;
public:
foo() : { value.setref(value_); }
property<int> value;
};
// プロパティ構文 C#
class bar {
int value_;
public:
int value { get{ return value_; } set(int val){ value_ = val; } };
};
sizeof(foo);
sizeof(bar);
どっちが大きい?
0308デフォルトの名無しさん
2007/10/31(水) 12:21:100309デフォルトの名無しさん
2007/10/31(水) 13:45:530310デフォルトの名無しさん
2007/10/31(水) 13:56:590311デフォルトの名無しさん
2007/10/31(水) 13:59:140312デフォルトの名無しさん
2007/10/31(水) 14:32:05従来の構造体と、変数を分け隔てなく扱えるようになるとかさ。
struct Interface {
virtual int value { ... } ← 仮想プロパティ
};
template< typename T > void init_val( T & val ) {
val = 20;
}
int x = 0;
init_val(x); // x = 20;
Interface * p = ...;
init_val(p->value); // p->value = 20
無理かな。
0313デフォルトの名無しさん
2007/10/31(水) 14:48:07cast operator と assignment operator では代用できない、という話ではなかったのですか?
0314デフォルトの名無しさん
2007/10/31(水) 15:35:48シンタックスシュガーの代用としては不適格だと思うが・・・
単一の本物のデータメンバであることを活かせる場面もあるだろうから、
どっちが良いという話ではないけど。
0315デフォルトの名無しさん
2007/10/31(水) 15:42:330316デフォルトの名無しさん
2007/10/31(水) 15:56:07import std.stdio;
class Foo{
private int value_;
int value(){return value_;}
int value(int val){return (value_=val);}
}
void main(){
auto f = new Foo;
f.value=10;
writefln(f.value);
}
0317デフォルトの名無しさん
2007/10/31(水) 17:33:19Dはそれでいいだろうが、C++で bind するとき大変そうだからヤダ
0318デフォルトの名無しさん
2007/10/31(水) 18:38:230319デフォルトの名無しさん
2007/10/31(水) 19:03:55class property {
0320デフォルトの名無しさん
2007/10/31(水) 19:04:280321デフォルトの名無しさん
2007/10/31(水) 19:16:58class property {
private:
T t;
T* operator &();
public:
operator T () { return t; }
T& operator = ( const T& r ) { t = r; return *this; }
};
class A {
public:
property<int> value;
};
void test() {
A a;
int v = 1;
a.value = 0; //ok (a.value == 0)
v = a.value; //v = 1
a.value += 4; //error
}
0322デフォルトの名無しさん
2007/10/31(水) 19:49:380323デフォルトの名無しさん
2007/10/31(水) 20:47:09default constructibleじゃないとだめだし
マジメなsetter/getter実装しようともったら結局なんらかの参照が必要になる
0324デフォルトの名無しさん
2007/10/31(水) 21:35:04D : 妥協ライン
C# : マイコーソフトの柵
C++0x : 期待と不安の境目
0325デフォルトの名無しさん
2007/10/31(水) 21:57:53いつ誰がコード量が増えると言ったんだ?
筋が通ってないのはお前だよ。
>>313
どうみても代用できてないだろ。お前の目はフシアナかいな。
0326デフォルトの名無しさん
2007/10/31(水) 23:05:08C++ Properties -- a Library Solution
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1615.pdf
0327デフォルトの名無しさん
2007/11/01(木) 01:57:51もういいよ
0328デフォルトの名無しさん
2007/11/01(木) 07:48:40それ言ったらほとんどのスレッドが終わっていく…
0329デフォルトの名無しさん
2007/11/01(木) 19:46:00C++1x?が待ち遠しくなった。
0330デフォルトの名無しさん
2007/11/01(木) 20:32:27プロパティ1つ追加するごとに、ポインタ分だけオブジェクトのサイズが膨らむのか
0331デフォルトの名無しさん
2007/11/02(金) 03:20:430332デフォルトの名無しさん
2007/11/02(金) 10:42:00そのまま公開するんなら public メンバ変数にするさ。
0333デフォルトの名無しさん
2007/11/02(金) 11:02:230334デフォルトの名無しさん
2007/11/02(金) 11:11:100335デフォルトの名無しさん
2007/11/02(金) 11:23:070336デフォルトの名無しさん
2007/11/02(金) 11:57:04変数の値が更新されたときにフックかけれるようにして欲しい。
class MyWindow {
void updateRect( RECT old_value ) {
SetWindowRect(&windowRect);
}
public:
__declspec(onchange=updateRect) RECT windowRect;
}
みたいな。
0337デフォルトの名無しさん
2007/11/02(金) 13:39:58ttp://ja.wikipedia.org/wiki/C%2B%2B0x
M$が21世紀終わるまでにちゃんと実装してくれるとは思えん。
0338デフォルトの名無しさん
2007/11/02(金) 13:50:31それにしてはすごい量だな
0339デフォルトの名無しさん
2007/11/02(金) 13:58:510340デフォルトの名無しさん
2007/11/02(金) 21:00:15再帰テンプレートとかも?
0341デフォルトの名無しさん
2007/11/02(金) 21:20:46それかっこいいね。
でも、俺の頭はまだ AOP に対応してないから、用途が思いつかん・・・orz
>>337
情報サンクス。
しかしよく纏まってるなぁ。
0342デフォルトの名無しさん
2007/11/02(金) 22:23:43履歴によれば、初版は英語版の翻訳。
http://ja.wikipedia.org/w/index.php?title=C%2B%2B0x&action=history
0343デフォルトの名無しさん
2007/11/02(金) 22:28:18感心した
0344デフォルトの名無しさん
2007/11/02(金) 22:32:080345デフォルトの名無しさん
2007/11/02(金) 22:36:470346デフォルトの名無しさん
2007/11/02(金) 23:07:38MyWindow win;
RECT *r = &win.windowRect;
external_library_function::foo(r); // rを弄る
こんなコードに対しても、フックを呼んで欲しいの?
いくらなんでも無理めじゃないか?
0347デフォルトの名無しさん
2007/11/03(土) 00:17:330348デフォルトの名無しさん
2007/11/03(土) 00:26:04生のポインタはいつでも取れるんだから、何の安全弁にもならないし、
カプセル化になってない気がするけど
0349デフォルトの名無しさん
2007/11/03(土) 00:34:060350デフォルトの名無しさん
2007/11/03(土) 00:36:350351デフォルトの名無しさん
2007/11/03(土) 00:41:28対称性を考えれば参照時のフックも欲しくなるっす。
0352デフォルトの名無しさん
2007/11/03(土) 08:06:030353デフォルトの名無しさん
2007/11/03(土) 08:40:080354デフォルトの名無しさん
2007/11/03(土) 16:00:140355デフォルトの名無しさん
2007/11/03(土) 17:01:510356デフォルトの名無しさん
2007/11/03(土) 18:08:58既に無いわけですけど、何のことかな?
0357デフォルトの名無しさん
2007/11/03(土) 18:37:120358デフォルトの名無しさん
2007/11/03(土) 18:46:55利かなくてはまるっていう。
0359デフォルトの名無しさん
2007/11/03(土) 18:51:32ttp://ja.wikipedia.org/wiki/C%2B%2B0x
で && で一通り検索してこい
0360デフォルトの名無しさん
2007/11/03(土) 19:03:440361デフォルトの名無しさん
2007/11/03(土) 19:18:50右辺値参照のために && が使われるようになることは知ってるけど、
operator && は昔から別の意味である。
0362デフォルトの名無しさん
2007/11/03(土) 20:23:180363デフォルトの名無しさん
2007/11/03(土) 21:14:270364デフォルトの名無しさん
2007/11/03(土) 21:28:440365デフォルトの名無しさん
2007/11/03(土) 21:43:510366デフォルトの名無しさん
2007/11/03(土) 22:39:54物言いを直さないと大人になったとき苦労するよ
0367デフォルトの名無しさん
2007/11/03(土) 22:49:15オマエモナ
0368デフォルトの名無しさん
2007/11/03(土) 23:00:400369デフォルトの名無しさん
2007/11/03(土) 23:13:090370デフォルトの名無しさん
2007/11/03(土) 23:23:410371デフォルトの名無しさん
2007/11/03(土) 23:53:46そもそも今までだって構文上、型名の*や&、[]、関数の()などは演算子ではない。
そこに&&が加わるだけ。
0372デフォルトの名無しさん
2007/11/03(土) 23:55:27参照なんですよ。という意味を込めたかったのかな
0373デフォルトの名無しさん
2007/11/03(土) 23:58:550374デフォルトの名無しさん
2007/11/04(日) 00:07:08それもあるだろうけど
新たなトライグラフが必要になるからだと思う
0375デフォルトの名無しさん
2007/11/04(日) 00:48:570376デフォルトの名無しさん
2007/11/04(日) 00:51:430377デフォルトの名無しさん
2007/11/04(日) 00:52:56ドラフト(N2369)にはしっかり記述があるけど
0378デフォルトの名無しさん
2007/11/04(日) 01:35:330379デフォルトの名無しさん
2007/11/04(日) 01:43:24っていう疑問がでてきて調査が必要になるので
新しい記号の導入はできるだけ避けたいと
0380デフォルトの名無しさん
2007/11/04(日) 02:10:37「既に無い」にめっちゃ吹いたw
0381デフォルトの名無しさん
2007/11/04(日) 07:31:58しかし@がないシステムは、dmr??.bell-labs.comとかやってんのかね。
>>371
後ろの「関数の」はいらないんじゃ?
0382デフォルトの名無しさん
2007/11/04(日) 08:35:36つっこむところ、そこだけじゃないよ。
0383デフォルトの名無しさん
2007/11/04(日) 10:10:45キーボードに対応するキーがない場合、ってのを問題にしてるんじゃね?
例えば日本語環境だとウムラウト付き文字を入力するの面倒だろ。
0384デフォルトの名無しさん
2007/11/04(日) 12:34:47今となってはソースは Unicode、入力法はエディタやインプットメソッドで勝手に解決しろ、でいいと思う。
0385デフォルトの名無しさん
2007/11/04(日) 14:44:05あとは擬似コードで任意の演算子を示すときに使ったりするなあ
0386デフォルトの名無しさん
2007/11/04(日) 16:26:39なんで VC のマングリングが崩壊?
リンク時のシンボルと演算子としての @ の関係が分からん。
0387デフォルトの名無しさん
2007/11/04(日) 18:06:56ISO/IEC 646的には「#$[\]^{|}~@`」の12コードポイントが別文字になりうる
参照:ttp://ja.wikipedia.org/wiki/ISO/IEC_646
……んだけど、この文字コードで動いてるシステムって今どんだけあるのかなぁ
0388デフォルトの名無しさん
2007/11/04(日) 21:00:39まあ過去の遺産でしょ。>トライグラフ・ダイグラフ
0389デフォルトの名無しさん
2007/11/05(月) 11:17:050390デフォルトの名無しさん
2007/11/05(月) 20:47:26VC 2005とかunicodeで記述するのがデフォルトだけど、
バックスラッシュは相変わらず円マークですけど。
0391デフォルトの名無しさん
2007/11/05(月) 21:11:47簡単に言うと、君の使ってるのが偽Unicodeだってこと
http://ja.wikipedia.org/wiki/Unicode#.E6.97.A5.E6.9C.AC.E8.AA.9E.E7.92.B0.E5.A2.83.E3.81.A7.E3.81.AEUnicode.E3.81.AE.E8.AB.B8.E5.95.8F.E9.A1.8C
0392デフォルトの名無しさん
2007/11/05(月) 21:20:360393デフォルトの名無しさん
2007/11/05(月) 22:42:09は?よく読めよ。何が偽だよ。
>これは日本語用のフォントデータの0x5Cの位置には円記号の字形を当ててしまうことで対処している
0394デフォルトの名無しさん
2007/11/05(月) 23:18:29バックスラッシュとして表示される。
0395デフォルトの名無しさん
2007/11/06(火) 00:00:080396デフォルトの名無しさん
2007/11/07(水) 08:45:150397デフォルトの名無しさん
2007/11/07(水) 12:01:57「簡単に言う」のなら、それは「偽Unicode」だろwww
0398デフォルトの名無しさん
2007/11/07(水) 13:31:42cout << "その本は500\です。\n" << endl;
同じグリフになったら、0x5cと0xc2 0x5cの見分けがつかないだろw
0x5cのYENだけ斜めにでもしとくのか?
0399デフォルトの名無しさん
2007/11/07(水) 19:07:290400デフォルトの名無しさん
2007/11/07(水) 19:36:040401デフォルトの名無しさん
2007/11/07(水) 19:55:580402デフォルトの名無しさん
2007/11/07(水) 19:59:48C++0xに関係ないし。
0403デフォルトの名無しさん
2007/11/07(水) 22:26:470404デフォルトの名無しさん
2007/11/07(水) 22:28:180405デフォルトの名無しさん
2007/11/08(木) 04:58:25それより問題なのは export なんだよ。実は。
0406デフォルトの名無しさん
2007/11/08(木) 10:15:11メジャーベンダが「ヤラネ」と言い出してるあたりか
VCとgccは入れないんだよな、bccは最新版で入ってるらしいことは聞いた
0407デフォルトの名無しさん
2007/11/08(木) 16:38:530408デフォルトの名無しさん
2007/11/12(月) 21:22:45ttp://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!330.entry
知らん間にスケジュールが1年ずれてたんだな…
0409デフォルトの名無しさん
2007/11/13(火) 16:32:100410デフォルトの名無しさん
2007/11/13(火) 18:52:180411デフォルトの名無しさん
2007/11/13(火) 23:39:50いままで3文字でやってきたのがちょっと気持ち悪い。
でもg0xとかだったら泣く。
0412デフォルトの名無しさん
2007/11/13(火) 23:43:320413デフォルトの名無しさん
2007/11/13(火) 23:45:11普通にg++ , C++ なりclなりでいいと思うんだが... C++/CLIなんていう類似品と違って正真正銘の時期標準規格なんだぞ?
0414デフォルトの名無しさん
2007/11/13(火) 23:45:440415デフォルトの名無しさん
2007/11/13(火) 23:46:510416デフォルトの名無しさん
2007/11/13(火) 23:57:29なんてメタデータが必須になります
0417デフォルトの名無しさん
2007/11/14(水) 00:34:36決まった後はただのC++だろ
0418デフォルトの名無しさん
2007/11/14(水) 00:36:100419デフォルトの名無しさん
2007/11/14(水) 00:42:19C90, C95, C99みたいに言葉は残るはず。
C++98, C++03, C++09かな。
0420デフォルトの名無しさん
2007/11/14(水) 00:54:06CLIはISOに蹴られたんだったな
0421デフォルトの名無しさん
2007/11/14(水) 00:59:090422デフォルトの名無しさん
2007/11/14(水) 01:00:380423デフォルトの名無しさん
2007/11/14(水) 03:37:54こりゃ本当にC++0aになりそうだなぁ。
0424デフォルトの名無しさん
2007/11/14(水) 03:57:33にすれば問題ないじゃないか
0425デフォルトの名無しさん
2007/11/14(水) 09:04:35なれるとしたら何年後くらいだと思いますか?
0426デフォルトの名無しさん
2007/11/14(水) 09:58:57組み込みとか、system layerの低いところ、e.g. OS kernel、では、
今後C++を使う例がどんどん増えていくと思うけれど。
ただC++がtemplateで行った実験は、
今後のプログラミング言語に大きな影響を与えると思う。
素晴らしい実験が今でも行われ続けている。
0427デフォルトの名無しさん
2007/11/14(水) 11:15:530428デフォルトの名無しさん
2007/11/14(水) 11:59:570429デフォルトの名無しさん
2007/11/14(水) 13:07:330430デフォルトの名無しさん
2007/11/14(水) 13:09:48まず、メインストリームが何かを定義してもらおうか
0431デフォルトの名無しさん
2007/11/14(水) 13:26:00C++ 族(?)の中では C++0x はメインストリームになると思うが。
0432デフォルトの名無しさん
2007/11/14(水) 14:16:14boost使えずやきもきしてたから小躍りしてしまったぞーーー!
0433デフォルトの名無しさん
2007/11/14(水) 14:29:17多重継承、template、name spaceないもん、boostは無理でしょw
0434デフォルトの名無しさん
2007/11/14(水) 14:43:560435デフォルトの名無しさん
2007/11/14(水) 14:53:400436デフォルトの名無しさん
2007/11/14(水) 15:23:22フル規格のC++で、開発部隊毎にコーディング既約作ればいいだけなのに。
しかもまともなコンパイラすら作れないメーカが発起w
0437デフォルトの名無しさん
2007/11/14(水) 15:30:240438デフォルトの名無しさん
2007/11/14(水) 15:31:55そこらへんの妥協点を定めたのがEmbeddedなんじゃないの?
0439デフォルトの名無しさん
2007/11/14(水) 15:58:51Cでさえ、マイナーコンパイラは悲惨だったのに。
0440デフォルトの名無しさん
2007/11/14(水) 16:12:200441デフォルトの名無しさん
2007/11/14(水) 18:41:18同意。組み込み用ならランタイムが軽くなる仕様を考えるべきなのに、なぜかコンパイラ作りが
楽になる仕様にしたという馬鹿言語。
おそらく日本のマイコンメーカのソフト開発部門の能力に合わせたのだろう。w
0442デフォルトの名無しさん
2007/11/14(水) 18:45:560443デフォルトの名無しさん
2007/11/14(水) 18:51:050444デフォルトの名無しさん
2007/11/14(水) 18:56:140445デフォルトの名無しさん
2007/11/14(水) 19:57:26ミニマムな規格にしていろんなCPU用に処理系が用意されるように、
ってのを目指したんじゃない?
ちゃんとした C++ を提供したいところは今まで通り gcc 等使うだろうし。
0446デフォルトの名無しさん
2007/11/14(水) 20:28:060447デフォルトの名無しさん
2007/11/14(水) 21:03:440448デフォルトの名無しさん
2007/11/14(水) 21:31:260449デフォルトの名無しさん
2007/11/14(水) 21:42:16でも多ければいいってもんでも無いか…
0450デフォルトの名無しさん
2007/11/14(水) 23:09:230451デフォルトの名無しさん
2007/11/14(水) 23:47:460452デフォルトの名無しさん
2007/11/15(木) 02:24:430453デフォルトの名無しさん
2007/11/15(木) 02:45:470454453
2007/11/15(木) 02:51:08ラムダとfunctionで似たような事ができるよってだけなのかな
0455デフォルトの名無しさん
2007/11/15(木) 08:47:34ラムダ式の <&> で始まるやつのことじゃない?
0456デフォルトの名無しさん
2007/11/15(木) 08:48:280457デフォルトの名無しさん
2007/11/15(木) 09:10:39やべぇ。また知らないものが出てきたぞ。
ラムダ式で <&> で始まるやつとやらの概要を教えて。
0458デフォルトの名無しさん
2007/11/15(木) 13:35:38半ページしかないから。
あとついでにn2413の「6.1 The <&> form」も。
n2329がgeneric版、n2413がmonomorphic版。
0459デフォルトの名無しさん
2007/11/15(木) 18:10:54さんくす。
なるほどー。ただものじゃないな・・・この仕様。
ラムダ導入って単にちょっとした無名の関数を書けるだけかと思ってたけど、
実はちゃんとクロージャしてるんだね。
これ実装できるかねぇ。というかまず proposal が通らないと始まらないか。
0460デフォルトの名無しさん
2007/11/15(木) 20:17:39でも喉から手が出るほど欲しかった甘さだ
0461デフォルトの名無しさん
2007/11/15(木) 20:19:52変化を適当な例で示してくれよよよ
0462デフォルトの名無しさん
2007/11/15(木) 20:31:53{
string name;
explicit name_is(string n) : name(n) {}
bool operator()(cosnt employee& e) const
{ return e.name() == name; }
};
void f(cosnt vector<employee>& es)
{
auto found = find_if(es.begin(), es.end(), name_is("Stroustrup"));
// ...
}
が
void g(cosnt vector<employee>& es)
{
auto found = find_if(es.begin(), es.end(),
<>(const employee& e){ e.name() == "Stroustrup"});
// ...
}
に
0463デフォルトの名無しさん
2007/11/15(木) 21:06:250464デフォルトの名無しさん
2007/11/15(木) 21:30:25おー確かに凄い…
それと
> <&> form
<>の事だったのね・・・
0465デフォルトの名無しさん
2007/11/15(木) 21:59:59「New function declaration syntax for deduced return types」
なんかを見ると <> の代わりに auto でも良さそうに思うね
auto の再利用が過ぎるか?
0466デフォルトの名無しさん
2007/11/15(木) 22:57:50便利だろうけど、乱用するとコンパイラしか真実を知らない
なんてことになりそう・・・
0467デフォルトの名無しさん
2007/11/15(木) 23:03:56lambdaの"<>"は、syntax上のconstructorで、
出来上がるものはfirst class objectだから。
typeについて何か言及するもんじゃない。
>>462
> <>(const employee& e){ e.name() == "Stroustrup"});
これは、
< <>(const employee& e)(e.name() == "Stroustrup"));
あるいは
< <>(const employee& e){ return e.name() == "Stroustrup";});
じゃない?
0468デフォルトの名無しさん
2007/11/15(木) 23:06:550469デフォルトの名無しさん
2007/11/15(木) 23:13:50手近にあった n2329 を見ながら >>462 を書きました
n2413では () だね
0470デフォルトの名無しさん
2007/11/15(木) 23:17:33まあ、そうなのかもしれないけど
n1978なんかを見ると auto を使うのもありかなと
0471デフォルトの名無しさん
2007/11/15(木) 23:21:44インライン化が期待できる分、高速になる可能性があるな
0472デフォルトの名無しさん
2007/11/15(木) 23:36:52n2329でいろいろな案が提案されて、
n2413で今の形に落ち着いてる。
0473デフォルトの名無しさん
2007/11/15(木) 23:39:54Fig. 1 Example translation on lamba function. 〜
を見るとそう簡単な話でもなさそうだけど。
自由変数含まない時は、translationを最適化しないと駄目。
0474デフォルトの名無しさん
2007/11/16(金) 01:02:11でもあれマルチスレッドで破綻するよね。
0475デフォルトの名無しさん
2007/11/16(金) 02:23:58関数内関数の事?あれC++だとサポートされてないよ
0476デフォルトの名無しさん
2007/11/16(金) 06:14:030477デフォルトの名無しさん
2007/11/16(金) 09:04:24そうそれ。
g++でサポート外とかそういうことじゃなくてC++0xでの仕組みの話し。
0478デフォルトの名無しさん
2007/11/16(金) 09:08:15lambdaは「式」なの。
レベル低すぎ。
0479デフォルトの名無しさん
2007/11/16(金) 09:15:24シンタックス上はそうだね。
で例えばどういうバイナリになるのかって話。
レベルの高い人、解説よろしく。
0480デフォルトの名無しさん
2007/11/16(金) 09:45:18>>472に書いてあるだろ。
0481デフォルトの名無しさん
2007/11/16(金) 12:53:51conceptsの策定はもう終盤だよ。
規格に入れる文言を練っているところだもの。
Libraryのconcept化は今回やらないし。(n2322)
微妙なのがthread。lambdaも油断ならない。
0482デフォルトの名無しさん
2007/11/16(金) 22:08:510483デフォルトの名無しさん
2007/11/16(金) 22:15:25@と$はいろいろ好き勝手使われてるから
0485デフォルトの名無しさん
2007/11/17(土) 15:42:44いや、STLPortならやってくれるか?
0486デフォルトの名無しさん
2007/11/17(土) 22:43:250487デフォルトの名無しさん
2007/11/17(土) 23:55:370488デフォルトの名無しさん
2007/11/18(日) 00:19:370489デフォルトの名無しさん
2007/11/19(月) 01:21:01ttp://www.comeaucomputing.com/csc/faq.html
0490デフォルトの名無しさん
2007/11/23(金) 02:11:42出来ないのかなぁ。
例えば、
new (*p)();//コンストラクタ型ポインタの宣言
クラス名 *obj;//通常のポインタ
p=&クラス名;//コンストラクタのアドレス取得(実際はメタ情報を指す)
obj=new p();//オブジェクトの生成(メタ情報から本来のnewで生成したポインタを返す)
てな感じ。あればCallBacK関係で重宝
しそうなんだが、
問題はdeleteが…。
0491デフォルトの名無しさん
2007/11/23(金) 02:15:09http://boost.org/doc/html/lambda/le_in_details.html#lambda.construction_and_destruction
消すほうはshared_ptrにでも入れておけばいいだろ。
0492デフォルトの名無しさん
2007/11/23(金) 02:55:50void callback(new(*p)())
{
中略
}
void(*f)(new(*)())=callback;
f(&Type0);
f(&Type1);
って事は出来んだろ?
それと、
new (*p)=外部関数();
てな感じで別の翻訳単位のクラスを
取得するのも不可能だろ。
0493デフォルトの名無しさん
2007/11/23(金) 04:49:560494デフォルトの名無しさん
2007/11/23(金) 08:49:22hoge.~Hoge();
new(&hoge) Hoge();
0495デフォルトの名無しさん
2007/11/23(金) 11:45:12>>494
プレスメントだと同じ翻訳単位に
クラスが存在しないといけないから
無理だよ。
それと、さっきレスで
new (*p)=外部関数();
って書いたけど正しくは、
new (*p)()=外部関数();
あ、冷静に考えたら戻り値
の型要るな、
Type new *(*p)();
戻り値はポインタしかないから、
アスタリスク省略してもいい気も
する。
Type new (*p)();
一応Typeは渡すコンストラクタ
の親でも構わない(共変な型)。
こんな感じでどうよ。
0496デフォルトの名無しさん
2007/11/23(金) 11:52:14つーか、そんなのテンプレートで定義すれば簡単に出来るから入らないよ。
0497デフォルトの名無しさん
2007/11/23(金) 11:58:100498デフォルトの名無しさん
2007/11/23(金) 12:33:46#include <iostream>
#include <boost/function.hpp>
#include <boost/shared_ptr.hpp>
template<typename T>
boost::shared_ptr<void> new_shared_ptr()
{
boost::shared_ptr<T> p(new T);
return boost::static_pointer_cast<void>(p);
}
struct mycls
{
mycls() {std::cout << "constructor " << static_cast<void*>(this) << std::endl;}
mycls(mycls const&) {std::cout << "copy constructor " << static_cast<void*>(this) << std::endl;}
mycls& operator =(mycls const&) {std::cout << "operator = " << static_cast<void*>(this) << std::endl; return *this;}
~mycls() {std::cout << "destructor " << static_cast<void*>(this) << std::endl;}
};
int main()
{
using boost::shared_ptr;
boost::function<boost::shared_ptr<void> ()> f = new_shared_ptr<mycls>;
shared_ptr<void> ps1 = f(); //new mycls
shared_ptr<mycls> ps = boost::static_pointer_cast<mycls>(pi1);
*ps = mycls();
}
0499デフォルトの名無しさん
2007/11/23(金) 12:35:52同じ翻訳単位にクラスが存在しなかったら、
作ったクラスを扱えんと思うのだが。
0500デフォルトの名無しさん
2007/11/23(金) 12:36:27○作ったインスタンス
0501デフォルトの名無しさん
2007/11/23(金) 12:52:18>C++0xに採用してくれる
>とか思ってんの?
確かにそうだが、実装されたい
機能の妄想ぐらいしてもいいだろ?
ここは2CHなんだから。
>つーかテンプレートで定義すれば簡単に出来る
マジで?
今のところ別の翻訳単位の
クラスでインスタンス化できる
テンプレート実装を見たことが
ないんだが。
exportですら同じ翻訳単位に
クラス定義が必要なのにどうやったら
できるの?
0502デフォルトの名無しさん
2007/11/23(金) 12:54:420503デフォルトの名無しさん
2007/11/23(金) 13:02:18こういう使い方では翻訳単位なんて問題ないだろ。
0504デフォルトの名無しさん
2007/11/23(金) 13:22:080505デフォルトの名無しさん
2007/11/23(金) 13:24:220506デフォルトの名無しさん
2007/11/23(金) 13:30:59は?
お前の案もクラス定義が必要なこといってますけど?それが?
>Type new (*p)();
>一応Typeは渡すコンストラクタ
>の親でも構わない(共変な型)。
クラスの親子関係はクラス定義がないとわからない。
0507デフォルトの名無しさん
2007/11/23(金) 13:34:180508デフォルトの名無しさん
2007/11/23(金) 13:36:380509デフォルトの名無しさん
2007/11/23(金) 13:37:020510デフォルトの名無しさん
2007/11/23(金) 13:53:47こんな意味不明な関数ポインタ型を新しく作っても煩雑になるだけ。
ClassName* (*p)() = &ClassName;
と、既存の関数ポインタ型に入れられた方が便利。
これは
ClassName* create(){ return new ClassName(); }
という関数を用意して
ClassName* (*p)() = &create;
とすれば出来る。
あとはcreate関数をテンプレートで自動的に作れるようにするだけ
template<class Class, class Result>
struct Create{
static Result create(){ return Result(new Class()); }
};
ClassName* (*p)() = &Create<SubClass, ClassName*>::create;
shared_ptr<ClassName> (*p2)() = &Create<SubClass, shared_ptr<ClassName> >::create;
はい、テンプレートで出来ました。
0511デフォルトの名無しさん
2007/11/23(金) 14:03:030512デフォルトの名無しさん
2007/11/23(金) 14:06:17使う側はもっと簡易的に使うことも出来るけど、ま、それはきみへの宿題ということで。
0513デフォルトの名無しさん
2007/11/23(金) 14:08:320514デフォルトの名無しさん
2007/11/23(金) 14:11:440515デフォルトの名無しさん
2007/11/23(金) 14:15:180516デフォルトの名無しさん
2007/11/23(金) 14:16:380517デフォルトの名無しさん
2007/11/23(金) 14:44:430518デフォルトの名無しさん
2007/11/23(金) 14:46:04class Foo{}
class Bar:Foo{}
void main(){
auto p = {return cast(Foo)new Bar;};
}
以下見様見真似のC++0x。
class Foo{};
class Bar:Foo{};
int main(){
auto p = <>()( Foo(new Bar()); );
return 0;
}
0519デフォルトの名無しさん
2007/11/23(金) 15:01:18面倒だから書きたくなかった
んだがしゃーない。
head.h
class A{…};
void f(A new(*)());
src1.cpp
#include"head.h"
void f(A new(*p)())
{
A *obj=new p();
}
src2.cpp
#include"head.h"
struct B:A{…};
void call()
{
f(&B);
}
こうすれば関数fはBを直接知らずとも
Bのオブジェクト生成できるでしょ?
それに、Aのメンバーを仮想化すれば
操作に支障はない。
さて、何やら俺が痛い子にみえて
来たんでそろそろお暇させていた
だくわ。
0520デフォルトの名無しさん
2007/11/23(金) 15:02:34その例は、そこだけ切り取れば綺麗に見えるだけ。
例えばそのautoで受け取ったlamdaを他の関数に渡せないだろ。
0521デフォルトの名無しさん
2007/11/23(金) 15:11:35それだと引数なしのオブジェクトしか
作れない訳だが
0522デフォルトの名無しさん
2007/11/23(金) 15:13:41function getCtors() {
return [
function () { this.name = "A"; }
function () { this.name = "B"; }
function () { this.name = "C"; }
];
}
var obj = new getCtors()[0];
//obj.name == "A"
0523デフォルトの名無しさん
2007/11/23(金) 15:17:24Createを引数ありに改造するなんて簡単だろ
0524519
2007/11/23(金) 15:19:390525デフォルトの名無しさん
2007/11/23(金) 15:20:360526デフォルトの名無しさん
2007/11/23(金) 15:22:07templateでやってもDLL間でやり取りできる
0527デフォルトの名無しさん
2007/11/23(金) 15:24:10D言語なら渡せる(Foo delegate()型)。C++0xはシラネ。
0528デフォルトの名無しさん
2007/11/23(金) 15:24:520529デフォルトの名無しさん
2007/11/23(金) 15:25:00callbackとして使えるか?
0530デフォルトの名無しさん
2007/11/23(金) 15:25:47D言語なら使える。C++0xはシラネ。
0531デフォルトの名無しさん
2007/11/23(金) 15:27:27コンストラクタ毎に作るのか馬鹿だろ。
それとも引き数一つ取って一時オブジェクト
を渡しコピーするのか?
いずれにせよ利口ではないな
0532デフォルトの名無しさん
2007/11/23(金) 15:27:40嘘を言うな。Dでも出来ないよ
0533デフォルトの名無しさん
2007/11/23(金) 15:28:33どちらも違う。というかそんな方法しか思いつかないって頭悪いだろ。
0534デフォルトの名無しさん
2007/11/23(金) 15:30:30多分vaultにあるshared_newみたいな感じで作るんだろうなぁというかそれしか思いうかばねぇや
0535デフォルトの名無しさん
2007/11/23(金) 15:30:44できるっての。試してみ。
0536デフォルトの名無しさん
2007/11/23(金) 15:33:54いいやお前の方がばかだ
なんだと
以下略
0537デフォルトの名無しさん
2007/11/23(金) 15:37:200538デフォルトの名無しさん
2007/11/23(金) 15:40:450539デフォルトの名無しさん
2007/11/23(金) 15:43:08DLL側にテンプレートを作って
呼び出すのは実質不可能
テンプレートをインスタンス化
させておく方法もあるが非効率
いったいどうやるの?
0540デフォルトの名無しさん
2007/11/23(金) 15:45:08関数ポインタとして渡すんだよ。
なんでそんなこともわからないの?
0541デフォルトの名無しさん
2007/11/23(金) 15:49:500542デフォルトの名無しさん
2007/11/23(金) 15:51:43テンプレート関係ないじゃん
テンプレート使ってできる方法言えよ
0543デフォルトの名無しさん
2007/11/23(金) 15:53:33お前このスレの何を見てきた。テンプレート使ってるよ。
0544デフォルトの名無しさん
2007/11/23(金) 15:55:250545デフォルトの名無しさん
2007/11/23(金) 15:57:12スルーできないのが馬鹿の特徴の一つ
0546デフォルトの名無しさん
2007/11/23(金) 15:57:40関数のポインタによるDLL間の
やりとりにテンプレートが介在
する余地があると?
0547デフォルトの名無しさん
2007/11/23(金) 15:58:18はいはい。ありますよ。
0548デフォルトの名無しさん
2007/11/23(金) 16:09:57それが面倒ってことなのかな?
0549デフォルトの名無しさん
2007/11/23(金) 16:16:27馬鹿だから作れないし、作れると言ってる人が全員キチガイに見える、ってことでは。
0550デフォルトの名無しさん
2007/11/23(金) 16:18:540551デフォルトの名無しさん
2007/11/23(金) 16:36:02>>490辺りからずっとそういう話じゃない?
要はlamdaのようにいちいちクラスやら関数作らずに済ませたいと。
0552デフォルトの名無しさん
2007/11/23(金) 16:37:250553デフォルトの名無しさん
2007/11/23(金) 16:56:12え? そうなん?
519は「既存の仕組みだと ・・・ができない!」ってことを強調してるような気がするけど
0554デフォルトの名無しさん
2007/11/23(金) 17:09:00既存の仕組みでもできるよっていう反論があったから
それじゃ便利にならないっていう流れで「〜じゃできない」って事だろ
0555デフォルトの名無しさん
2007/11/23(金) 17:20:00全クラスで揃えるのもどうかなあと思わんでも無い。
0556デフォルトの名無しさん
2007/11/23(金) 17:21:48既存の仕組みでも簡単にできることがよくわかるし
わりと簡単に思いつく、天才の閃きは要らない
0557デフォルトの名無しさん
2007/11/23(金) 17:27:40FactoryMethodがその辺りのwrapperやってくれるわな。
0558デフォルトの名無しさん
2007/11/23(金) 18:09:230559デフォルトの名無しさん
2007/11/24(土) 01:33:230560デフォルトの名無しさん
2007/11/24(土) 01:42:042100年移行までおあずけですか
0561デフォルトの名無しさん
2007/11/24(土) 02:15:330562デフォルトの名無しさん
2007/11/24(土) 19:47:30Objective-CにはClass型ってのがあったなtypeinfo
なんていらんからああいう型があってもおもしろいと思う。
0563デフォルトの名無しさん
2007/11/25(日) 16:07:490564デフォルトの名無しさん
2007/11/25(日) 16:08:300565デフォルトの名無しさん
2007/11/25(日) 16:18:10一通りC++0xにも入るはず。
0566デフォルトの名無しさん
2007/11/25(日) 17:27:21かといってそれが C99 になるわけではないよね.
予約語とか.
0567デフォルトの名無しさん
2007/11/26(月) 00:24:08可変個引数マクロとか _Pragma 演算子とか。
0568デフォルトの名無しさん
2007/11/28(水) 07:27:49restrict 有り/無しでオーバーロードしたらどうなるんだろ。
コンパイラには判断できないよなぁ。
0569デフォルトの名無しさん
2007/11/28(水) 07:34:46でもそれは欲しかったり。
0570デフォルトの名無しさん
2007/11/28(水) 08:08:550571デフォルトの名無しさん
2007/11/28(水) 08:28:34あってもコンパイラに判断できないっつってんだろ。
0572デフォルトの名無しさん
2007/11/28(水) 09:56:200573デフォルトの名無しさん
2007/11/28(水) 12:02:31何回言ったらそのテンプレートの使い方覚えんだよ?
0574デフォルトの名無しさん
2007/11/28(水) 12:15:41const同様に扱えば判断できるべ。
0575デフォルトの名無しさん
2007/11/28(水) 12:15:43コンパイラに謝る上司の姿を想像して吹いた
0576デフォルトの名無しさん
2007/11/28(水) 16:06:58restrictは引数以外での指定ができないからそれは無理じゃないか?
0577デフォルトの名無しさん
2007/11/28(水) 16:45:17げ、そうなのか。
0578デフォルトの名無しさん
2007/11/28(水) 17:10:05ただ、restrictの有無で動作がかわらないようにしないとバグの温床になるけど。
void copy(char* src, char* dst);
void copy(char* restrict src, char* restrict dst);
f(char* s, char* t) {
char a[10];
char b[10];
copy(a, b); // 範囲が重複していないと断言できる
copy(s, b); // 範囲が重複していないと断言できる
copy(s, t); // 範囲が重複していないとは断言できない
}
g(char* restrict s, char* restrict t) {
copy(s, t); // 範囲が重複していないと断言できる
}
0579デフォルトの名無しさん
2007/11/30(金) 14:56:06char * restrict * foo = NULL;
free(foo);
# gcc/iccでC++としてコンパイルすると型変換のエラーにはなる。
つまり、見かけ上はconst同様に扱われているから普通に変数に指定できると。
>576によると引き数以外での指定ができないとあるが、規格的にはどうなってるのかな。
0580デフォルトの名無しさん
2007/11/30(金) 15:44:526.7.3.11 EXAMPLE4 見て。
C++0xへのC99統合で、何か特別な処置でもしない限り、Cのスレでやってね。
0582デフォルトの名無しさん
2007/12/02(日) 04:24:40これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
0583デフォルトの名無しさん
2007/12/02(日) 04:38:19これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
0584デフォルトの名無しさん
2007/12/02(日) 20:33:150585デフォルトの名無しさん
2007/12/02(日) 20:40:100586デフォルトの名無しさん
2007/12/04(火) 23:10:360587デフォルトの名無しさん
2007/12/05(水) 00:23:46これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
0588デフォルトの名無しさん
2007/12/05(水) 00:24:17これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
これからもC++0xについて熱く語ろう!これからもC++0xについて熱く語ろう!
0589デフォルトの名無しさん
2007/12/05(水) 17:16:390590デフォルトの名無しさん
2007/12/06(木) 00:02:410591めかる ◆DzhWnUSADA
2007/12/06(木) 00:08:590592デフォルトの名無しさん
2007/12/07(金) 02:20:20使い方がテンプレートクラスっぽいから、やっぱり
struct someclass{
template<typename T> operator static_cast(T a);
};
ってなるんだろうか。
0593デフォルトの名無しさん
2007/12/14(金) 01:14:51News 2007-12-13: The 2007-12 mailing is available
News 2007-12-13: The C++ Standard Library Issues List (Revision 53) is available
News 2007-12-13: C++ Standard Core Language Issues List (Revision 52) is available
0594デフォルトの名無しさん
2007/12/14(金) 01:29:310595デフォルトの名無しさん
2007/12/14(金) 01:32:23せっかくC++だったのに…
0596デフォルトの名無しさん
2007/12/14(金) 01:37:450597デフォルトの名無しさん
2007/12/14(金) 07:08:580598デフォルトの名無しさん
2007/12/14(金) 11:23:490599デフォルトの名無しさん
2007/12/14(金) 13:33:09> N2485
> A variadic std::min(T, ...) for the C++ Standard Library
さっそくこういうの出てきていい感じですね。
0600デフォルトの名無しさん
2007/12/15(土) 19:15:45kwskおねがいします
0601デフォルトの名無しさん
2007/12/15(土) 19:26:27__VA_ARGS__ を使う仕様はなんとかならないかなぁ。
.NET みたいに配列(あるいは、記法だけでも配列風)にはできないもんだろうか。
0602デフォルトの名無しさん
2007/12/15(土) 19:31:07const T& min( const T& a) { return a; }
template < LessThanComparable T, typename ... Args >
requires SameType <T, Args >...
const T& min( const T& a, const T& b, const Args &... args )
{ return std :: min( b < a ? b : a, args ...); }
minテンプレートの可変引数に対する再帰
0603デフォルトの名無しさん
2007/12/15(土) 19:34:30C99 との互換性なんだろうと思う。
他全てと互換性ない癖に今更と思わなくもないが。
0604デフォルトの名無しさん
2007/12/18(火) 15:08:36重箱だが、const参照の引数を参照で返したらダメだよ
引数に一時オブジェクトが渡されるときもあるから
0605デフォルトの名無しさん
2007/12/18(火) 20:15:09int x = min(min(1,2),3);
0606デフォルトの名無しさん
2007/12/19(水) 01:19:08戻り値で作られた一時オブジェクトはconst参照で延命できるけど、
このばやい戻り値(const T&)はrvalueじゃないからダメってこと?
ダメってソースとかあったらkwsk
延命できそうな気もしなくもないけど…どうなんだろう
0607デフォルトの名無しさん
2007/12/19(水) 01:39:15605の場合、xの初期化を行うときはまだ生きている。
const参照で受ける場合も、それで寿命が延びるから
あまり問題にならないと思う。
0608デフォルトの名無しさん
2007/12/19(水) 01:43:01int const & x = min(1,2); // ダングリング
0609606
2007/12/19(水) 03:30:56ttp://it-reading.org/ebook/c%20faqs/content/0201309831_ch32lev1sec8.html
あー、昔書いたコード見直さないとあかんかも...orz
0610デフォルトの名無しさん
2007/12/19(水) 10:16:53・・・は甘いか。
0611デフォルトの名無しさん
2007/12/19(水) 11:35:500612デフォルトの名無しさん
2007/12/19(水) 11:47:590613デフォルトの名無しさん
2007/12/19(水) 16:16:49これ戻り値はrvalueじゃないの?
0614デフォルトの名無しさん
2007/12/19(水) 21:36:45俺だったら戻り値をconst T&で受ける書き方をしても安全だと期待するなあ
だからこそ危ないよっていう指摘なんだろうし。
0615デフォルトの名無しさん
2007/12/19(水) 22:05:03iterator i = string().begin(); // ダングリング
0616デフォルトの名無しさん
2007/12/19(水) 22:27:48const smart_ptr& returns_pointer(const smart_ptr& sumapo)
こんな関数に渡したらreturn時に見事にデストラクトされた私が通りますよ。
0617デフォルトの名無しさん
2007/12/20(木) 03:58:030618デフォルトの名無しさん
2007/12/21(金) 12:13:520619デフォルトの名無しさん
2007/12/21(金) 23:01:57返すのはいいんじゃない?問題になるのは
>const参照で受ける場合も、それで寿命が延びるから
>あまり問題にならないと思う。
こういう誤解をして、const T& hoge = min(..); と受けてしまった場合だけだから。
0620デフォルトの名無しさん
2007/12/21(金) 23:05:40だって規格でそうなってるんだもんよ。
0621デフォルトの名無しさん
2007/12/22(土) 23:40:39とか
ABIをある程度規定しないか
とか
その辺の動きはないのかねぇ
0622デフォルトの名無しさん
2007/12/22(土) 23:48:08this をどう扱うかとか
例外をどう扱うかとか統一しないと意味ない希ガス。
0623デフォルトの名無しさん
2007/12/23(日) 00:13:46互換性を考えると、どの処理系もいまさら変えられないでしょ。
せっかく決めても誰も使わない可能性大。
0624デフォルトの名無しさん
2007/12/23(日) 01:34:210625デフォルトの名無しさん
2007/12/23(日) 01:45:010626デフォルトの名無しさん
2007/12/23(日) 04:18:53いりません
0627デフォルトの名無しさん
2007/12/27(木) 12:36:37これを読むとC++のことぼろくそに書いてあるんだけど、
本当のところはどうなんだろうか。
自分としては boost::lambda とか強力なメタプログラミング
ライブラリもあるし、好きなんだけど・・・・
なんかね、俺、流されやすいのよ。
そりゃ業務では好き嫌いなく必要な言語使うけど。
0628デフォルトの名無しさん
2007/12/27(木) 12:57:19以前多重継承について犯した過ちを、今度はgenericsに対して犯している。
具体的にはconcept, interface, signatureあたりに対する無知。
というのが感想。
型システムについて語りたければ、Haskellのtype classくらいは勉強しないと。
今や型理論を知らないと型システムの良し悪しについて語れない時代。
0629デフォルトの名無しさん
2007/12/27(木) 13:25:420630デフォルトの名無しさん
2007/12/27(木) 13:32:56的を得てると思う。趣味でコード書いている人ならともかく、
C++が大きなクソの山を作り出す、というのは多くの開発現場で実際起きていることだし
これを無知な奴のたわ言と切り捨てるのは、よほど恵まれた環境で仕事しているか
逆に実際の開発現場を知らない、それこそ無知な人でしょ。
0631デフォルトの名無しさん
2007/12/27(木) 13:34:24つまりオマエらNEETは勝ち組み?みたいな。
0632デフォルトの名無しさん
2007/12/27(木) 13:35:280633デフォルトの名無しさん
2007/12/27(木) 13:41:340634デフォルトの名無しさん
2007/12/27(木) 13:45:13gcc で C++ しているひとの数をくらべたら、後者のほうが
多かったりしないかな?しないか。
0635デフォルトの名無しさん
2007/12/27(木) 13:50:07あの社名だかブランドだかがコロコロ変わる会社のことか?w
0636デフォルトの名無しさん
2007/12/27(木) 14:02:290637デフォルトの名無しさん
2007/12/27(木) 14:20:24VC製除いたら殆どなくなるんじゃないの?
逆に、UNIXの世界だと、C++のウェイトなんかそんなに大きくないし。
0638デフォルトの名無しさん
2007/12/27(木) 14:26:480640デフォルトの名無しさん
2007/12/27(木) 20:16:22仕様が変わるのかぁ・・・
0641デフォルトの名無しさん
2007/12/27(木) 21:23:500642デフォルトの名無しさん
2007/12/27(木) 22:24:07クソの山を作り出してるのは「C++」なのかね?
実際にはSTLだのBoostだの以前にプログラミング技法さえ身についてないヘボグラマが"普通の"プログラマ扱いになっている性だと思うんだが。
そんな連中はJavaだろうがPHPだろうがVBだろうが結局クソしか出せないわけだろ。
実際問題たかがプログラミング言語ひとつ、C++ごときでヒィヒィ言ってるようなやつが「実践」「実用」なんていったい何処のサル山のボス猿気取りですかって感じ。
0643デフォルトの名無しさん
2007/12/27(木) 22:56:51そういう連中が仕事で使っても比較的被害が少ないように設計されている言語だからね。
クソな連中だが、そういうのが世の中の9割らしいぞ。w
0644デフォルトの名無しさん
2007/12/27(木) 23:00:08それは幻想というものだ。
0645デフォルトの名無しさん
2007/12/27(木) 23:32:45あんなのニッチにうまくハマッただけの言語じゃないか
6、7年前のコミュニティーが使い方をわかってなかった頃のC++なら糞に見えるかもしれないが
いまはC++は凄く良い言語じゃないか?
0646デフォルトの名無しさん
2007/12/27(木) 23:59:34JavaやPHP,VBにしたってクソが勝手に使い物になるような魔法は仕組まれてないよ。
手続きと関数の区別もつかないようなやつが書いた、どうせ数週間後には1から書き直されるようなソースコードに資産価値なんぞないわけで、
兵卒のレベルに合わせて入門書そのままのクソもデータ構造なんて存在しないゴミソースの山に、それを正常動作させるために膨れ上がった無用なテストの山
WordだPDFだの装飾がついてることありきでそのためメンテが面倒で追いつかないドキュメントもどきに、何もかもが手動、人力管理の非効率プロジェクト。
そんなクソの万魔殿のなかで、せいぜい後に残る知識・資産が業務の片手間に残したメモ書き数枚なんて状況で、ちゃんとした「仕事」をこなしたなんて恐れ多くて言えたモンじゃないよ。
どうせそうやって作った成果物だって妥協の限りを尽くして作り上げられた代物で、当初の要求に似ても似つかないようなスクラップじゃ納品した矢先に客先に「使い物にならん」と言われて終わりだよ。
0647デフォルトの名無しさん
2007/12/28(金) 00:08:54禿もこう言っていることだし。
>C++ has indeed become too "expert friendly"
ttp://www.technologyreview.com/Infotech/17831/page2/
それなりのコードが書けるようになるまでの閾値が高すぎると思うんだわ。
0648デフォルトの名無しさん
2007/12/28(金) 00:14:45よく嫁。使い物になるなんて言ってない。「仕事」になるってだけ。
一緒に仕事したいとは思わんけど、あいつらがそれで喰ってる事実は否定できん。
0649デフォルトの名無しさん
2007/12/28(金) 00:33:160650デフォルトの名無しさん
2007/12/28(金) 00:36:11まあテンプレートメタプログラミングに始まり、関数型、オブジェクト指向手続き型、抽象データ型の扱いなど、「使いこなす」には大変だと思うよC++は。
でも、クラスベースのオブジェクト指向手続き型言語として、類似のJavaやC#の公約数的部分だけでも理解して使えれば十分なんだが、そこまでいくのもそんなに難しいものかねぇ・・・
>>648
よく読んだ。確かに対価はもらっている以上「仕事」としては成立しているわけではある。
無駄に噛み付いてすまんかった。
0651デフォルトの名無しさん
2007/12/28(金) 01:45:53だからC++0xの話をして、プログラマ板向きの話題は窓から捨ててしまおう。
俺が今勉強中なのは、late_checkの、
ConceptGCC Developer's Blog
Late-Checked Templates, Revisited
January 18, 2007 by Douglas Gregor
So, in a discussion with Jaakko Jarvi, we decided that the right
approach is to change the granularity of late_check. Instead of
operating at the level of expressions or types, it acts at the level
of entire templates.
のところ。
0652デフォルトの名無しさん
2008/01/02(水) 21:58:130653デフォルトの名無しさん
2008/01/02(水) 22:12:450654デフォルトの名無しさん
2008/01/02(水) 22:15:49ただ、もう「C++0xの次」みたいのが言われ始めてるからなw
0655デフォルトの名無しさん
2008/01/02(水) 22:42:370656デフォルトの名無しさん
2008/01/02(水) 22:43:280657デフォルトの名無しさん
2008/01/02(水) 22:44:350658デフォルトの名無しさん
2008/01/02(水) 22:52:190659デフォルトの名無しさん
2008/01/03(木) 08:37:320660デフォルトの名無しさん
2008/01/03(木) 08:42:50西暦999999年までに決まればおk
0661デフォルトの名無しさん
2008/01/03(木) 08:45:410662デフォルトの名無しさん
2008/01/03(木) 16:07:340663デフォルトの名無しさん
2008/01/03(木) 16:59:100664デフォルトの名無しさん
2008/01/03(木) 17:15:480665デフォルトの名無しさん
2008/01/03(木) 18:40:480666デフォルトの名無しさん
2008/01/06(日) 19:33:16何がすげえって、今までライブラリなりがガリガリ実装してたものを
言語が仕様だけ定めてあと実装はベンダに丸投げってその思想がすばらしい。
その手があったか、ってw
0667デフォルトの名無しさん
2008/01/06(日) 19:35:38意味不明。ベンダとかライブラリって具体的には何をイメージしてる?
0668デフォルトの名無しさん
2008/01/06(日) 22:12:07いちいち突っ込んでスレを荒らすな
0669デフォルトの名無しさん
2008/01/07(月) 02:01:590670デフォルトの名無しさん
2008/01/07(月) 11:56:290671デフォルトの名無しさん
2008/01/07(月) 15:31:36昔のメインフレームはワードアドレスマシンとかあって整合性が悪そうだ。
0672デフォルトの名無しさん
2008/01/07(月) 16:16:340673デフォルトの名無しさん
2008/01/07(月) 16:47:530674デフォルトの名無しさん
2008/01/07(月) 16:54:43つーことで、>671-674 はまとめてスレ違い。
0675デフォルトの名無しさん
2008/01/07(月) 17:47:35ガベコレ対象となるクラスはまた特別な
クラスから継承しなければならないとか?
0676デフォルトの名無しさん
2008/01/07(月) 18:01:550677デフォルトの名無しさん
2008/01/07(月) 19:04:430678デフォルトの名無しさん
2008/01/07(月) 20:36:18ユニークカウンタ(俺語です。)で処理すんの面倒なんでぜひ入ってほしい。
0679デフォルトの名無しさん
2008/01/07(月) 21:25:38とりあえず実装非依存な形で仕様に出来るかどうか研究して頂けると嬉しい。
0680デフォルトの名無しさん
2008/01/07(月) 22:50:53これは当分入らないと思う
ちゃんと読めばそんなことない?
0681デフォルトの名無しさん
2008/01/07(月) 23:03:33#scope
#endscope
みたいなのは入るのかな
0682デフォルトの名無しさん
2008/01/08(火) 00:25:580683デフォルトの名無しさん
2008/01/08(火) 03:53:57トライグラフだっけ?それじゃだめなのか?
0684デフォルトの名無しさん
2008/01/08(火) 03:56:34#includeだけでいいよ
0685デフォルトの名無しさん
2008/01/08(火) 05:57:58ifdefが無いとassertもできなくね?
ifdefなんて無いに越したことはないが、必要な部分はあると思うんだが。
0686デフォルトの名無しさん
2008/01/08(火) 06:36:360687デフォルトの名無しさん
2008/01/08(火) 07:20:11プリプロセッサ用のスコープか?
0688デフォルトの名無しさん
2008/01/08(火) 07:37:110689デフォルトの名無しさん
2008/01/08(火) 11:05:07そうマクロを制限する。
scope外のマクロ全部無効になって、
scope内のマクロはscopeの外に定義が出ない。
ただし必要なものだけimport/exportできる。
#undefよりはスマートに書けるが、
泥縄的だから標準には入らないと思う。
namescapeを導入した時に、マクロ名も識別子と同様、
namespaceに入ることにしたら良かったんじゃないか。
0690デフォルトの名無しさん
2008/01/08(火) 12:56:03言語側でちゃんと実装すべきだと思うが、そうするともう C++ とは呼べないだろう。
0691デフォルトの名無しさん
2008/01/08(火) 12:58:26コンパイルフェーズでプリプロセッサが分かれているんだから、
namespace を解釈させるってのは難しいだろうね。
0692デフォルトの名無しさん
2008/01/08(火) 13:14:290693デフォルトの名無しさん
2008/01/08(火) 13:56:07あんなことやこんな変態プレイができるんだぜ?
0694デフォルトの名無しさん
2008/01/08(火) 21:20:100695デフォルトの名無しさん
2008/01/08(火) 22:21:090696デフォルトの名無しさん
2008/01/08(火) 22:26:57C++0x standard
0697デフォルトの名無しさん
2008/01/08(火) 22:27:59てっきりそうだと思ってた
0698デフォルトの名無しさん
2008/01/08(火) 22:32:01C++のプリプロセッサがチューリング完全だとは聞いたことが無い。
テンプレートはチューリング完全だけどね。
0699デフォルトの名無しさん
2008/01/08(火) 22:41:35規格でネストのレベルの上限が決まってるとかかな
まぁスレ違いか
0701デフォルトの名無しさん
2008/01/09(水) 10:03:020702デフォルトの名無しさん
2008/01/09(水) 10:08:49技術力の低い賎民の僻みなんだから気にしたら負けだ
0703デフォルトの名無しさん
2008/01/09(水) 10:30:200704デフォルトの名無しさん
2008/01/09(水) 12:09:520705デフォルトの名無しさん
2008/01/09(水) 12:24:570706デフォルトの名無しさん
2008/01/09(水) 13:22:380707デフォルトの名無しさん
2008/01/09(水) 17:35:100708デフォルトの名無しさん
2008/01/09(水) 17:41:43Boost.MPLやBoost.Lambdaはがんばれば出来る
(かもしれない)
Boost.Preprocessorは絶対に無理だ
0709デフォルトの名無しさん
2008/01/09(水) 19:52:30アッカーマン関数なら計算できるけど。
template <unsigned long long m, unsigned long long n>
struct Ack
{
%9static const unsigned long long value = Ack<m-1, Ack<m, n-1>::value>::value;
};
template<unsigned long long n>
struct Ack<0, n> {
%9static const unsigned long long value = n+1;
};
template <unsigned long long m>
struct Ack<m, 0> {
%9static const unsigned long long value = Ack<m-1, 1>::value;
};
template <>
struct Ack<0, 0>
{
%9static const unsigned long long value = 1;
};
0710デフォルトの名無しさん
2008/01/09(水) 19:53:18もっかい
template <unsigned long long m, unsigned long long n>
struct Ack
{
static const unsigned long long value = Ack<m-1, Ack<m, n-1>::value>::value;
};
template<unsigned long long n>
struct Ack<0, n> {
static const unsigned long long value = n+1;
};
template <unsigned long long m>
struct Ack<m, 0> {
static const unsigned long long value = Ack<m-1, 1>::value;
};
template <>
struct Ack<0, 0>
{
static const unsigned long long value = 1;
};
0711デフォルトの名無しさん
2008/01/09(水) 20:31:57チューリング完全だという論文がある。
http://d.hatena.ne.jp/earth2001y/20060929/p2
0712デフォルトの名無しさん
2008/01/10(木) 01:24:42チューリングなんてまったく知らないんだけど、勉強した方がいいかな?(;´Д`)
0713デフォルトの名無しさん
2008/01/10(木) 02:04:310714デフォルトの名無しさん
2008/01/10(木) 02:05:070715デフォルトの名無しさん
2008/01/10(木) 02:06:470716デフォルトの名無しさん
2008/01/10(木) 02:08:280717デフォルトの名無しさん
2008/01/10(木) 02:17:03情報系出身だけど一切授業ではやってないよ。
http://ja.wikipedia.org/wiki/%E8%A8%88%E7%AE%97%E7%90%86%E8%AB%96
↑のページで授業で触れられたものはO記法くらいだなぁ。
0718デフォルトの名無しさん
2008/01/10(木) 02:34:460719712
2008/01/10(木) 03:32:480720デフォルトの名無しさん
2008/01/10(木) 04:50:29その時教科書使ってない.
センセのパワポだけ.
SIに就職後だけど,情報系出てるのに恥ずかしい.
いまさら何読めばいい?
英語は何とか問題ないと思うので英語の教科書でも.
次のレスでエロい人が読み物を列挙してくれる予定.
↓
0721デフォルトの名無しさん
2008/01/10(木) 07:01:000722デフォルトの名無しさん
2008/01/10(木) 09:13:400723デフォルトの名無しさん
2008/01/10(木) 09:26:340724デフォルトの名無しさん
2008/01/10(木) 09:27:460725デフォルトの名無しさん
2008/01/10(木) 15:31:050726デフォルトの名無しさん
2008/01/10(木) 16:00:310727デフォルトの名無しさん
2008/01/10(木) 18:32:540728デフォルトの名無しさん
2008/01/10(木) 20:44:36厨リング完全なレスだな
0729デフォルトの名無しさん
2008/01/10(木) 21:36:30誰がうまいことを(ry
0730デフォルトの名無しさん
2008/01/11(金) 00:09:56数学の記法つかってかいてない本とかあれば、だけど。
0731デフォルトの名無しさん
2008/01/11(金) 00:18:240732デフォルトの名無しさん
2008/01/11(金) 01:22:110733デフォルトの名無しさん
2008/01/17(木) 02:26:470734デフォルトの名無しさん
2008/01/17(木) 09:55:470735デフォルトの名無しさん
2008/01/17(木) 10:03:19いろいろ難しい問題があるらしい。
知らんけど
0736デフォルトの名無しさん
2008/01/17(木) 11:50:480737デフォルトの名無しさん
2008/01/17(木) 12:10:500738デフォルトの名無しさん
2008/01/17(木) 13:00:200739デフォルトの名無しさん
2008/01/17(木) 13:55:22一言で言えば、何で同一性を判定するのかという問題だね
0740デフォルトの名無しさん
2008/01/17(木) 20:19:030741デフォルトの名無しさん
2008/01/17(木) 21:33:070742デフォルトの名無しさん
2008/01/17(木) 22:29:020743デフォルトの名無しさん
2008/01/17(木) 22:41:210744デフォルトの名無しさん
2008/01/17(木) 23:02:530745デフォルトの名無しさん
2008/01/17(木) 23:07:46直接と、ネットワーク越しにとでアクセスする場合とかか?
0746デフォルトの名無しさん
2008/01/17(木) 23:47:530747デフォルトの名無しさん
2008/01/18(金) 00:02:150748デフォルトの名無しさん
2008/01/18(金) 00:16:03違う名前だろうがなんだろうが一字一句同じなら同一としていいはずだからな
0749デフォルトの名無しさん
2008/01/18(金) 00:17:23などでよく起きる。さらに内容はほぼ同じ(バージョン違い)とか考えだすときりがない。
0750デフォルトの名無しさん
2008/01/18(金) 00:20:26リンクされてる場合は、同一実体を指しているかもチェックする。
ただ、このあたりは環境依存な話が多く出てくるので
もう 「処理系定義」 でいいと思う。
0751デフォルトの名無しさん
2008/01/18(金) 00:31:000752デフォルトの名無しさん
2008/01/18(金) 00:31:060753デフォルトの名無しさん
2008/01/18(金) 00:31:460754デフォルトの名無しさん
2008/01/18(金) 00:53:370755デフォルトの名無しさん
2008/01/18(金) 00:56:320756デフォルトの名無しさん
2008/01/18(金) 03:04:14ワロタ
0757デフォルトの名無しさん
2008/01/18(金) 07:42:44#pragma once は同一ファイルの二度目以降のインクルードを無効にする。
ファイルの同一性判定の方法は処理系定義とする。
ファイル A の中で #pragma once が処理される前に #include があり、
その中でファイル A がインクルードされている場合、
#pragma once は効力を発揮しない。
#pragma once はファイル中に1カ所にしか出現してはいけない。
0758デフォルトの名無しさん
2008/01/18(金) 09:15:21ちょっとタイプ量は増えるけど、こう書くようにすればいいんじゃなかろうか。
従来のようにidを省略したら、
#pragma once(__FILE__)
みたいになって、ファイルの同一性の比較は処理系定義と妄想
0759デフォルトの名無しさん
2008/01/18(金) 09:19:30じゃだめなん?
0760デフォルトの名無しさん
2008/01/18(金) 09:38:45なんかの拍子に片方を編集したら、コンパイルとおらなくなる。
鬱陶しくないか。
0761デフォルトの名無しさん
2008/01/18(金) 09:41:35同一性はプログラマが定義することもできるし、コンパイラに任せることも出来る
0762デフォルトの名無しさん
2008/01/18(金) 10:10:440763デフォルトの名無しさん
2008/01/18(金) 10:12:15よく ifdef endif の対応関係がずれて
あわわわ〜ってなる(笑
0764デフォルトの名無しさん
2008/01/18(金) 10:55:05それは言語仕様でフォローすることではないな
0765デフォルトの名無しさん
2008/01/18(金) 12:13:46コンパイル通るようになったらなったで、
何からの拍子で、片方だけ、構造体の構成とか変更すると、
実行時に訳わかめなエラーになるんじゃねーの。
0766デフォルトの名無しさん
2008/01/18(金) 13:48:010767デフォルトの名無しさん
2008/01/18(金) 16:34:02仕様が固まる頃にはC++20くらいになってそうだけど。
0768デフォルトの名無しさん
2008/01/18(金) 20:45:370769デフォルトの名無しさん
2008/01/18(金) 20:46:29まぁそういう意見もあるよな.
しかし過去の遺産のことを考えると
プリプロセッサの挙動をもっと厳格に
規格化したうえで存続した方がいい.
0770デフォルトの名無しさん
2008/01/18(金) 20:46:380771デフォルトの名無しさん
2008/01/18(金) 21:01:08exportどころじゃないぞ、実装の手間が。
templateもconceptも、実装をヘッダでincludeすること前提だしな。
必要な情報を全部中間言語に書き出すとなると大変。
0772デフォルトの名無しさん
2008/01/19(土) 00:51:350773デフォルトの名無しさん
2008/01/19(土) 02:29:000774デフォルトの名無しさん
2008/01/19(土) 08:41:030775デフォルトの名無しさん
2008/01/19(土) 14:12:01なんつーか、Obj-Cのimportみたいのが欲しいんだよね。あれって多分開く前に同一性チェックをしてるでしょ。(#pragma onceもそうなのかな?)
0776デフォルトの名無しさん
2008/01/19(土) 14:16:09もしくは自分で破っちゃったりしててアアーッ
0777デフォルトの名無しさん
2008/01/19(土) 14:27:390778デフォルトの名無しさん
2008/01/19(土) 14:38:18#pragma once po-identifier_opt new-line
po-identifier:
identifier or
( identifier )
#pragma once は同一ファイルの二度目以降のインクルードを無効にする。
identifier が指定されている場合は、identifier が同一である場合に同一ファイルであると判定する。
identifier が指定されていない場合のファイルの同一性判定の方法は処理系定義とする。
ファイル A の中で #pragma once が処理される前に #include があり、
その中でファイル A がインクルードされている場合、
#pragma once は効力を発揮しない。
identifier の指定の無い、または同じ identifier を持つ #pragma once は、
ファイル中に1カ所にしか出現してはならない。
0779デフォルトの名無しさん
2008/01/21(月) 01:06:40http://mori.eco.to/
0780デフォルトの名無しさん
2008/01/21(月) 07:06:500781デフォルトの名無しさん
2008/01/21(月) 14:15:590782デフォルトの名無しさん
2008/01/21(月) 14:20:59お前のせいで!
0783デフォルトの名無しさん
2008/01/21(月) 15:40:53お前がハゲなのは親のせいだ。
0784デフォルトの名無しさん
2008/01/21(月) 15:56:560785デフォルトの名無しさん
2008/01/22(火) 14:41:57普通のC言語入門書っぽいな。
経験のあるプログラミング言語をわざわざ列挙してるのが何か笑える。
0786デフォルトの名無しさん
2008/01/22(火) 15:33:15寧ろ本人曰く、「世のCを教える立場の人間は押し並べてCを判っていない」とのことなんだから。
0787デフォルトの名無しさん
2008/01/22(火) 15:34:090788デフォルトの名無しさん
2008/01/22(火) 15:42:400789785
2008/01/22(火) 16:00:220790デフォルトの名無しさん
2008/01/22(火) 17:24:14ハゲや不本意な勃起を抑えてくれる事が医学的に証明されている。
0791デフォルトの名無しさん
2008/01/22(火) 23:32:49ありがとう。さっそく試してみるよ。
0792デフォルトの名無しさん
2008/01/22(火) 23:46:140793デフォルトの名無しさん
2008/01/29(火) 17:40:140794デフォルトの名無しさん
2008/01/29(火) 17:43:55俺の体で効果がない事は、俺の実体験により証明されている。
0795デフォルトの名無しさん
2008/01/29(火) 21:17:360796デフォルトの名無しさん
2008/02/06(水) 10:18:260797デフォルトの名無しさん
2008/02/06(水) 21:31:19decltypeは静的な型を表すんでしょうか
class Derived : public Base
{}
Base* pb = new Derived();
std::cout << typeid(decltype(pb)).name(); //Baseと表示?Derived?
0798デフォルトの名無しさん
2008/02/06(水) 21:32:400799デフォルトの名無しさん
2008/02/06(水) 21:48:43ありがとうございます
実際に試せればわかるのに・・・
と思ったらconcept gccなんてのがあるんですね
ちょっと遊んでみます
0800デフォルトの名無しさん
2008/02/06(水) 22:34:070801デフォルトの名無しさん
2008/02/08(金) 17:25:38C++0xでこれら演算子をグローバルに定義できるみたいですが、
どういう意図で導入したんでしょうか
0802デフォルトの名無しさん
2008/02/08(金) 21:54:050803デフォルトの名無しさん
2008/02/10(日) 14:30:08例えばN1377には右辺値を左辺値に変換する関数moveが載っているが、
template <class T> inline T&& move(T&& x)
{ return static_cast<T&&>(x); }
moveを使った次のような(自然な)コードは動かない。
void foo(move_ptr<Bar> &d, move_ptr<Bar> &s) {
(何か例外を投げる可能性がある処理)
d = move(s); // 処理に成功したらsをdに移す
}
N1377やN1385で導入している型推論のルールによると、
Tはmove_ptr<Bar>ではなくmove_ptr<Bar> &になる。
するとmoveはmove_ptr<Bar> & &&型、つまりmove_ptr<Bar> &型を返すことになる。
上のような処理をしたければ、次のように直接static_castするしかない。
d = static_cast<move_ptr<Bar> &&>(s);
0804デフォルトの名無しさん
2008/02/10(日) 14:43:44compressed_pair<T1, T2>::compressed_pair(compressed_pair&& x)
: first_ (static_cast<T1&&>(x.first_)),
second_(static_cast<T2&&>(x.second_))
{}
が、そもそもpairのような値型オブジェクトが参照をメンバに持つこと自体
かなり特殊なことなんだから、こういうのはcall_traitsで処理すべきだろう。
0805デフォルトの名無しさん
2008/02/10(日) 14:46:40struct c
{
c& operator =(c&&);
private:
// c& operator =(c const&);
};
template <class T> inline T&& move(T&& x) { return static_cast<T&&>(x); }
void f(c& x, c& y)
{
x = move(y);
}
また、N1690ではこのmoveの戻り値の型が
typename remove_reference<T>::type&&になっている。
これなら、上のコメントアウトを外した状態でもコンパイルできた。
0806デフォルトの名無しさん
2008/02/10(日) 16:31:07最新の draft などでは>>805さんの書かれているように
move の定義が変わっているので,単に d = move(s) の構文で大丈夫なはずです.
>>804
そのように参照型を取る事例への対処を
より汎化した規則で書こうとした結果が,
現在の reference collapsing rule じゃないんでしょうか?
0807デフォルトの名無しさん
2008/02/10(日) 16:43:41あと,複数引数などの forwarding を pair や tuple の形で行おうとすると,
普通に pair や tuple が参照型のメンバを持つ場面はあるように思われます.
そのような場合に,現在の reference collapsing rule だと
pair<T1&,T2&&> && や pair<T1&,T2&&> & に対して自然に collapsing rule を分配して
pair<T1&,T2&&> や pair<T1&,T2&> と同等に捉えられますので
割と自然なように思えます.
0808803
2008/02/10(日) 16:57:18compressed pairはおまけ的な例で、真の目的は
template <class T>
inline T&& forward(typename identity<T>::type&& t)
{ return t; }
template <class T, class A1, class A2>
shared_ptr<T> factory(A1&& a1, A2&& a2)
{ return shared_ptr<T>(new T(forward<A1>(a1), forward<A2>(a2))); }
のような転送を実現することみたいだね。
でも、だからといってT & && = T &のような直観に反する変換や
C++98の考え方と全く違う異様な型推論を導入するのはどうかと思う。
今まで型推論でさんざん苦しんだのに、またバグの温床を生むことになる。
もっと明示的に、「右辺値か左辺値か教えてくれ」という演算子「&?」を導入して、
template <class T, class A1, class A2>
shared_ptr<T> factory(A1&? a1, A2&? a2)
{ return shared_ptr<T>(new T(static_cast<A1>(a1), static_cast<A2>(a2))); }
と書ければ、プログラマの意図もはっきりするしC++98から大きく離れることもない。
0809803
2008/02/10(日) 17:01:20参照型のメンバを持つpairだのtupleだのは、
代入演算子を持たなかったりswapが参照先を入れ換えちゃったりするわけで、
そういうものを「自然」に扱える必要はないでしょう。
0810デフォルトの名無しさん
2008/02/10(日) 17:08:36>C++98の考え方と全く違う異様な型推論
右辺値参照型をパラメタとする関数テンプレートの型パラメタの推論に関して
言及されてるならそれは同意します.もう
template<class T> void f(T&&);
の形は perfect forwarding のため (だけ) にあると理解したほうが早いと思います.
0811デフォルトの名無しさん
2008/02/10(日) 17:21:37参照型のメンバを持つ pair/tuple における代入や swap の semantics がどうなるかは
従来から散々議論されているのは承知しています.
結論が出ているかどうかは知らないのですが.
ただ,自分は forwarding などの局面で参照型メンバを持つ pair/ tuple を使うこと
想定してそういうものは自然に扱いたいという趣旨で発言しました.
誤解があるとあれなので補足しておきたいのですが,
tuple<T1,...> はあらゆる型 T1, ... に対して代入や swap が
well-defined である必要はなく, T1, ... に対してどういう操作が行えるかによって
tuple<T1,...> に対して行える操作が限定される場面があっても構わないと思っています.
そうしたときに,たとえば T1,... の一部またはすべてが参照型であるとき,
tuple<T1,...> に対して値としての代入や swap を well-defined な形で提供するのは難しいですが,
たとえば construction などは依然 well-defined に定義できますから,
construction などしか行えない tuple を提供することはできます.
で,そのような制限のかかった tuple でも forwarding などには十分使えますので
それを自然に扱いたいという motivation は排除してほしくないです.
0812デフォルトの名無しさん
2008/02/10(日) 18:36:300813デフォルトの名無しさん
2008/02/10(日) 19:07:340x の改修って一般のC++プログラマに受け入れられるのか?
なんか、実用する人たちから遊離した規格のような気が・・・
0814デフォルトの名無しさん
2008/02/10(日) 19:16:39そんなに大変な非互換性は取り込まれないと思うから、一般のプログラマは現状の
規格に不満がなければ気にしなくてもいいでしょ。
受け入れられるかどうかっていう点では、規格の変更に対応するかどうかという話で
コンパイラベンダの反応が問題だと思う。
0815803
2008/02/10(日) 19:30:15それを言い出したら、参照型メンバを持つpair/tupleにoperator=を定義したいとき
T & && = T &&になっていれば
mypair &operator=(const mypair &src)
{ first = src.first; second = src.second; return *this; }
mypair &operator=(mypair &&src);
{ first = static_cast<T1&&>(src.first); second = static_cast<T2&&>(src.second); return *this; }
というふうに「自然に」定義できるよね、という議論もできる。
で、結局mypair<int, int>がPODになって欲しいという理由で
何らかのtraitsが必要になる、と。
0816デフォルトの名無しさん
2008/02/10(日) 19:37:26使ってる側からはあんまり気にしなくてもメリットはあると思う。
あと、この辺のおまじないは std::forward とか、std::move とかの裏側に隠されるし。
>808
>でも、だからといってT & && = T &のような直観に反する変換や
どうなるのが望ましい?
その辺をおいといても、&? の方が明快なのはそう思う(これ static_cast も必要なくね?)。
やってること自体は今の && の反転みたいなものだし、ルール的にも決めるのはそう難しくなさそう。
欠点は &? が増えるってことだけかな?
今更無理だろうけど誰か提案書いてくれw
0817803
2008/02/10(日) 19:51:49型の一番右側に&&が付いていれば、オブジェクトを移動してほしくて
わざわざ&&を付けたんだから素直に言うことを聞いて欲しい、と思う。
逆にT && &は(出現する場面を思い付かないけど)T &になってほしい。
> (これ static_cast も必要なくね?)。
{ return shared_ptr<T>(new T(static_cast<A1>(a1), static_cast<A2>(a2))); }
のこと?a1, a2という名前が付いた時点で左辺値になってるからstatic_castは必要。
0818811
2008/02/10(日) 20:08:33>mypair &operator=(mypair &&src);
>{ first = static_cast<T1&&>(src.first); second = static_cast<T2&&>(src.second); return *this; }
T & && -> T && という collapsing rule を仮定したときに,
これがどういう意味で自然なのかいまいち理解できないです.
おそらく
template<class T1,class T2> class mypair{ T1 first; T2 second; ... };
という定義だと思うのですが,
mypair のT1 が左辺値参照型であるとき,
T & && -> T && という collapsing rule の下では
first = static_cast<T1&&>(src.first);
という構文が破壊的コピー (move) を呼ぶことになりますが,
src.first は名前の付いた他のオブジェクトを指しているため,これはまずくないですか?
0819デフォルトの名無しさん
2008/02/10(日) 20:46:28いま問題になっている右辺値参照。
それによってもたらされる一般的なムーブ・セマンティクスは、
例えば関数の戻り値や、vectorで内部バッファリサイズ時の移動などといったときに
無駄なコピーの削減に役立つ。
#もちろんそれだけにとどまらないけど、それはとりあえず置いておく。
0820デフォルトの名無しさん
2008/02/10(日) 20:53:55ライブラリの中の人が頑張るために使うから、
気付かぬ内に恩恵を被るかもしれないよってこと。
0821デフォルトの名無しさん
2008/02/10(日) 21:12:29T&&のオーバーロード足すだけでいいのかな
0822803
2008/02/10(日) 21:23:32mypair &operator=(const mypair &src);
mypair &operator=(mypair &&src);
という一般的なオーバーロードを前提にすれば、
後者が呼ばれるのは故意にmoveする場合に限られる。
だから名前の付いた他のオブジェクトをmoveして正解。
0823803
2008/02/10(日) 21:26:48後者の方にマッチしちゃう。これは確かにまずい。
0824デフォルトの名無しさん
2008/02/10(日) 21:53:550825デフォルトの名無しさん
2008/02/10(日) 23:36:370826デフォルトの名無しさん
2008/02/21(木) 00:24:55【C++】STL(Standard Template Library)相談室 8
http://pc11.2ch.net/test/read.cgi/tech/1198435319/843
でオーバーロード面倒という声があったけど、場合によってはこんな風にできるかも。
Widget func(const Widget&, const Widget&, const Widget&); // move しない
// helper 実際には Variadic template 化?
template<typename T0, typename T1, typename T2>
Widget&& select(T0&& t0, T1&& t1, T2&& t2, std::enable_if<!std::lvalue_reference<T0>::value || !std::lvalue_reference<T1>::value || !std::lvalue_reference<T2>::value>>::type *dummy = 0)
{
return !std::is_lvalue_reference<T0>::value ? std::move(t0) : !std::is_lvalue_reference<T1>::value ? std::move(t1) : std::move(t2);
}
template<typename T0, typename T1, typename T2>
Widget&& func(T0&& t0, T1&& t1, T2&& t2)
{
Widget& w = select(std::forward<T0>(t0), std::forward<T1>(t1), std::forward<T2>(t2));
// w に対する処理
return std::move(w);
}
あんま自信ないけどどうだろ?
0827デフォルトの名無しさん
2008/02/21(木) 00:39:30いいのかなあと思った。
0828デフォルトの名無しさん
2008/02/21(木) 00:52:27func の return 文の std::move は不要では?
>>827
move constructor は副作用を持つでしょうから
これを参照で返すのと同じにまで最適化するのは結構厳しい要求かと
0829デフォルトの名無しさん
2008/02/21(木) 00:55:27それが嫌ならオーバーロードしろ、ということか。
0830デフォルトの名無しさん
2008/02/21(木) 01:01:51そこまでシビアに move が重くなる状況はあまりないとは自分も思うのですけれど.
ただ std::string においては,例えば短文字列最適化を採用していると
move を使っても内部の文字列のコピーが発生するので,
4つのオーバーロードをまともに書く意義はあるのかなぁ,と.
それに4つのうち2つは他の実装に forward すればよいだけですし
そこまでオーバーロードが苦になることもないかと.
0831デフォルトの名無しさん
2008/02/21(木) 01:14:220832デフォルトの名無しさん
2008/02/21(木) 02:31:490833デフォルトの名無しさん
2008/02/21(木) 19:43:22右辺値参照なんてものを導入するより、
右辺値→左辺値 変換演算子を導入した方がいいと思う。
どうせ戻り値はテンポラリオブジェクトとして作成されてて、
基本型でもなければ大抵メモリ上にあるわけで、
内部的には変換なんて行う必要はないはず。
基本型とかなら、テンポラリオブジェクトを作成して、
そのテンポラリオブジェクトへの参照を返せばいい。
const 参照へならここら辺勝手にやってくれるけど、
非 const 参照へもできる手段を与えてやるって感じ?
自動的に変換されるのはおそらくマズそうなんで、
キャスト演算子の導入でなんとか。
0834デフォルトの名無しさん
2008/02/22(金) 02:09:341、SingleInt型かByte型を導入してくれ。。。
char型はiostreamで文字として解釈されてすごい不便。俺は文字じゃなくて1バイトの数字を書き込みたいんだ。。。
バイナリ指定してるはずなんだけどなぁ。@VC
2、Enumの名前ちゃんと考慮してクレイ。名前何のために付けてるんだか。。。
2種のEnum宣言したときの別々なのにメンバの多重定義できなくてメチャクチャ不便だ。
片方に宣言してもう片方に設定しようとすると型変換エラーでるし。
ゲームでステータス設定するときEnum重宝するんだがなぁ。
0835デフォルトの名無しさん
2008/02/22(金) 02:14:32enumにスコープがつくはず
0836デフォルトの名無しさん
2008/02/22(金) 04:11:220837デフォルトの名無しさん
2008/02/22(金) 13:06:58みんなbasic_istream/basic_ostreamに対するoprator >>/operator <<が定義されている。
0838デフォルトの名無しさん
2008/02/22(金) 14:01:38ios::binaryってことじゃなくて?
0839デフォルトの名無しさん
2008/02/22(金) 17:09:44おぉ、ありがたい。
>>834
一応yってみたけど、なんか意図どおりにならなかったなぁ。
自分の不具合かもしれんが。。。
0841デフォルトの名無しさん
2008/02/22(金) 18:14:500842デフォルトの名無しさん
2008/02/22(金) 19:42:000843デフォルトの名無しさん
2008/02/22(金) 19:55:46T& lvalue_cast(const T& rvalue)
{
return const_cast<T&>(rvalue);
}
何だ。今の C++ でも書けるじゃないか。
当然文をまたいで使う事はできないが、
move semantics なんて無くてもいいんじゃないか?
0844デフォルトの名無しさん
2008/02/22(金) 21:30:21ムーブとコピーの区別が付けられなくないか?
0845デフォルトの名無しさん
2008/02/22(金) 23:12:30引数は const 参照だが、
あくまでこれはテンポラリオブジェクトを作成するためのものであって、
引数には左辺値を渡してはいけない。
あくまで右辺値を左辺値に変換する際にしか使わない。
さらにメタプロ駆使すれば左辺値を禁止することもできるかもしれない?
0846デフォルトの名無しさん
2008/02/22(金) 23:17:36別に左辺値を渡してもいいのか。
単にそれがそのまま返されるだけで。
const な左辺値を渡してはいけない、だな。
0847デフォルトの名無しさん
2008/02/22(金) 23:26:40ごめんわからない。例えばこういう区別はどうなるの?
class Hoge
{
public:
Hoge(const Hoge&);
Hoge(Hoge&&);
};
Hoge f();
Hoge x;
Hoge y = x; //コピー
Hoge z = f(); //ムーブ
0848デフォルトの名無しさん
2008/02/22(金) 23:30:08>さらにメタプロ駆使すれば左辺値を禁止することもできるかもしれない?
やめたほうがよいです.左辺値と右辺値の識別を現行規格でやろうとすると
非常にわずらわしいことを考えないとならないです.
個人的に徹底的に試行錯誤した経験があるんですが,
現行規格で右辺値・左辺値識別を行うのは自分としては絶対にお勧めしません.
実際やってみれば理解してもらえると思うのですが,たとえばGCCの実装における
現行規格の8.5.3/5の解釈にブチ切れたりすることになったりします.
一応,下の提案さえ通ればライブラリレベルで move を実装することはできますが……
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
0849デフォルトの名無しさん
2008/02/22(金) 23:32:23欲しいのは、右辺値を参照にすることじゃなくて、ムーブセマンティクスそのもの。
class Hoge
{
public:
Hoge(const Hoge& y) : p(new int(*y.p)) {}
Hoge(Hoge&& y) : p(y.p) {y.p = 0;}
Hoge() : p(new int) {}
~Hoge() {delete p;}
private
int* p;
};
0850デフォルトの名無しさん
2008/02/22(金) 23:42:47俺の案は RVO されることを前提としてるから、
ムーブなんて無くても十分ということになる。
面倒くさいから RVO を規格で要求したら? とさえ思ってる。
0851デフォルトの名無しさん
2008/02/22(金) 23:48:40識別は難しいのか・・・。
0852デフォルトの名無しさん
2008/02/22(金) 23:51:55でもそれだとbindなんかで呼出時に右辺値を直に引数にできないのは
解決できないように見える。
lvalue_castがあるって言うのかもしれないけど、
それだったら今でもboost::crefを使えば引数に渡せる点で同じと思う。
0853デフォルトの名無しさん
2008/02/22(金) 23:54:11&& を単項演算子として、それを頭に付けるとかいう言語拡張でも。
0854デフォルトの名無しさん
2008/02/23(土) 00:14:352つの関数を実装させる手間、
いや、複数引数があれば4つ、8つと指数関数的に増えていく手間がかかってしまうのは
かなりの問題だと思う。
右辺値参照を導入するとしても、
オーバーロード不要の代替案は用意した方が良さげ。
0855デフォルトの名無しさん
2008/02/23(土) 00:18:34意図しない呼び出しを SFINAE と deleted function 宣言で阻止してしまえば
いいんじゃないですかね
具体的にどういう複数引数関数書きたいのかによりますけれど
0856デフォルトの名無しさん
2008/02/23(土) 00:23:02使う必要の無いところでなるべく使いたくはない。
0857デフォルトの名無しさん
2008/02/23(土) 00:24:310858デフォルトの名無しさん
2008/02/23(土) 00:27:29RVO みたいな最適化もできなさそうなのがな。
pimpl 使えばポインタの移動だけでいいから
まあ大したコストでもないのかもしれないが・・・。
0859デフォルトの名無しさん
2008/02/23(土) 00:33:330860デフォルトの名無しさん
2008/02/23(土) 00:46:03いらぬお世話って思ってる人もいるかもね。
0861デフォルトの名無しさん
2008/02/23(土) 00:48:30pimplでなくとも、ポインタくらいのやり取りですむ(深いコピーが発生しない)
ってのがムーブの売りだろ。
0862デフォルトの名無しさん
2008/02/23(土) 00:49:19非0は0には敵わない。
0863デフォルトの名無しさん
2008/02/23(土) 00:51:021つ1つはポインタくらいのやり取りでも、
個数が増えるとバカになんないかもしんない。
0864デフォルトの名無しさん
2008/02/23(土) 00:59:18RVO が適用できる場面では依然 RVO が適用されるでしょうから,
たとえば>>858さんが何を問題にされているのかいまいち把握できていないんですが……
もう少し詳しく教えてもらえると個人的にはうれしいんですが.
0865デフォルトの名無しさん
2008/02/23(土) 01:02:44$ conceptg++ t.cpp && ./a
constructor: 0x22ccd0
destructor: 0x22ccd0
#include <iostream>
using std::cout;
using std::endl;
struct hoge
{
hoge() : p(new int) {cout << "constructor: " << this << endl;}
hoge(hoge&& r) : p(r.p) {cout << "move constructor: from " << &r << " to " << this << endl; r.p = 0;}
~hoge() {cout << "destructor: " << this << endl; delete p;}
private:
hoge(hoge const&); //今回使わないので
int* p;
};
hoge f()
{
hoge obj;
return obj;
}
int main()
{
hoge t = f();
}
0866デフォルトの名無しさん
2008/02/23(土) 01:04:02文法を複雑にし、コストを必要とし、ライブラリを大きく書き換える
move とやらを導入する積極的な理由はないんじゃないの?
という話。
0867デフォルトの名無しさん
2008/02/23(土) 01:05:26コンパイラの実装コストの問題?
0868デフォルトの名無しさん
2008/02/23(土) 01:16:45関数からの戻り値のコピーを排除するのは move の応用の1つに過ぎないです.
RVO は return と throw に限定された話ですけれど,
move はより広い文脈 (たとえば std::vector におけるバッファの再配置) でも
きわめて重要な意義を持つ操作で,これは RVO 云々では取り扱いきれないように思います.
それから
>コストを必要とし、
の部分は,上にもありますけれど, RVO が適用できてコストがかからない部分では
move が導入されても依然 RVO が適用されてコストがかからないようになると
思われますので, (ただし,これはあくまでコンパイラの実装如何ですが)
RVO と move を比較してどのコストを憂慮されているのかがちょっと理解できていないです.
0870デフォルトの名無しさん
2008/02/23(土) 01:20:150871デフォルトの名無しさん
2008/02/23(土) 01:21:01それが lvalue_cast じゃないの?
0872デフォルトの名無しさん
2008/02/23(土) 02:02:070873デフォルトの名無しさん
2008/02/23(土) 02:22:090874デフォルトの名無しさん
2008/02/23(土) 04:42:12「まとも」とか変な基準を持ち出すなよ。
0875デフォルトの名無しさん
2008/02/23(土) 05:25:18move 系コンストラクタや代入演算子が自動生成されないなら、要らないと思うんだけど、
こいつらもコンパイラが勝手に作っちゃうの?
0876デフォルトの名無しさん
2008/02/23(土) 10:52:20の途中で例外が起こった場合、sとdの状態はどうなるんだろうか?
std::vectorの再配置にしても例外安全の強い保証
(メソッドの途中で例外が発生してもオブジェクトの状態は以前と同じ)
を行うなら、結局
1、新しいバッファを確保
2、それにすべてのオブジェクト内容をコピー
3、バッファ作成に成功したら、ポインタの挿げ替えを行う
4、古いバッファの削除
という手順を踏む必要があるんだけど・・・
1、新しいバッファを確保
2、オブジェクト内容をmoveで移動
3、ポインタの挿げ替え&古いバッファの削除
とやってしまうと2の途中で例外が発生したときまずいことにならないか?
0877デフォルトの名無しさん
2008/02/23(土) 11:38:090878デフォルトの名無しさん
2008/02/23(土) 13:14:28いえ,今の提案では move constructor や
move assignment は自動では生成されないことになってます.
>>876
move で強い例外安全性の保証を行おうとすると, move の rollback 操作が
move そのもので,これが例外非送出でなければならないため,
結局 move 自身が例外非送出である必要が出てきます.
0879デフォルトの名無しさん
2008/02/27(水) 10:58:47ライブラリ作成側が守るべきプログラミングモデルをユーザに示さないからだよ。
コードから読み取れるモデルでなく、
モデル宣言をするべきなんだよ。
その完全性を支援するためにコンパイラがそれによって挙動を変えてもいい。
最初は完全なるOOを実現しているように見えた。
しかし、あるバージョンではマルチパラダイムに変身し
OOの完全性を崩壊させるとかNe-Yo。
0880デフォルトの名無しさん
2008/02/27(水) 14:10:39未だにドラフトにも載ってないんだけど。っていうか 2003 の改訂で入らなかったのはなぜ?
0881デフォルトの名無しさん
2008/02/27(水) 15:57:01禿がまた忘れたんだろ
0882デフォルトの名無しさん
2008/02/27(水) 19:25:260883デフォルトの名無しさん
2008/02/27(水) 22:25:33どっちかというとOOの世界に土足で上がり込もうとした
総称型プログラミングの要素の側が勝手に苦労してるだけに見える。
継承使ったら型推論できませんとか暗黙のキャストができませんとか。
マルチパラダイムになってOOサイドで何か問題起きてる?
むしろコンテナみたいな値系オブジェクトを下のレイヤに追い出すことで、
OOを純化できると思うんだけど。
0884デフォルトの名無しさん
2008/02/27(水) 22:46:38一言で言えば「宗旨が違う」
0885デフォルトの名無しさん
2008/02/28(木) 00:09:21という構図がある。
つまり、そのときOOが成立するコードという理由で
OO前提のコードを書いてしまうと
将来OO否定派が紛れ込んだときに混乱の元になるということ。
0886デフォルトの名無しさん
2008/02/28(木) 00:10:533回読んだけど意味が判らん
0887デフォルトの名無しさん
2008/02/28(木) 01:37:540888デフォルトの名無しさん
2008/02/28(木) 08:12:14OOはC++自身に拒否されていると分かる
禿げ涙目である
0889デフォルトの名無しさん
2008/02/28(木) 08:25:52勝利したいんだろ
ほっとこうぜ
0890デフォルトの名無しさん
2008/02/28(木) 11:55:410891デフォルトの名無しさん
2008/02/28(木) 12:44:180892デフォルトの名無しさん
2008/02/29(金) 00:48:00今更何を言ってるんだ
0893デフォルトの名無しさん
2008/02/29(金) 01:03:24馬鹿にされるから他では言わないほうがいいよ、その脳内C++ヒストリー。
0894デフォルトの名無しさん
2008/02/29(金) 02:19:46じゃあこのC++と呼ばれる雑多にぶち込まれた大量の機能が
お互いひどい副作用を起こし合ってるグチャグチャ言語は
一体どんな高尚な理念で作られたものなんですか
0895デフォルトの名無しさん
2008/02/29(金) 02:32:470896デフォルトの名無しさん
2008/02/29(金) 03:18:540897デフォルトの名無しさん
2008/02/29(金) 03:54:17JavaやRubyなんかと違って、ここまで基本的な部分から整合性の練られた言語は他にない。
多くの機能は基本的な構文から基本的に導出されるが、JavaやRubyはそれらのプロセスを
すっ飛ばして機能が実装されている事が多く、とても自由と小回りの利く言語じゃない。
0898デフォルトの名無しさん
2008/02/29(金) 04:25:57Rubyは話にならない。現実よりも白昼夢のほうが大事な、言語オタの妄想の産物。
前線には一切出ず、安全地帯で仲間とダベりながら延々「クールな匍匐前進」を模索してる兵士が、
「俺はこの最高の匍匐前進でこの戦争を生き抜いてるんだ」って真顔で言い張ってるみたいな言語。役立たず。
0899デフォルトの名無しさん
2008/02/29(金) 05:02:140900デフォルトの名無しさん
2008/02/29(金) 05:27:54規格ドラフトを読むような人が集まってんだからさ。
0901デフォルトの名無しさん
2008/02/29(金) 09:52:560902デフォルトの名無しさん
2008/02/29(金) 10:34:26具体的にどのようなひどい副作用があったのか聞きたいんだが
0903デフォルトの名無しさん
2008/02/29(金) 10:41:11妄想を聞きたいならせめてマ板でやってくれ。
0904デフォルトの名無しさん
2008/02/29(金) 11:34:160905デフォルトの名無しさん
2008/02/29(金) 12:28:110906デフォルトの名無しさん
2008/02/29(金) 13:20:10ここで文章の素人達に不完全で不足の多い文章を書かせて、それに向かって
そんなの信念があるうちに入らない、適当でしかない、と言って初期設定を維持するつもりなのでは。
0907デフォルトの名無しさん
2008/02/29(金) 14:21:08初心者にはそれがわからんのです。
0908デフォルトの名無しさん
2008/02/29(金) 17:53:25機能を作るたびに別の目的に悪用されて、同じような機能を何度も付け足す羽目になったり
無節操に記号に新しい意味を与えまくってパースを複雑怪奇にしたり
わざとミスさせようとしてるとしか思えませんが
0909デフォルトの名無しさん
2008/02/29(金) 17:55:110910デフォルトの名無しさん
2008/02/29(金) 18:06:13どれだけの脳内パーサが誤作動してると思う?
includeで使ってるからってなんも考えずにプリプロセッサの世界からコンパイラの世界に
持ち込んだバカのせいじゃないか
違うか
0911デフォルトの名無しさん
2008/02/29(金) 18:08:29無知でなくなるための行動を起こすべきだろうね。既に本も薦められているのだし。
「何故それはそうでなければならなかったのか」という話に関して、
C++ほどシリアスでプラグマティックな内容盛り沢山の言語もそうは無い。
他の言語が「だってそのほうがきれいなんだもん」くらいの理由で決めちゃうところでも、
C++は「現実」を相手に、全然別の戦いをし続けてきたからな。
今の君の頭からは、>>892を裏付ける話は一切出てこないから、マシな頭になる努力をまずしよう。
0912デフォルトの名無しさん
2008/02/29(金) 18:11:01考えの跡をしこたま記した本をこわがってるスレはここですね
0913デフォルトの名無しさん
2008/02/29(金) 18:15:41例えばstaticという語がバラバラのまったく違う4つの意味を持っていた方がよいと考えた理由教えて
その本に書いてあるんだろ
0914デフォルトの名無しさん
2008/02/29(金) 18:21:400915デフォルトの名無しさん
2008/02/29(金) 19:09:57Javaやスクリプト言語は「現場の実情」に応える方向で発展したけど、
C++はそれ以前に「数学的現実」に足をすくわれ続けているような。
slice_arrayが動かないとかvector<bool>がコンテナじゃないとか。
テンプレートなんて、パースできなくてtypenameキーワードなんてものが
必要になった時点で常識的には破綻したというべきだし、
チューリング完全性が明らかになった時点でもう一度破綻している。
こうなるくらいだったらC++コンパイラにMLインタプリタでも組み込んだ方がマシ。
0916デフォルトの名無しさん
2008/02/29(金) 19:17:25残念ながら、無名名前空間でファイルスコープのstaticを排除して、
C++のstaticは静的メンバという意味しか持たないようになったという流れなんだが。
0917デフォルトの名無しさん
2008/02/29(金) 19:30:19>テンプレートなんて、パースできなくてtypenameキーワードなんてものが
>必要になった時点で常識的には破綻したというべきだし、
これは理解できるとして
>チューリング完全性が明らかになった時点でもう一度破綻している。
こっちはなぜ?
0918デフォルトの名無しさん
2008/02/29(金) 19:51:55C++ の利用者は喜んで便利に使ってるが、それはそいつらが悪趣味な
せいであって、断じてテンプレートの利便性を証明するものではない。
0919デフォルトの名無しさん
2008/02/29(金) 19:53:11ありとあらゆることに悪用できる万能の箱として用意されたものではないだろ
C++マニアはそれが嬉しいんだろうけど、やりたい放題出来ちゃうという意味ではgoto文と大して変わらん
メタプログラミングをさせたいのなら、最初からそれ用の仕組みを作るべきなんじゃないのか
0920デフォルトの名無しさん
2008/02/29(金) 19:59:20それって結局は自分らが加えた仕組みが何をもたらすのか、誰もわかってなかったってことじゃないの
あ、C++は全てにおいて考え抜かれた言語だから当然DnEには想定の範囲内だったと書いてあるんですよね
サーセン
0921デフォルトの名無しさん
2008/02/29(金) 19:59:29現物使用は避けるべき
STLを主軸に据える
0922デフォルトの名無しさん
2008/02/29(金) 19:59:49Javaのバイトコードは本来ポータビリティのためのものであって、直接バイトコードをいじって
なんでもできる万能の素材として用意されたものではないだろ
DI 信者はそれが嬉しいんだろうけど、やりたい放題出来ちゃうという意味ではアセンブラと大して変わらん
メタプログラミングをさせたいのなら、最初からそれ用の仕組みを作るべきなんじゃないのか
という状況と対比するとC++の方がまだ健全に思える。
0923デフォルトの名無しさん
2008/02/29(金) 20:02:05矛盾していないか?テンプレートとSTLとか。
0924デフォルトの名無しさん
2008/02/29(金) 20:05:36ラッパー = STL
0925デフォルトの名無しさん
2008/02/29(金) 20:05:38ごめん関係なかった
0926デフォルトの名無しさん
2008/02/29(金) 20:06:49Cのプリプロセッサでジェネリクス実現しちゃう人だっていたんだから、
C++でそれ用の構文を用意したのは一歩進化だろ。
C++0xでconstexprも用意されたし、さらに一歩前進してるじゃないか。
なんか技術与えられたら、想定外のことに使おうとするのはプログラマの悪い癖だと思うけど。
0927デフォルトの名無しさん
2008/02/29(金) 20:42:43>メタプログラミングをさせたいのなら、最初からそれ用の仕組みを作るべきなんじゃないのか
shiroさんも最近似たこと言ってたね。
ttp://reddit.com/info/62o9s/comments/
>Lispマクロを言語に入れない理由として、
>よく「文法が変わるから他人の書いたコードが読めなくなる」と言われますが、
>カンマ演算子をこんな使い方したらもう充分読めないでしょうってことです。
0928デフォルトの名無しさん
2008/02/29(金) 20:43:47> なんか技術与えられたら、想定外のことに使おうとするのはプログラマの悪い癖だと思うけど。
限界を試すのは重要と思われ。
ジャンボジェットのお披露目でバレルロールだっけ? やっちゃったテストパイロットみたいに。
それをプロダクトに積極的に使おうとかやりだすと、ちょwww だけど。
0929デフォルトの名無しさん
2008/02/29(金) 21:24:04ちょっと論点のずらし方が卑怯すぎて気持ち悪いなぁ、君は。
DnEが証明するのは、「何も考えていないわけではないこと」であって、「すべてを考えていたこと」ではないよ。
そして、少しでも「考えていたこと」があれば、>>892が馬鹿なことを言っていたことになるのを、忘れちゃダメだよ。
0930デフォルトの名無しさん
2008/02/29(金) 22:32:22そのための例外なのに。
0931デフォルトの名無しさん
2008/02/29(金) 22:39:450932デフォルトの名無しさん
2008/02/29(金) 22:40:480933デフォルトの名無しさん
2008/02/29(金) 22:59:390934デフォルトの名無しさん
2008/02/29(金) 23:07:04http://pc11.2ch.net/test/read.cgi/tech/1191754720/
0935デフォルトの名無しさん
2008/02/29(金) 23:11:43美少女中学生が顔を赤らめながら指の隙間からチラチラと覗くスレ
0936デフォルトの名無しさん
2008/02/29(金) 23:34:59恥ずかしがって指の隙間から顔を隠しつつ見なくてもいいだろ。
最近の子供は意識の根底に公私混同が見られて将来が危ぶまれるな。本当にしっかりしてほしい。
0937デフォルトの名無しさん
2008/03/01(土) 01:30:58あれは C++ 信者でない人にとっても、どのような方針で言語を拡張していくと
こういうトンでもないことになってしまうのかという様子が詳細に書いてある
という点で非常に勉強になりますよ。C++ スレで煽るためにも、
すぐ反論されないように基礎知識を磨いておくことも重要です。
まずは敵を知ることからです。
というわけで DnE 読んでから出直してください
0938デフォルトの名無しさん
2008/03/01(土) 02:04:380939デフォルトの名無しさん
2008/03/01(土) 02:33:450940デフォルトの名無しさん
2008/03/01(土) 02:35:39Hoge* p;
try{
p= new Hoge();
}catch(){
}
とかダサすぎる
pそこに置く意味ねぇだろと
0941デフォルトの名無しさん
2008/03/01(土) 03:29:56try{
Hoge* p = new Hoge();
}catch(){
}
仮に catch の中で p が見れたとして、 new Hoge() から例外が飛んだ場合は
p の初期化が済んでないわけだが、そんなものを見られるようにして何に使うの?
0942デフォルトの名無しさん
2008/03/01(土) 08:44:040943デフォルトの名無しさん
2008/03/01(土) 08:54:03スコープの差異による影響は?
0944デフォルトの名無しさん
2008/03/01(土) 09:59:010945デフォルトの名無しさん
2008/03/01(土) 10:10:340946デフォルトの名無しさん
2008/03/01(土) 10:32:560947デフォルトの名無しさん
2008/03/01(土) 18:00:250948デフォルトの名無しさん
2008/03/01(土) 18:36:380949デフォルトの名無しさん
2008/03/01(土) 19:54:460950デフォルトの名無しさん
2008/03/01(土) 19:55:59using {
Hoge* p = NULL;
} try {
p = new Hoge();
} catch(...) {
// p を使用
}
こうすればいい。
0951デフォルトの名無しさん
2008/03/01(土) 19:56:520952デフォルトの名無しさん
2008/03/01(土) 20:00:300953デフォルトの名無しさん
2008/03/01(土) 20:01:360954デフォルトの名無しさん
2008/03/01(土) 20:04:00m9(^Д^)プギャー
http://www.kijineko.co.jp/tech/superstitions/dont-throw-exception-from-constructor.html
0955デフォルトの名無しさん
2008/03/01(土) 20:04:100956952
2008/03/01(土) 20:05:550957デフォルトの名無しさん
2008/03/01(土) 20:09:170958デフォルトの名無しさん
2008/03/01(土) 20:10:34お前はたぶんオレと同じスレをみている
さぁガイドライン板に帰ろう
0959デフォルトの名無しさん
2008/03/01(土) 20:15:250960デフォルトの名無しさん
2008/03/01(土) 21:44:460961デフォルトの名無しさん
2008/03/02(日) 00:30:37切られている「比較的有名なサイト」ってこれだよね、たぶん。
C MAGAZINE - プログラミングの禁じ手Web版 C++編
ttp://www.cmagazine.jp/src/kinjite/cpp/
適当にうろうろして見たところ、参考にしている人がそれなりにいる様子。
初心者が鵜呑みにするとまずいことを広められるのは困るなー。
0962デフォルトの名無しさん
2008/03/02(日) 00:41:020963デフォルトの名無しさん
2008/03/02(日) 01:03:15いつまでもWeb上に残ってると勘違いするやつが後を絶たないと思うんだけど。
特にポインタのメンバが不定値になるとか、初期化子も知らないような書き方だし。
それともCマガの中の人は確信犯なんだろうか。
0964デフォルトの名無しさん
2008/03/02(日) 01:28:380965デフォルトの名無しさん
2008/03/02(日) 01:30:540966デフォルトの名無しさん
2008/03/02(日) 01:32:30糞ページ、糞本認定だけでいいじゃん。
それだって初心者スレでやるべき事だし。
>>963
初心者スレ行って教えて貰ってこい。
0967デフォルトの名無しさん
2008/03/02(日) 01:33:16初心者には使わせたくないな。
0968デフォルトの名無しさん
2008/03/02(日) 01:35:230969964
2008/03/02(日) 01:41:54Initialize()とかのメソッドを作ってるんだけど。
なんだ、じゃぁ俺もバンバン例外なげるようにするよ
0970デフォルトの名無しさん
2008/03/02(日) 01:51:53今までそう作ってきたなら、あえて変える必要は無いんじゃない。
問題なのは、「安全な処理のみでコンストラクタを実装していること」ではなく、
「安全でない処理に失敗したときに例外を投げないこと」なのだから。
0971デフォルトの名無しさん
2008/03/02(日) 01:53:180972デフォルトの名無しさん
2008/03/02(日) 08:25:210973デフォルトの名無しさん
2008/03/02(日) 10:47:13あるんだろうが。
0974デフォルトの名無しさん
2008/03/02(日) 15:29:11今となっては古臭い
0975デフォルトの名無しさん
2008/03/02(日) 22:02:27そのための初期化子リストだし。
0976デフォルトの名無しさん
2008/03/02(日) 22:16:51俺は中学生が最高だと思いますが。おっぱい
0977デフォルトの名無しさん
2008/03/04(火) 12:43:23手に付いたことはある
0978デフォルトの名無しさん
2008/03/04(火) 13:11:08懐かれたことはある。
0979デフォルトの名無しさん
2008/03/04(火) 22:05:290980デフォルトの名無しさん
2008/03/04(火) 22:33:520981デフォルトの名無しさん
2008/03/05(水) 00:10:090982デフォルトの名無しさん
2008/03/05(水) 00:14:590983デフォルトの名無しさん
2008/03/05(水) 00:15:30そして、34進数以上のどの進数だろうが、
0x は 33 になる。
X と x を使い分けるとなってくると話は変わってくるが・・・。
0984デフォルトの名無しさん
2008/03/05(水) 00:28:380985デフォルトの名無しさん
2008/03/05(水) 00:29:500986デフォルトの名無しさん
2008/03/05(水) 01:40:310987デフォルトの名無しさん
2008/03/05(水) 22:48:080988デフォルトの名無しさん
2008/03/06(木) 00:17:30ってもうスレで話題になってた?
0989デフォルトの名無しさん
2008/03/06(木) 00:28:570990デフォルトの名無しさん
2008/03/06(木) 01:04:52この提案とconceptの関係がワカランのだが?
0991デフォルトの名無しさん
2008/03/06(木) 21:30:06C++0x 3
The C++ Standards Committee
ttp://www.open-std.org/jtc1/sc22/wg21/
C++0x
http://pc11.2ch.net/test/read.cgi/tech/1149440647/
C++0x 2
http://pc11.2ch.net/test/read.cgi/tech/1191842951/
0992デフォルトの名無しさん
2008/03/06(木) 21:32:13C++0x Part2
http://pc11.2ch.net/test/read.cgi/tech/1191754720/
0993デフォルトの名無しさん
2008/03/06(木) 21:33:560994デフォルトの名無しさん
2008/03/06(木) 21:55:07http://pc11.2ch.net/test/read.cgi/tech/1204808027/
たてますた
なんとなくwikiのリンクを貼ってみた
0995デフォルトの名無しさん
2008/03/06(木) 21:56:140996デフォルトの名無しさん
2008/03/07(金) 05:06:410997デフォルトの名無しさん
2008/03/07(金) 05:07:070998デフォルトの名無しさん
2008/03/07(金) 05:09:100999デフォルトの名無しさん
2008/03/07(金) 05:09:361000小倉優子 ◆YUKOH0W58Q
2008/03/07(金) 05:09:5610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。