C++相談室 part97

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part96
http://toro.2ch.net/test/read.cgi/tech/1341029267/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
2デフォルトの名無しさん:2012/07/29(日) 19:55:09.93
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://en.cppreference.com/w/cpp (英語)
 http://ja.cppreference.com/w/cpp (↑の日本語訳だけどまだ未完)
[Stroustrup]
 http://www2.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50372
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。
3デフォルトの名無しさん:2012/07/29(日) 19:55:44.26
4デフォルトの名無しさん:2012/07/29(日) 19:56:18.03
5デフォルトの名無しさん:2012/07/29(日) 19:56:52.04
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル'
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
6デフォルトの名無しさん:2012/07/29(日) 19:58:03.81
メモリ4GBで、別に困ってはいない
しかし、ずっと4GBでいい、とは思っていない
一応、8GBまで増やせるから、そのときが来たら8GB搭載させる

だが、現実問題として、4GBで困ってない
ぶっちゃけ2GBでも困らない

じゃあ、今のPCのメモリを2GBに減らせるのかと考えると、なんか減らしはしたくない

こうしてステマにハメられて、メモリは増加の一途をたどってきたのだ

だからこそ、あえての16GB搭載マシンを買う
それがチョイ悪オヤジの、「あえて」の外し方
7デフォルトの名無しさん:2012/07/29(日) 20:14:40.30
>>6
で?
8デフォルトの名無しさん:2012/07/29(日) 20:15:11.47
テンプレ貼り完了
9デフォルトの名無しさん:2012/07/29(日) 20:40:25.69
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
10デフォルトの名無しさん:2012/07/29(日) 21:15:46.55
仮想環境動かすとなると
メモリ2GBとかカツカツであり得ない
11デフォルトの名無しさん:2012/07/29(日) 21:18:25.15
office2000で書類つくったりIE5.5でネット見てるぐらいなら2GBで十分。
OSはWindows2000Professionalな
12デフォルトの名無しさん:2012/07/29(日) 21:51:24.50
>>10
仮装マシンがウィンドウズなら厳しいが、リナックスならわりと大丈夫
13デフォルトの名無しさん:2012/07/29(日) 21:55:28.99
Better Cで、別に困ってはいない
しかし、ずっとBetter Cでいい、とは思っていない
一応、C++03の仕様まで知ってるから、そのときが来たらC++03の機能まで使う

だが、現実問題として、Better Cで困ってない
ぶっちゃけCでも困らない

じゃあ、今後コードをCで書くかと考えると、なんか書きたくはない

こうしてステマにハメられて、言語機能増加をたどってきたのだ

だからこそ、あえてのC++11対応コンパイラオプションを使う
それがチョイ悪オヤジの、「あえて」の外し方
14デフォルトの名無しさん:2012/07/29(日) 22:09:29.62
Windows Meで、別に困ってはいない
しかし、ずっとWindows Meでいい、とは思っていない
一応、Windows XPまで更新できるから、そのときが来たらWindows XP搭載させる

だが、現実問題として、Windows Meで困ってない
ぶっちゃけWindows 98SEでも困らない

じゃあ、今のPCのOSをWindows 98SEに載せ替えるかと考えると、なんか載せ替えたくない

こうしてステマにハメられて、OSはバージョンアップの一途をたどってきたのだ

だからこそ、あえてのWindows Vista搭載マシンを買う
それがチョイ悪オヤジの、「あえて」の外し方
15デフォルトの名無しさん:2012/07/29(日) 22:21:01.34
==だけじゃなくて!=もオーバーライドしないとだめなの?
16デフォルトの名無しさん:2012/07/29(日) 22:23:30.35
#include<utility>にあるstd::utilty::re_opsをusing namespaceするなら==だけでいい

http://www.cplusplus.com/reference/std/utility/rel_ops/
17デフォルトの名無しさん:2012/07/29(日) 22:56:27.75
まじか
!=がなにをやっても真だから気が狂いそうだったわ
18デフォルトの名無しさん:2012/07/30(月) 09:52:40.83
vectorを継承しようとしたら、おばあちゃんに「やめなさい」と言われたんだけど
具体的には何がどういう理由でダメなの?
19デフォルトの名無しさん:2012/07/30(月) 09:54:42.06
お前のおねだりの仕方が下手だったんだろ
20デフォルトの名無しさん:2012/07/30(月) 10:37:06.87
>18
お前のばーちゃんハイスペックだな……
21デフォルトの名無しさん:2012/07/30(月) 11:13:28.11
22デフォルトの名無しさん:2012/07/30(月) 11:31:01.77
>>21
ありがとう
vectorを継承するなら、デストラクタを明示的に呼び出せばいいのね
23デフォルトの名無しさん:2012/07/30(月) 12:32:54.07
ん?それじゃ解決にならないような
問題は基本クラスのナマポでdeleteした場合、サブクラスのデストラクタが呼ばれないこと
動的削除子がサポートされているスマポを使えば問題ない
24デフォルトの名無しさん:2012/07/30(月) 12:47:23.70
vector<T>のポインタで削除しなければいいだけだから。
25デフォルトの名無しさん:2012/07/30(月) 14:08:19.24
継承して、かつ、親クラスの箱には収まらないようにできれば
克服できるってことじゃろうか
26デフォルトの名無しさん:2012/07/30(月) 14:46:14.19
C++でfcntl()ってどのヘッダ使うの?
cstdlibみたいなのある?
27デフォルトの名無しさん:2012/07/30(月) 15:01:51.32
それはOS依存ググレ
28デフォルトの名無しさん:2012/07/30(月) 15:13:37.71
>>18
仮想デストラクタがないという理由とか?
でもポインタ経由でないなら安心のような気も

というか>>21に書かれてた
29デフォルトの名無しさん:2012/07/30(月) 15:22:30.42
>>23
これは初めて知った
スマポ便利過ぎる

class A {
int* ip;
public:
A(int i = 0) : ip(new int[i]) {}
// virtual ~A() { delete[] ip; }
~A() { delete[] ip; }
};

class B : public A {
double *dp;
public:
B(int i = 0) : dp(new double[i]) {}
~B() { delete[] dp; }
};

int main()
{
A* ap = new B;
delete ap; // メモリリーク発生!

boost::shared_ptr<A> sap(new B); // 放置してもメモリリークは発生しない
}
30デフォルトの名無しさん:2012/07/30(月) 16:04:25.36
>>18
コンピュータおばあちゃんwww
31デフォルトの名無しさん:2012/07/30(月) 16:23:57.85
A *b=new B
をエラーにする方法ってある?
32デフォルトの名無しさん:2012/07/30(月) 16:30:11.99
継承しなければいい
33デフォルトの名無しさん:2012/07/30(月) 16:50:27.77
>>32
もう少しくやしく
34デフォルトの名無しさん:2012/07/30(月) 16:54:02.96
こんなやつに継承されるなんて……くやしいっ…!
35デフォルトの名無しさん:2012/07/30(月) 17:39:30.49
>>34
く、くそっ。笑ってしまったw くやしいっ…!
36デフォルトの名無しさん:2012/07/30(月) 19:52:33.15
>>31
protected継承
37デフォルトの名無しさん:2012/07/30(月) 20:15:44.53
>>36
ありがとう
これでvectorを継承してvector *a=new Bekutaをエラーに出来る
38デフォルトの名無しさん:2012/07/30(月) 20:35:21.97
private継承でええやん
39デフォルトの名無しさん:2012/07/30(月) 20:55:14.66
>>31
private継承
アクセス権の変更でstd::vectorにはキャストできないが、
std::vectorのフル機能をラッピング関数なしで公開できる。

struct Example:private std::vector<int>
{
  using std::vector<int>::push_front;
  using std::vector<int>::push_back;
  ・・・以下略・・・
};
ちなみにusingは省略可。なんでusingと書けるかはしらん。
40デフォルトの名無しさん:2012/07/30(月) 21:00:21.83
包含でええやん
41デフォルトの名無しさん:2012/07/30(月) 21:02:05.22
どっちがいいかな
やってみなくちゃわからない
42デフォルトの名無しさん:2012/07/30(月) 21:02:20.55
包含より権限の格上げの方が記述量すくないぞ。
オーバーロードの面倒見る必要ないからな
43デフォルトの名無しさん:2012/07/30(月) 22:03:51.36
>>39
省略するな
てか、using宣言とアクセス宣言を混同するな
44デフォルトの名無しさん:2012/07/30(月) 22:05:53.17
>>43
したら何が困るん?
45デフォルトの名無しさん:2012/07/30(月) 22:39:08.93
ランダムな文字列を作る関数ってstringに無かったっけか
見つからん。 気のせいだったかな。
46デフォルトの名無しさん:2012/07/30(月) 22:46:58.74
無いよ
47デフォルトの名無しさん:2012/07/30(月) 22:47:49.38
>>43
>using宣言とアクセス宣言を混同するな
???
48デフォルトの名無しさん:2012/07/30(月) 23:02:56.69
> ???
どうやら本気でわからんようだな
地味ながら右辺値参照と比肩する問題かも
49デフォルトの名無しさん:2012/07/30(月) 23:17:14.60
クラス及び構造体内で使用するusingって付けようが付けまいが
動作上は全く同じ仕様だよな
50デフォルトの名無しさん:2012/07/31(火) 00:45:57.61
>>48
右辺値参照が問題?
勘違いでないのなら、2つの問題をそれぞれ示してくれ。
51デフォルトの名無しさん:2012/07/31(火) 01:52:54.39
7月29日に行われた「脱原発」の抗議行動前に
日比谷公園で行われていた反日左翼たちの集会の様子
その後、この労組を中心とした反原発デモ行進が始まった。wwwww
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1478.jpg
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1479.jpg
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1494.jpg
これで、「多様な人たちが自由に何の制約もなく参加している」とか
「組織型の運動との違いを感じ…」などと良くも言えるものだ!


7月29日 国会包囲 反原発デモに参加された一般人???の方々wwwww

日大全共闘
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1540.jpg
芝工大全学闘&明大全共闘
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1542.jpg
アジア共闘●&三里塚闘争勝手連&日米軍事同盟反対 アジア米軍総撤収
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1547.jpg
9条の会
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1582.jpg
郵政労働者ユニオン
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1588.jpg
芸大教組
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1600.jpg
緑の党
http://blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/DSCN1603.jpg
ピースボート (社民党&北朝鮮)
http://i.imgur.com/lY0nX.jpg
http://mamorenihon.files.wordpress.com/2011/05/peaceboat.jpg

今話題の滋賀県教組
http://takemikazuchi.iza.ne.jp/images/user/20120723/1875097.jpg
52デフォルトの名無しさん:2012/07/31(火) 02:03:49.84
>>40
Semper fi! Do or die!

private継承って便利やね
53デフォルトの名無しさん:2012/07/31(火) 02:59:36.72
shared_ptrの動的削除子とweak_ptrとshared_from_thisはそうとう強力だよな。

これだけのためにboostをいますぐ入れるべき。
54デフォルトの名無しさん:2012/07/31(火) 04:25:37.14
c#なら、んな面倒ないのになぁ
55デフォルトの名無しさん:2012/07/31(火) 04:30:23.70
C#でもリソースは扱うだろ
そこらへんは変わらんよ
56デフォルトの名無しさん:2012/07/31(火) 05:08:30.66
>>54
アプローチの仕方が全く異なる言語を持ちだされて例えられても困る
C++はGCがなく、パフォーマンスを最重要視した言語
いわばGCに相当する作業を自分でやる

例えばリアルタイムな応答が必要なクリティカルな部分を走らせている
時に突然GCが走ってしばらく固まったりしたら致命的
ゲームなんかはそう
他にもこういう場面は多いだろう
計測機器とか
もう時間的に余裕が出来てから初めて不要なリソースを解放する
用途が違う
57デフォルトの名無しさん:2012/07/31(火) 05:11:40.93
ガベコレは別スレッドでやればいいじゃん
今時そんなんで止まらないよ
58デフォルトの名無しさん:2012/07/31(火) 06:53:39.91
>>57
「GCが無いのは省いているから」でFAにしとけよ……
59デフォルトの名無しさん:2012/07/31(火) 06:59:33.84
今時速度面でGCで困る事はないよ
大量に開放されるのが嫌ならできるだけ
未参照領域を作らないようにすりゃいいだけ
問題なのはアホみたいなメモリー消費量
アプリケーション起動数やスレッド数に影響するし
切迫してる場合はスライシング起こす
60デフォルトの名無しさん:2012/07/31(火) 07:00:54.45
打ち間違えたスライシングじゃなくてスラッシング
61デフォルトの名無しさん:2012/07/31(火) 11:19:06.98
なんかC++の実行バイナリって、妙にでかくね? 気のせい?
62デフォルトの名無しさん:2012/07/31(火) 11:22:10.27
気のせい
63デフォルトの名無しさん:2012/07/31(火) 11:23:23.88
気のせい
64デフォルトの名無しさん:2012/07/31(火) 11:37:23.15
キーの自動入力で悩んでいます。
http://oshiete.goo.ne.jp/qa/4023937.html
上の質問の解答の使い方を「何度も」実行すると
Access violationというエラーが出てしまいます。
何度も実行(キーの自動入力)できるようにするにはどうしたらよいでしょうか。
アドバイスをよろしくお願いします。
65デフォルトの名無しさん:2012/07/31(火) 11:53:21.56
>>57
再入不能な処理を別スレッドでやると何かいいことあるのか?
66デフォルトの名無しさん:2012/07/31(火) 11:57:38.23
>>57
技術的に無理な事を書かれてもねえ
67デフォルトの名無しさん:2012/07/31(火) 12:22:05.96
開放したメモリの整列処理を別スレッドでやるプールアロケータとかなら作れるかも
68デフォルトの名無しさん:2012/07/31(火) 12:28:26.99
std::vector<Hoge> h(10);
の動作が、VC++とCentOS 5 gcc で違うのね。

windows:10回コンストラクタが呼ばれる
linux:1回コンストラクタが呼ばれ、9回は初めに生成したもののコピー

これでハマッタorz。
69デフォルトの名無しさん:2012/07/31(火) 12:53:25.59
はまる場合って?
中に動的生成なメンバを持っていて自前のコピーコンストラクタが書かれてないとか?
それって何か問題ある?
70デフォルトの名無しさん:2012/07/31(火) 12:56:23.80
元々コピーを考慮してないクラスだったんだろ
71デフォルトの名無しさん:2012/07/31(火) 13:17:11.86
バージョンすら書いてないがその違いってC++03とC++11の違いじゃねーの
http://en.cppreference.com/w/cpp/container/vector/vector
72デフォルトの名無しさん:2012/07/31(火) 13:31:02.29
>>70
それだと潜在的なバグなわけで、どっちみちいつか問題が露呈する
と言うかvectorのメンバ関数push_back()ですらコピーコンストラクタを
呼び出すだろ
どういう事をしようとしていたんだ?
C++11の場合一時オブジェクトならムーブコンストラクタを呼び出すが

>>71
2) Constructs the container with count copies of elements with value value.

としか書いてないから実装の違いだね
73デフォルトの名無しさん:2012/07/31(火) 13:33:20.78
ヘッダから自動的にcppを作るスタイルがいいのか
cppから自動的にヘッダを作るスタイルがいいのか
どっちがおすすめかしら
74デフォルトの名無しさん:2012/07/31(火) 13:34:10.76
待て待て間違っていた

3) Constructs the container with count value-initialized (default constructed, for classes) instances of T. No copies are made.

だね

No copies are made.

だからC++11はコピーで初めに生成した値を広げる動作はしない事が保証されているのか
じゃあC++03の実装の違いとしか言いようがない
そんな事で問題が出るようなクラスの書き方をする方が間違っている
75デフォルトの名無しさん:2012/07/31(火) 13:44:24.97
>>69-70
shared_ptr を内包させたクラス。

コンストラクタでインスタンスを生成していたのだが、
2個目以降が1個目のコピーになると、1つのインスタンスを共有する10個の要素ができる。
vector<Hoge> hoge(10,Hoge());


>>71
visual studio 2010 vs gcc44 4.4.6
なるほど、さんくす
76デフォルトの名無しさん:2012/07/31(火) 13:45:06.87
>vector<Hoge> hoge(10,Hoge());
で解決した・・が抜けた
77デフォルトの名無しさん:2012/07/31(火) 14:06:26.27
>>75
なるほどこういう罠があったからC++11ではコピーコンストラクタで初期化値を
広げるのをやめたのか
78デフォルトの名無しさん:2012/07/31(火) 14:14:56.08
めんどくせえなcppって
高級なのに中身意識しないとバグるとかゴミやん
79デフォルトの名無しさん:2012/07/31(火) 15:25:11.42
参照とポインタの使い分けをどうしようか
結局のところ単にヌルチェックを省けるポインタなんだよな
80デフォルトの名無しさん:2012/07/31(火) 15:27:52.31
自動で " を \" に変換してくれるストリーム
って作るの簡単?
81デフォルトの名無しさん:2012/07/31(火) 15:49:06.29
streambufを自作すればできると思う
82デフォルトの名無しさん:2012/07/31(火) 16:34:25.28
fizzbizzより簡単な気がする がんばれ
83デフォルトの名無しさん:2012/07/31(火) 16:54:37.17
マジかよナベツネより簡単な話だったのか
おれはどこにも入社出来そうもない気がしてきた
84デフォルトの名無しさん:2012/07/31(火) 18:51:07.42
>>82
厳密には文字コードを考慮すべきじゃね
85デフォルトの名無しさん:2012/07/31(火) 19:05:17.98
>>84
char16_t
86デフォルトの名無しさん:2012/07/31(火) 19:53:22.55
wchar_t ならまだしも16_tなどと前方位救いようの無いアホウを口汚く罵倒したい方も多いと思いますがわかんないヤツには何言っても判らんので
続きは文字コードスレで
87デフォルトの名無しさん:2012/07/31(火) 20:05:36.15
と、知ったかぶるのでした
88デフォルトの名無しさん:2012/07/31(火) 22:34:08.67
89デフォルトの名無しさん:2012/07/31(火) 22:42:17.38
template<typename T,typename U> struct super
{
typedef T t;
typedef U u;
};
template<typename T,typename U> struct sub : public super<T,U>
{
void test()
{
u index;
sizeof( u );
}
void test(u index)//ここ
{}
};
ここでu is undefinedというエラーが出ます。何故でしょうか。
VS2008だと出ません。
90デフォルトの名無しさん:2012/07/31(火) 23:26:28.47
本物のエラーメッセージ見ないことには断言できないが、
typename super<T,U>::uと書いてないからじゃないか?
91デフォルトの名無しさん:2012/08/01(水) 00:10:42.34
>>75

shared_ptr自体はコンテナ用件満たすけど、そいつを持ってるクラスはコンテナ用件満たしてるの?
満たしてないもんをvectorとかに入れない方がいいよ。

どうしてもいれたいなら、そのクラスをshared_ptrで来るんで入れればOK。
92デフォルトの名無しさん:2012/08/01(水) 00:17:00.78
コンテナ要件ってなに?
93デフォルトの名無しさん:2012/08/01(水) 00:30:47.81
これならgcc4.7.1でNo Warningで通った

template <typename T, typename U>
struct Super {
typedef T t;
typedef U u;
};

template <typename T, typename U>
struct Sub : public Super<T, U> {
void test() {
typename Super<T, U>::u index;
std::cout << sizeof(index) << std::endl;
}
void test(typename Super<T, U>::u index) {
std::cout << sizeof(typename Super<T, U>::u) << ' ' << index << std::endl;
}
};

int main()
{
Sub<double, float> ss;
Super<double, float>::u ss2 = 123.4f;
ss.test();
ss.test(ss2);
}
94デフォルトの名無しさん:2012/08/01(水) 00:42:55.31
コンテナ要件とは

§23.1 Container requirements

このうちboost::shared_ptr(C++11ならstd::shared_ptr)は

4 In Table 64, T is the type used to instantiate the container, t is a value of T,
and u is a value of (possibly const) T.
Table 64 Assignable requirements

expression return type post condition
t = u     T&       t is equivalent to u

の条件を満たさないので入れてはいけない
(代入した途端に内部状態が変化してしまう)
95デフォルトの名無しさん:2012/08/01(水) 00:44:37.58
>>94
状態が変化したところで "t is equivalent to u" を満たしているから問題ないのでは?
96デフォルトの名無しさん:2012/08/01(水) 00:47:59.93
>>93
そもそもVS2008で通るのが間違いなんですか?
97デフォルトの名無しさん:2012/08/01(水) 00:56:19.50
>>94
それはおかしい
post conditionが等価なら内部状態が変化してもいい

問題はstd::vector<Hoge> h(10); のように書いてるからでしょ

std::shared_ptrは宣言と同時にポインタの参照先を指定しなければならない
それをどこも指してないスマポを入れるからおかしくなるんだろ
98デフォルトの名無しさん:2012/08/01(水) 00:58:40.76
つまりスマポを含んだオブジェクトをコンテナに入れる時は、入れる時に既にスマポが
どこか具体的なオブジェクトを指している状態になっていなければならない

だからvectorの宣言時に大きさを指定したりresize()する事なく、push_backもしくは
push_frontで代入すれば問題が起きない

ちょっと考えてみればこの意味がわかるはず
99デフォルトの名無しさん:2012/08/01(水) 01:14:34.94
>>97
> std::shared_ptrは宣言と同時にポインタの参照先を指定しなければならない
>>98
> つまりスマポを含んだオブジェクトをコンテナに入れる時は、入れる時に既にスマポが
> どこか具体的なオブジェクトを指している状態になっていなければならない

んなわけねーだろ。
100デフォルトの名無しさん:2012/08/01(水) 01:20:19.53
>>98
最初のスマポをどこか指してる状態にしてpush_back()してresize()しても
おかしくなる可能性があるぞ

要するにresize()は使わない事と、大きさを指定する場合はデフォルトの
一時オブジェクトを指定すればいいんだろと思う

C++11はその辺何をしても問題が起きなくなってるんだろうな
101デフォルトの名無しさん:2012/08/01(水) 01:30:11.84
簡単に言うとC++03が定められた時に実装の違いによってboost::shared_ptrのような
参照カウントを持つスマポを入れた時の挙動まで予測してなかったんだろう

それでContainer Requirementsが舌足らずなんだよ

C++11の規格票を見るとずっとその辺が厳密になっているよ
それとスマポの穴が閉じてある

この先またboostで変な物が出てくるとまた規格をすり抜ける可能性はある
102デフォルトの名無しさん:2012/08/01(水) 01:41:20.18
>>100-101
shared_ptr のコピーがオブジェクトを共有するのは当たり前なわけだが、
「おかしくなる」だとか「スマポの穴」だとか、お前ら何のこと言ってんの?
103デフォルトの名無しさん:2012/08/01(水) 01:49:16.75
>>102
「実装の仕方」で挙動が変わるような規格ではダメって事
104デフォルトの名無しさん:2012/08/01(水) 02:08:48.09
念のためISO/IEC14882:2003を読んでみた

§23.2.4.1 vector constructors, copy, and assignment
Complexity: The constructor template <class InputIterator> vector(InputIterator
first, InputIterator last) makes only N calls to the copy constructor of T (where N is the
distance between first and last) and no reallocations if iterators first and last are of forward,
bidirectional, or random access categories. It makes order N calls to the copy constructor of T
and order logN reallocations if they are just input iterators.

とあるので、はっきりとコピーコンストラクタを呼び出すと書いてある
これは実装の違いではなく、実装の仕方を規定している
これがshared_ptrのようなオブジェクトには不都合なんだろう

resize()は

§23.2.4.2 vector capacity
void resize(size_type sz, T c = T());
6 Effects:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing

となっているので問題は生じないと思われる

C++11では変わっているかと思うと
105デフォルトの名無しさん:2012/08/01(水) 02:09:15.46
>>103
C++03 では vector<T>(n) はデフォルト引数とし生成される T() の n 個のコピーになると決まっている。
「「実装の仕方」で挙動が変わる」って、何のこと言ってるの?
106デフォルトの名無しさん:2012/08/01(水) 02:13:47.21
23.3.6.2 vector constructors, copy, and assignment
10 Complexity: Makes only N calls to the copy constructor of T (where N is the distance between
first and last) and no reallocations if iterators first and last are of forward, bidirectional, or random
access categories. It makes order N calls to the copy constructor of T and order log(N) reallocations
if they are just input iterators.

と書いてあり変わっていない。もう少し注意深く読むと

explicit vector(const Allocator& = Allocator());
1 Effects: Constructs an empty vector, using the specified allocator.
2 Complexity: Constant.
explicit vector(size_type n);
3 Effects: Constructs a vector with n value-initialized elements.
4 Requires: T shall be DefaultConstructible.
5 Complexity: Linear in n.
vector(size_type n, const T& value,
const Allocator& = Allocator());
6 Effects: Constructs a vector with n copies of value, using the specified allocator.
7 Requires: T shall be CopyInsertable into *this.
8 Complexity: Linear in n.

とあり、やはりサイズのみを指定した場合の実装は規定されていない。最初にデフォルトコンストラクタ
で初期化したオブジェクトをコピーコンストラクタでコピーしてもいいし、n数回デフォルトコンストラクタを
呼び出しても良い。つまりC++11であってもshared_ptrを入れる場合はC++03同様注意が必要
という事になる。これは互換性を重視したために仕様を変更しなかったのだろう。

しかし>>75のような不都合が残ったままというのはやはり不安を感じる。
107デフォルトの名無しさん:2012/08/01(水) 02:16:05.04
>>105
だから、使う側が注意しないといけないわけ

vector<T>(n)でshared_ptrを入れると、参照カウントがnになった状態になる
vector<T>(n, Obj())のように明示すればn回デフォルトコンストラクタが呼び出され、
それぞれの参照カウントが1になる

それだけの事
108デフォルトの名無しさん:2012/08/01(水) 02:26:36.11
>>106
> explicit vector(size_type n);
> 3 Effects: Constructs a vector with n value-initialized elements.
> 4 Requires: T shall be DefaultConstructible.

この規定でコピーしていいわけないだろ。
109デフォルトの名無しさん:2012/08/01(水) 02:28:14.84
>>107
C++03 だったらどっちも同じ。 C++11 なら、逆じゃね?
( Obj() は T() の間違い?)
110デフォルトの名無しさん:2012/08/01(水) 07:40:34.24
>>109
だな
C++03だと vector<T>(n) は vector<T>(n, Obj()) の事になるので同じ
C++11だと vector<T>(n) はそれぞれがデフォルトコンストラクトされ、
vector<T>(n, Obj()) は Obj() がコピーされる
111デフォルトの名無しさん:2012/08/01(水) 09:01:34.54
紛らわしいな
だれかスパッと纏めて
112デフォルトの名無しさん:2012/08/01(水) 09:27:21.87
スマポ使用禁止
コンテナ使用禁止
113デフォルトの名無しさん:2012/08/01(水) 09:38:30.49
スマポなんて元から使わないしwww
スマポは弱者の道具、車椅子みたいなもんだからね
コンテナは使うから許して
114デフォルトの名無しさん:2012/08/01(水) 10:00:54.97
>>111
vector<T>(n), vector::resize(n) について。

C++03 では (n, value) と同じオーバーロードがデフォルト引数 T() で呼び出されて
value の n 個のコピーからなる vector が得られた。
(ただし resize(n) は呼び出し前からあった要素はそのままね。)

C++11 での右辺値参照導入に際して、おそらくこれらの操作がそのままだと
CopyConstructible を要求することになってしまって理不尽な要求や無駄なコピーを
生じてしまうことから、 DefaultConstructible だけで使えるようにそれぞれ n だけを
受け取るオーバーロードが追加されて n 個それぞれ個別に初期化された要素からなる
vector が得られるようになった。

この変更によって、例えば >>75 のように T が内部に shared_ptr を持つような
オブジェクトの場合の shared_ptr の use_count(), unique() などについて
vector<T>(n) などの結果が変わることになってしまった。
115デフォルトの名無しさん:2012/08/01(水) 10:34:40.55
vectorの中身ってポインタにするか実体にするか悩むよね
116デフォルトの名無しさん:2012/08/01(水) 10:43:24.64
いやべつに。
117デフォルトの名無しさん:2012/08/01(水) 10:52:56.49
ばあいによる
つまり悩む
118デフォルトの名無しさん:2012/08/01(水) 11:27:58.67
実体で不都合が出たらポインタにするだけじゃないの?
119デフォルトの名無しさん:2012/08/01(水) 11:54:19.76
実体はソートパフォーマンス悪いからポインタかな
ムーブがあると大差なくなるんだっけか
120デフォルトの名無しさん:2012/08/01(水) 13:17:57.46
テンプレートって中身もヘッダに書かないといけないの?
どんどんヘッダが大きくなって、ヘッダの意味なくね?
121デフォルトの名無しさん:2012/08/01(水) 13:24:00.71
ヘッダの意味って何?
122デフォルトの名無しさん:2012/08/01(水) 13:42:30.37
基本はそうだが、次世代のはプリコンパイル済みて黄な粉とやってくれたような
123デフォルトの名無しさん:2012/08/01(水) 13:55:17.50
export 復活しないかな
しっかり練り直して
124デフォルトの名無しさん:2012/08/01(水) 14:28:22.82
>>119
誰かgccでムーブコンストラクタあり/なしでSTLのパフォーマンスがどの位変わったのか
テスト出来ないかな

俺の所のgccは4.7.1にしてあるので-std=c++0xがデフォルトになってしまったらしくて
テスト出来ない
125デフォルトの名無しさん:2012/08/01(水) 18:19:23.29
以下についてご教授下さい。
既存のソースをDLL化するに当たってテスト的にVisual Studio 2005にて
「C++ クラスライブラリ」と「C++ コンソールアプリ」の2つのプロジェクトを起こしてテストをしています。
ここでクラスライブラリプロジェクト側で以下のようなコードを記述しました。
typedef struct s {
 int a;
} S;
namespese testdll {
 public ref class Class1 {
 public:
  S sss;
 }
}
これをビルドすると「S sss;」の記述でC4368のエラーとなってしまったので、ネットで調べてポインタで定義することにしました。
S sss; → S *sss;
これでビルドが通ったので、コンソールアプリプロジェクトに上記で作成したDLLの参照を追加し、以下の様なコードを記述しました。
using namespace testdll;
int main(array<System::Class1::String ^> ^args) {
Class1 tt;
 tt.sss = new S;
}
これをビルドをするとC2248のエラーになってしまいます。
メンバ変数sssはpublicで定義しているのですが何故かprivateの扱いになってしまいアクセスすることができません。
アクセサを作成すればアクセスすることは出来るのですが、出来ればアクセサを使わずにpublicでアクセスできればと考えています。
DLL側の定義方法が悪いのか、呼び出し方が悪いのか検討がつかず困っています。
改善策をご教授いただければ幸いです。よろしくお願い致します。
126デフォルトの名無しさん:2012/08/01(水) 20:07:32.03
それC++じゃないよ
127デフォルトの名無しさん:2012/08/01(水) 20:50:39.53
C++/CLIはC++じゃねーつってんだろ!
128デフォルトの名無しさん:2012/08/01(水) 21:08:27.60
>>125
まずC#で書け
129デフォルトの名無しさん:2012/08/01(水) 23:14:44.09
つーかpublicフィールドなんて作るなよ
130デフォルトの名無しさん:2012/08/01(水) 23:19:03.47
フィールド言うな
131デフォルトの名無しさん:2012/08/01(水) 23:22:02.53
環境によってwcslen()がstdの中に入ってたり入ってなかったりするのですが
この違いを同じコードで吸収する方法ありますか
132デフォルトの名無しさん:2012/08/01(水) 23:26:14.29
入ってないってことはないんじゃないか
133デフォルトの名無しさん:2012/08/01(水) 23:36:25.73
>>124
-std=c++98 すればいいんじゃないの?
134デフォルトの名無しさん:2012/08/01(水) 23:57:29.58
>>131
Cのヘッダは<c〜>を使わず、<〜.h>を使う。
尤もMicrosoftの規格違反糞コンパイラ使わないのが正解だがね。
135デフォルトの名無しさん:2012/08/02(木) 00:02:17.65
msのにはあるぞ
136デフォルトの名無しさん:2012/08/02(木) 00:03:39.19
>131
wcslenが要るところだけusing namespace stdる。
...
{ using namespace std; hoge=wcslen(...)}
...

もろちん、
> 尤もMicrosoftの規格違反糞コンパイラ使わないのが正解だがね。
なのは当然である。
137デフォルトの名無しさん:2012/08/02(木) 00:09:50.74
>>134
>Cのヘッダは
昔の本でC++のコード中に<iostream.h>とか書いてる奴あったこと思い出したw
138デフォルトの名無しさん:2012/08/02(木) 00:13:03.19
VC6談義が捗るな
139デフォルトの名無しさん:2012/08/02(木) 00:23:27.96
>>130
つ[C++/CLI]
140デフォルトの名無しさん:2012/08/02(木) 00:41:36.79
141デフォルトの名無しさん:2012/08/02(木) 00:49:38.40
>>139
CLIでもfieldとdata memberは別物扱いだぞ
142デフォルトの名無しさん:2012/08/02(木) 01:16:00.50
143デフォルトの名無しさん:2012/08/02(木) 07:08:17.78
朝鮮人の扱い方
  ∧ ゝ∧
 ( ´∀`)   【 旧日本陸軍の朝鮮兵に対する注意書き】
.ノ|ソ|"\
\ノ」==ヽ!ノ
 /_l _|
一、いつ、いかなる時でも唐辛子粉を食事に際し好きなだけ使わすこと。
一、絶対に頭、体を叩いてはいけない。怨みを持って復讐する気質があり、脱走の原因となる。
一、清潔な食事運搬用バケツと雑巾バケツの区別をよく教えること。
一、危険な状況下では銃を投げ捨てて哀号!と泣き出す習癖があるから、日本兵二名で一名の朝鮮兵を入れて行動せよ。
  __
  │  |
_☆☆☆_
 ( ´_⊃`)   【米軍による韓国兵の扱いマニュアル 】
 (  ∞ )
 | | | 
 (__)_)
1.韓国人には強気で押せ。抵抗する場合は大声で命令しろ。 2.命令を聞かない場合は身体で解らせろ。
3.同じことをくり返す場合、犬のように何回でも同じ様に叱れ。こちらが上と言うことを身体で解らせろ。
4.理由は聞くな。どうせ大したことは言っていない。
5.身体で解らせた場合、根に持つ場合があるので、後で身辺には気をつけて行動しろ。但し、徹底的に解らせる迄、手を抜いてはいけない。
6.相手を3才児と思い、信用したり頼りにはするな。重要な仕事は任せるな。
 ,,,,,,,,,,,,,,,,
 ミ,,,,,;露;;;,ミ
 ∩;`_っ´∩
 ヽ    /   【 旧ソ連共産党による朝鮮の扱い方 】
  |   |
   し⌒J
1、頭痛の種になるだけだから関わるな 2、手段を選ばぬキチガイ揃いだから関わるな
3、関わるとこっちが痛い目に遭うから関わるな 4、関わってきたらウォッカ飲んで忘れようぜ
144デフォルトの名無しさん:2012/08/02(木) 08:33:31.25
C++11ではdecltypeで関数の返値の型推論できるけど
C++11使わないで返値が入力で代わる関数の
返値型をtemplateみたいな方法で指定する方法ないものでしょうか
145デフォルトの名無しさん:2012/08/02(木) 08:35:26.25
>>143
出た!ネトウヨの陰謀論
146デフォルトの名無しさん:2012/08/02(木) 08:52:17.89
>>145
Cの次がなんでDじゃなくC++なのかぐらいどうでもいい
147デフォルトの名無しさん:2012/08/02(木) 08:56:15.94
もともとトランスレーターだからな
Cを進めてCを返すから後置インクリメントなんだよ
148デフォルトの名無しさん:2012/08/02(木) 10:05:14.56
>>144
C++11 でも動的な型演繹はできない
auto a(int b)
{
switch(b)
{
case 0: return int();
case 1: return float();
default: return b;
}
}
decltype(a(0)) c;
149デフォルトの名無しさん:2012/08/02(木) 11:04:13.32
templateなdecltypeの型解決は出来ないのか
何とも中途半端な仕様
150デフォルトの名無しさん:2012/08/02(木) 12:22:14.02
そうか。
メソッドチェーンの途中でヌルオブジェクトを返せばいいのか。
151デフォルトの名無しさん:2012/08/02(木) 12:24:13.90
boost::mplの型vectorのn番目の型も
nが動的に決まる場合は
無理なの?
152デフォルトの名無しさん:2012/08/02(木) 13:03:02.79
ワーニングが消えないのですが方法ありますか?
出来ればワーニング自体を無効にする方法は使いたくありません

HMENU hMenu = (HMENU)lpMeasureItemStruct->itemID;
warning C4312: '型キャスト' : 'UINT' からより大きいサイズの 'HMENU' へ変換します。
153デフォルトの名無しさん:2012/08/02(木) 13:06:07.27
reinterpret_cast
154デフォルトの名無しさん:2012/08/02(木) 13:07:47.08
HMENUやめてUINT使えばいいだろ馬鹿なのお前?
155デフォルトの名無しさん:2012/08/02(木) 13:13:33.41
#pragma warning(disable : 4312)
156152:2012/08/02(木) 14:16:10.53
>>155
warning自体を無効にする方法は使いたくないと書いたのですが日本語が理解できませんでしたか?
本当に役に立ちませんね
157デフォルトの名無しさん:2012/08/02(木) 14:25:20.45
>>154
寧ろitemIDをHMENUにしたらいいんじゃねw
158デフォルトの名無しさん:2012/08/02(木) 14:51:46.12
ゴミクズですね
159デフォルトの名無しさん:2012/08/02(木) 15:53:45.91
>>156
あんたがどこか遠い世界に逝けは問題が解決するんじゃないかと思う
160デフォルトの名無しさん:2012/08/02(木) 15:57:43.32
>>156
坊や、だだをこねる前に warning とは何かを確認して出直してきな
それと君が使っているコンパイラでは警告コードの 4000 番台には特別な意味があるぞ
161片山博文MZボット ◆0lBZNi.Q7evd :2012/08/02(木) 16:02:19.79
(HMENU)(UINT_PTR)
162デフォルトの名無しさん:2012/08/02(木) 16:13:38.70
reinterpret_cast<HMENU>(reinterpret_cast<UINT_PTR>(lpMeasureItemStruct->itemID))
163デフォルトの名無しさん:2012/08/02(木) 16:14:47.48
HMENU hMenu = 0;
164デフォルトの名無しさん:2012/08/02(木) 17:15:03.08
ホモ
165デフォルトの名無しさん:2012/08/02(木) 19:00:41.87
いいかげんCキャスト使うの止めろ
それと雑魚共はWin32APIから出てくるな
166デフォルトの名無しさん:2012/08/02(木) 19:10:10.75
は?何様じゃ
167デフォルトの名無しさん:2012/08/02(木) 19:28:49.01
御子様じゃ。
168デフォルトの名無しさん:2012/08/02(木) 20:06:29.10
>>144
オーバーロードすりゃできるだろうよ
169デフォルトの名無しさん:2012/08/02(木) 20:43:19.12
パーかおめ
170デフォルトの名無しさん:2012/08/02(木) 20:46:44.94
int value = Function( Tag<WM_LBUTTONDOWN>() );
char value = Function( Tag<WM_DESTROY>() );
long value = Function( Tag<WM_CREATE>() );
171デフォルトの名無しさん:2012/08/02(木) 21:26:12.35
マンコ公園でシャセイ大会を行うプログラムはC++ではどう書いたらいいですか?
172デフォルトの名無しさん:2012/08/02(木) 22:05:23.10
まず男になれ
173デフォルトの名無しさん:2012/08/02(木) 22:55:35.41
>>172
俺は女になりたい
174デフォルトの名無しさん:2012/08/02(木) 23:10:54.99
俺も女になりたい
・・・が、普通の女じゃいやだ
普通の女の可愛さを偏差値50とすると51.8くらいがいい
普通より微妙に若干可愛いような気がする程度

お願いします

//昔おなべにちんこくれって言われたときにあげれば良かった
175デフォルトの名無しさん:2012/08/03(金) 01:08:21.33
なんでホモがこんなところにいるんですかねえ……
176デフォルトの名無しさん:2012/08/03(金) 01:41:46.25
多重継承したんでしょう
177デフォルトの名無しさん:2012/08/03(金) 02:35:08.12
♂と♀を多重継承すると一人で妊娠出来るのかな
178デフォルトの名無しさん:2012/08/03(金) 03:24:03.80
2012年8月19日フジテレビ抗議デモinお台場 告知動画
http://www.nicovideo.jp/watch/sm18497988
8月19日 フジデモ一周年 お台場フジテレビ抗議デモ 告知動画
http://www.nicovideo.jp/watch/sm18468199
【告知】8・19フジデモ一周年inお台場
http://www.nicovideo.jp/watch/sm18413040


かつての「視聴率王」も今は昔――フジテレビに異変が起きている。

2004年から7年間、年間視聴率3冠王に君臨していたが、昨年、日本テレビにその座を奪われたのに始まり、
オダギリジョーが主演した今年4月期のドラマ「家族のうた」は、視聴率3%台で打ち切り。
さらに4〜6月期の平均視聴率はテレビ朝日にも抜かれ、3位に。7月には「3冠王を逃したため」(フジテレビ関係者)、
局長やプロデューサーなどが大幅に入れ替わるテコ入れがなされたが、"迷走"は止まらない。

その一例が情報番組「とくダネ!」だという。
言わずと知れた小倉智昭がメーンキャスターを務める朝の看板番組だ。
同局の人気アナ、ナカミーこと中野美奈子の退社に伴い、
7月からキャスターに抜擢されたのがタレントの菊川怜だったが、その評判が芳しくない。
「同じ時間帯では、日テレの『スッキリ!!』と『とくダネ!』が視聴率を競い、これまではフジが優勢でした。
週5回の放送で負け越しが続くなんてことはほぼなかったのですが、菊川に代わった翌週から、1勝4敗が2週続きました。
扱うニュースなどにもよるので一概にキャスターの責任にはできませんが、菊川が原因だという声がもっぱらです」(番組関係者)

一方、菊川の起用と同時期にあった人事異動が業界で臆測を呼んでいる。情報制作局長や情報制作センター室長、
番組のチーフプロデューサーらが軒並み交代したのだ。テレビ局では、長く続いた番組を終わらせたり、
「大物」キャスターやタレントを降板させたりする際に、局側も相応の立場の人間が異動するのが慣例とされている。
「大物の降板などと同時に異動する局もあるが、フジは必ずしもそうではない。
今度の人事異動は、小倉さんの降板をにらんだもの、という声があります」(同)
もしかして、小倉さん、最後の夏!?

▽週刊朝日
http://www.wa-dan.com/article/2012/07/post-968.php
179 ◆QZaw55cn4c :2012/08/03(金) 06:20:07.67
>>177
かたつむりはそれでも二人だそーです、ひとりはリスクがやっぱりでかいのか?
180デフォルトの名無しさん:2012/08/03(金) 08:27:34.35
>>179
カタツムリに聞いて来い
181デフォルトの名無しさん:2012/08/03(金) 09:10:05.37
プログラマーはホモ多いよ
182デフォルトの名無しさん:2012/08/03(金) 12:07:28.33
>>179
でかいよ
繁殖スピードと個体数の少ないカタツムリみたいな生き物は
遺伝子同士の掛け合わせで強化していかないと間に合わない
ウイルスみたいに繁殖スピードが速くて個体数の多い生き物は突然変異でも間に合うから
自己増殖でOK
183デフォルトの名無しさん:2012/08/03(金) 12:18:04.96
多重継承はバグの元だ。
♂と♀のインターフェースだけ多重実装しろよ。
184デフォルトの名無しさん:2012/08/03(金) 12:30:05.41
♂から♀にキャストすればいい
185デフォルトの名無しさん:2012/08/03(金) 13:49:16.11
>>184
子供産めるようになるのかなwktk
186デフォルトの名無しさん:2012/08/03(金) 14:46:35.83
ネトウヨは2chまとめブログ「てきとう」を見よう
187デフォルトの名無しさん:2012/08/03(金) 14:59:39.51
C++11はいつごろ一般的に普及しますか?
188デフォルトの名無しさん:2012/08/03(金) 15:14:04.09
俺はgcc44に対応している所から使ってる。
189デフォルトの名無しさん:2012/08/03(金) 15:14:53.51
>>187
VC11がもうすぐ出るからそしたら流れが変わる
190デフォルトの名無しさん:2012/08/03(金) 19:25:57.79
>>185
♂から♀へキャスト→股の棒・胸毛等が無くなり中性的になる
♂と♀を多重継承→ふたなり
♂を継承し♀にあるメゾットを一部追加→男の娘・オカマ
♀を継承し♂にあるメゾットを一部追加→男装女子・オナベ
全然違うぞ
191デフォルトの名無しさん:2012/08/03(金) 19:30:50.03
詳しいですね、その筋の方ですか?
192デフォルトの名無しさん:2012/08/03(金) 19:59:21.27
米を使った欧風料理か?
193デフォルトの名無しさん:2012/08/03(金) 20:03:07.62
それはdynamic_castすると殆どがNULLになるな
194デフォルトの名無しさん:2012/08/03(金) 20:46:48.06
ヌルヌルになるのか
195デフォルトの名無しさん:2012/08/03(金) 22:31:47.38
遺伝的アルゴリズムでオスメスみたいな関係性を定義する事あるけど
絶対に継承にはならないよね。冗談とは言え男女を継承で解決しようとか
程度が知れるわぁ・・・。
196デフォルトの名無しさん:2012/08/03(金) 22:38:33.78
ネタスレでマジレスしてるキチガイがいるよw
197デフォルトの名無しさん:2012/08/03(金) 22:39:12.43
これはひどい・・・
198デフォルトの名無しさん:2012/08/03(金) 23:45:11.15
夏だから仕方がない
199デフォルトの名無しさん:2012/08/03(金) 23:55:52.77
返値がコンテナになる関数で
Return value optimization
したい

例えば

std::vector<double>
my_push_back(std::vector<double>& v,double &x){
//return std::vector(v).push_back(x)// Return value optimizationにできない
std::vector vv(v);
vv.push_back(x);
return vv;
}

なんとかReturn value optimizationにするにはどうすればいいのでしょうか
200デフォルトの名無しさん:2012/08/03(金) 23:58:07.23
右辺値参照なので気にしない
201デフォルトの名無しさん:2012/08/03(金) 23:58:28.64
C++11のムーブコンストラクタを使えよ
202デフォルトの名無しさん:2012/08/03(金) 23:59:39.17
C#のLINQみたいなのメタプログラミングで出来ない?
203デフォルトの名無しさん:2012/08/04(土) 01:07:39.12
key/value 両方ともUniqueで、片方から片方を検索したいです。

std::map<> だと片方しか検索できないのですが、
自分でmapを2個用意して、それっぽいのを作るしかないでしょうか?

何か良い方法あったらおしえてください
204デフォルトの名無しさん:2012/08/04(土) 01:12:40.47
困ったときのブースト
205デフォルトの名無しさん:2012/08/04(土) 01:25:34.55
あった、ビットマップなんちゃらね。

ありがとう 尻貸すよ
206デフォルトの名無しさん:2012/08/04(土) 12:02:30.83
前スレ?でもちょっと出てたが(HDDが飛んだ&最近忙しかったのでわかんね
#include <stdafx.h>
は、本来のプリプロセッサの仕様的には
#include "stdafx.h"
の方が適切だと思うわけだが(VSの「クラスの追加」とかで出てくるスケルトンコードもそうなっている
まあどっちであっても(たぶん無条件にカレントの.pchから探そうとしているから)動くし、
プリコンパイル済みヘッダーとかローカルな仕様なんで、そういう書き方も許されるのだと納得しようと思えばできるが
207デフォルトの名無しさん:2012/08/04(土) 12:10:15.92
プロジェクトにローカルなヘッダは q 文字列
そうでないヘッダは h 文字列
208デフォルトの名無しさん:2012/08/04(土) 13:21:10.52
Hoge *p = piyo.search("fuga");
if(p) p->are()->sore();

みたいなコードでif文とかうざいので、
piyo.search("fuga")->p->are()->sore();
としたいときには、search()の戻り値がどんなときでも
ヌルポにならないことを保障すればいいんだけど
これって作法的にはどうなの? 下品なやり方?
209デフォルトの名無しさん:2012/08/04(土) 13:22:03.92
まんなかのp->はいらなかった無視して
210デフォルトの名無しさん:2012/08/04(土) 13:24:44.62
ヌルポならなにもしないラッパーを返すか例外を投げるが?
211片山博文MZボット ◆0lBZNi.Q7evd :2012/08/04(土) 13:31:30.51
thisがNULLかチェックする。

... are(...) {
if (this == NULL) { return NULL; }
...
}

... sore(...) {
if (this == NULL) { return }
...
}
212デフォルトの名無しさん:2012/08/04(土) 13:33:33.67
>>211
びっくりするほど無能でびっくりした
どうやってare()にたどりつくんだよ
213デフォルトの名無しさん:2012/08/04(土) 13:33:35.36
なるほど。でもare()やstore()がvirtualな場合は使えないね。
214デフォルトの名無しさん:2012/08/04(土) 13:36:32.81
>>210
・何もできないラッパーを返す
・何もできない基底を返す
設計上、どっちがいいの?
気分的には何もしないラッパーよりも何もしない基底の方がいい気がする
派生部品を基底で返すのって良くない気がしない?
215デフォルトの名無しさん:2012/08/04(土) 13:58:48.56
引数って参照かポインタか良く悩むんだけど
最近になって、両方作っとけばいいことに気づいた。
おれはてんさいかもしれん。
216デフォルトの名無しさん:2012/08/04(土) 14:08:11.57
>>215
実体渡しを作らないからてんさいではない。
217デフォルトの名無しさん:2012/08/04(土) 14:11:46.70
出力にはポインタ、単なる引数は参照
218デフォルトの名無しさん:2012/08/04(土) 14:16:58.35
>>217
単なる参照なんだけどポインタを渡す羽目になることってあるだろ
unko( string &s ) にポインタchinkoを渡すときに
unko( *chinko )って書くのはなんかキモイ
219デフォルトの名無しさん:2012/08/04(土) 14:24:32.36
>>208
つ例外
220デフォルトの名無しさん:2012/08/04(土) 14:26:14.00
>>214
Maybeはc++でスマートに書けないのかな
221デフォルトの名無しさん:2012/08/04(土) 14:46:26.06
>>218
string*とかのナマポを持ってる方がキモイ
222デフォルトの名無しさん:2012/08/04(土) 14:59:12.73
>>219
無きゃ無いで何もしない というコードなので、例外はいらん
223デフォルトの名無しさん:2012/08/04(土) 14:59:53.93
>>221
生ポじゃなくても同じような事象ありえるだrぽ
224デフォルトの名無しさん:2012/08/04(土) 15:19:36.10
>無きゃ無いで何もしない
なら>208のようにif文を使うのがわかりやすい
もしif文を書かねばならない箇所が多くなるなら、
それは検索機能のコードが一箇所にまとまっていないという別種の問題に思える

piyo.search("fuga")が"fuga"を見つけられなかった場合例外を投げる、でも一応動くが
もし"fuga"を見つけられないというのがありふれた事象なら、piyo.search()を直接または間接に
呼ぶ側が、例外が来るのか、途中の階層で捕捉されるのかを常に意識せざるを得ないからウザさは減らない
また、例外のスローはポインタ1個返すだけの関数リターンより遅いし、unwindは魔法だし、
捕捉する側では例外オブジェクト別の分岐コードが吐かれるとかでパフォーマンス的にも損をする
225デフォルトの名無しさん:2012/08/04(土) 15:24:50.59
>>224
ありがとう。
検索コードが散らばるというか、たくさんあるのが前提なコードなので
piyo.search2("fuga")->are()->sore();
2の方を使ったらヌルポオブジェクトを返すようにした。
226デフォルトの名無しさん:2012/08/04(土) 16:55:50.02
>>199
std::vector<double>
// std::vector<double> & //にするとうまくいかない
my_push_back(const std::vector<double>& v,const double &x){
std::auto_ptr<std::vector<double> > pv(new std::vector<double>(v) );
pv->push_back(x);
return *pv;
}


std::vector<double> v;
v.push_back(1.1);
std::vector<double> v2(my_push_back(v,2.2 ));
std::cout << v2[0] << " " << std::endl;//ちゃんとした数値じゃない
227デフォルトの名無しさん:2012/08/04(土) 17:15:41.75
void unko( hoge &chinko )
という関数を呼び出すときに、 chinko を刹那的に作りたいんだけど
unko( hoge dummy ) と書くとエラーになる。
228デフォルトの名無しさん:2012/08/04(土) 17:42:41.33
class A{
virtual void func();
}
class B : public A{
void func();
}

って感じでオーバーライドして、その上で

vector <A> vec;
vec.push_back(B())
vec[0].func();

っていう呼び出し方するとB::func()じゃなくてA::func()が呼ばれます
どうにかしてB::func()の方を呼びたいんですがいい方法ないでしょうか
229デフォルトの名無しさん:2012/08/04(土) 17:46:25.25
>>228
virtualやめるかB::func()
230デフォルトの名無しさん:2012/08/04(土) 18:16:06.97
>>228
vector<A> である限り無理
231デフォルトの名無しさん:2012/08/04(土) 18:24:07.03
std::vectorクソ使えない
232デフォルトの名無しさん:2012/08/04(土) 18:48:47.29
>>228
BのサイズがAと違ったらどうなるんこれ
233デフォルトの名無しさん:2012/08/04(土) 18:52:06.08
ああそういう事か
push_backする時にスライシングが起きてるのか
ポインタで保持しないとだめだな
234デフォルトの名無しさん:2012/08/04(土) 18:54:03.45
なんとかして
A a(B());
a.func();
がスライシングを起こさず正常に動いて、かつB::func()が呼ばれるような言語を探すことだね。
235デフォルトの名無しさん:2012/08/04(土) 19:00:12.39
class A {
public:
virtual void func() {
std::cout << "A" << std::endl;
}
};

class B : public A {
public:
void func() {
std::cout << "B" << std::endl;
}
};

int main()
{
std::vector<A> vec;
std::vector<A*> vecp;

vec.push_back(B());
vec[0].func();

vecp.push_back(new B);
vecp[0]->func();
delete vecp[0];
}
236デフォルトの名無しさん:2012/08/04(土) 19:06:33.22
ptr_vectorとかvector<shared_ptr<>>とか使わねえといつかdelete書き忘れるだろう
237デフォルトの名無しさん:2012/08/04(土) 19:23:08.30
>>236
知ってるけど使わなかった
238デフォルトの名無しさん:2012/08/04(土) 19:24:20.32
>>234
構文上はともかくとして、
原理上配列に実体を置く方法なら
どの言語であろとダメだろ
239デフォルトの名無しさん:2012/08/04(土) 19:32:08.06
スマートポインタ崇拝者てなんかマルチスレッド信者似の胡散臭さ漂わせてるな
ソレ使ってまともに組上げた事無いのに信心だけはいっちょまえて感じの
240デフォルトの名無しさん:2012/08/04(土) 19:35:00.01
循環参照してデッドロックを起こしたとか辛いことあったのか?
ほら泣けよ、みんな慰めてくれるぞ。
241デフォルトの名無しさん:2012/08/04(土) 19:36:59.97
しょせん辺境の地場信仰だからマルチスレッドほど気持ち悪い事には成らんだろう。
242デフォルトの名無しさん:2012/08/04(土) 19:44:10.58
>>239
pgr
243デフォルトの名無しさん:2012/08/04(土) 19:52:51.94
RAIIを頑なに否定してた人もいたな
244デフォルトの名無しさん:2012/08/04(土) 19:56:36.33
マルチスレッド信者ってなんぞ?
マルチスレッドなんて必要悪だろちょっと処理に時間がかかれば
画面が真っ白になるような、そんなソフトばっか作ってんのか。
245デフォルトの名無しさん:2012/08/04(土) 20:09:52.39
そうか、参照を使ってもスライシングってあるのか
246デフォルトの名無しさん:2012/08/04(土) 20:10:40.94
必要ないとこまでスマポにするカスは別の言語使うか死んだ方がいい
247デフォルトの名無しさん:2012/08/04(土) 20:13:02.28
わぁいマルチスレッド あかりマルチスレッド大好き
248デフォルトの名無しさん:2012/08/04(土) 20:13:51.04
何の必要があって生ポ使うのかわからん
249デフォルトの名無しさん:2012/08/04(土) 20:24:48.50
逆だろスマポの必要性が無い限りは生なんだよ
なんの考えもなしに安全に倒したいならもうC系列を使う意味がない
もっと安全で書きやすい洗練された言語を使えばいい
250デフォルトの名無しさん:2012/08/04(土) 20:25:37.43
そりゃ素人は言語を自由に選べるからいいけどさ
251デフォルトの名無しさん:2012/08/04(土) 20:28:14.21
玄人ならなおさらだ
低級言語を扱う資格無し
252デフォルトの名無しさん:2012/08/04(土) 20:31:38.23
夏だな・・・
253デフォルトの名無しさん:2012/08/04(土) 20:35:37.92
そこまでスマポが嫌ならCつかってりゃいいのに
普通は必要なパフォーマンスを出しつつ高級機能を使いたいからC++使ってる
254デフォルトの名無しさん:2012/08/04(土) 20:43:43.90
スマポは必要最低限でいいだろ
使わないといけないのは設計が破綻してる事が多いし。

俺はboostを使う上でどうしようもない時以外は極力避けてるよ
255デフォルトの名無しさん:2012/08/04(土) 20:47:46.40
具体的にどういう問題に当たった?
夏休みのガキじゃないなら具体例挙げられるよな。
256デフォルトの名無しさん:2012/08/04(土) 20:56:48.42
「使わないといけないのは設計が破綻」
これ何回も聞いたけど何故なのかいつも説明がないよね
257254:2012/08/04(土) 20:57:10.23
インスタンスの管理放棄だから、
規模が大きくなるとバグの温床になる。

他の手段で実現できないかをまず検討。
なるべく継承じゃなくてコンポジションで実現できないかと同じくらい気をつけてる。

ちなみに254以外は俺じゃないからしらない
258デフォルトの名無しさん:2012/08/04(土) 20:58:46.78
ナマポが必要な場合って、これぐらいだな。
あとは、自動変数とスマポで済む。
・インタープロセス
・生配列のイテレーション用
・Cの関数を使う場合
259デフォルトの名無しさん:2012/08/04(土) 21:00:20.28
>>257
理屈じゃなく何があったか事実を書けよ
机上だけの問題なら原発は絶対安全ですぐらいどうでもいい
260デフォルトの名無しさん:2012/08/04(土) 21:04:46.72
フクシマのせいで、世界に原発が安全であると間違ったメッセージを送ってしまった。
261デフォルトの名無しさん:2012/08/04(土) 21:07:52.29
スマートポインタ使うことが設計の破綻ならほかの言語ではどんな設計にしても破綻してるな
スマートポインタにすることで、かえって管理方法を明示できる側面もあるよ(色々なスマートポインタがあるから)

かくいう自分は最近モバイル開発ばかりだからスマートポインタ使ってないけど
262デフォルトの名無しさん:2012/08/04(土) 21:14:24.83
>>257
アホだなー
263デフォルトの名無しさん:2012/08/04(土) 21:19:13.59
>>257
スマートポインタは管理放棄じゃなくて、自動管理で済むって話。
スマートポインタを使った場合に発生するバグがあるというのなら、その例を挙げてみてよ。
264デフォルトの名無しさん:2012/08/04(土) 21:19:53.96
>>261
なぜモバイル開発だということがスマートポインタを使わなくなる理由になるの?
265デフォルトの名無しさん:2012/08/04(土) 21:20:05.04
>>260
それはない

被災3県、戻らぬ外国人観光客 放射能不安、円高も追い打ち
ttp://www.sankeibiz.jp/business/news/120724/bsd1207240503003-n1.htm
266デフォルトの名無しさん:2012/08/04(土) 21:20:42.41
まーたデストラクタ否定党か
267デフォルトの名無しさん:2012/08/04(土) 21:24:38.07
>>264
GCの有る言語しか開発に使わせてもらえないからだろう
268デフォルトの名無しさん:2012/08/04(土) 21:25:01.54
>>264
c++慣れしていないプログラマがかわるがわる投入されるからということと
うちのような中小ゲームデベロッパではunityが幅きかせてきてそもそもc++のコードをあまり書かなくなってきた
269デフォルトの名無しさん:2012/08/04(土) 21:30:03.84
言語が違うならそりゃ論外だな。
270デフォルトの名無しさん:2012/08/04(土) 21:38:45.46
>>269
そんな本筋の外の部分に論外だのなんだのと言われてもな。
>>264からだけを読んで誤解してない?
271デフォルトの名無しさん:2012/08/04(土) 21:40:43.41
本筋の外だから論外なんだろ?議論する必要が無い。何かおかしいか?
272デフォルトの名無しさん:2012/08/04(土) 21:41:06.99
話しそらさず>>257>>259に答えろよ
これで答えられれば一旦話がまとまるだろ
273デフォルトの名無しさん:2012/08/04(土) 21:47:52.30
>>271
お前はあとがきだけを読んで小説の中身を判断する人間か
274デフォルトの名無しさん:2012/08/04(土) 21:51:13.96
>>271
元レスの論旨をあえて無視して噛み付いてみただれかさんの存在が論外
275デフォルトの名無しさん:2012/08/04(土) 21:58:52.05
「中身を判断」だの「噛み付い」ただの、意味が分からないよ。
「論外」を悪口の一種かなんかだと思ってるのか?
単に、他の言語の話は議論の対象にならない、と言ってるだけなんだけど。
276デフォルトの名無しさん:2012/08/04(土) 22:03:49.20
論外話はいいから、スマポで困った事例を早く出せよ
277デフォルトの名無しさん:2012/08/04(土) 22:08:41.91
おれは>269=271=275なわけだけど、>257の人だと思われてたのなら違うよ。
誤解させたのなら悪かったよ。しばらく黙っとく。
278デフォルトの名無しさん:2012/08/04(土) 22:09:21.78
>>263
循環参照とか?(照れ
279デフォルトの名無しさん:2012/08/04(土) 22:11:56.73
はじめに信心だけはいっちょまえて危険性を指摘してあるのにバカダナー
280デフォルトの名無しさん:2012/08/04(土) 22:37:59.53
スマポだと過去の資産との兼ね合いがな
281デフォルトの名無しさん:2012/08/04(土) 22:40:07.62
スマポは危険
スマポは危険
ナンミョウホウレンゲキョ
ナンミョウホウレンゲキョ
282デフォルトの名無しさん:2012/08/04(土) 22:42:14.50
スマポで困る点があるのは判るんだが、
ナマポ使いが宗教に見えて仕方ない
283デフォルトの名無しさん:2012/08/04(土) 23:05:53.89
なるべくスマポを使うようにして、必要があればナマポを使う
それでいいじゃないの
284デフォルトの名無しさん:2012/08/04(土) 23:10:23.69
スマポなんて、所詮ナマポのラッパーなんだから、使わなくても事足りる。
ここで、スマポを使うように言う奴らは何なの?どこから金をもらってるの??
285デフォルトの名無しさん:2012/08/04(土) 23:13:18.50
ここで、ナマポを使うように言う奴らは何なの?どこから金をもらってるの??
286デフォルトの名無しさん:2012/08/04(土) 23:21:54.75
みんなナマポ宗教が気持ち悪いと思ってるだけだが
287デフォルトの名無しさん:2012/08/04(土) 23:24:06.76
>ナマポ
メモリポインタだろ;

どっちかというとスマポ推進派だが
スマポはマルチコア環境できちんと動作させられるようなスマポ
(参照カウントが更新される度に他コア固有キャッシュをフラッシュしたりスヌープする必要がある

パフォーマンス的にナマポにかなり劣るのでは
288デフォルトの名無しさん:2012/08/04(土) 23:25:35.13
配列数を操作したいのですが、以下の様なやり方でできるでしょうか?

適当なクラス
Hoge* hoge;
現要素数
int Elements=0;

※配列の最後尾にひとつ追加する時
new(hoge + Elements) Hoge();
Elements++;

※配列の最後尾をひとつ削除する時
Elements--;
delete(hoge + Elements);
289デフォルトの名無しさん:2012/08/04(土) 23:27:04.15
>>287
そのへんがトレードオフだよね
290デフォルトの名無しさん:2012/08/04(土) 23:33:34.62
>>288
やれるもんならやってみろ
291デフォルトの名無しさん:2012/08/04(土) 23:34:51.11
>>288
できるよ
292デフォルトの名無しさん:2012/08/04(土) 23:40:43.78
>>287
スレッド間でそんなに排他ロック呼び出しながら通信するか?
あと、スレッド間通信はスマポ経由じゃなくメンバー変数の実体で良くね。
スレッド間でスマポを使うとしたらスレッド全体を管理してるオブジェクトをスマポに突っ込むぐらい。
293デフォルトの名無しさん:2012/08/04(土) 23:44:35.09
>>287
その状態と同じ動作するプログラムが生ポインタ使って簡単になるとは思えないな。
294デフォルトの名無しさん:2012/08/04(土) 23:46:06.33
>>288
普通<memory>にあるunchecked_uninitialized_copyとか
uninitialized_xxxx系関数で処理する。
295デフォルトの名無しさん:2012/08/04(土) 23:56:13.46
>>287
お前の中でスマポ=参照カウントかよ
296デフォルトの名無しさん:2012/08/04(土) 23:56:29.76
>>288
hoge の確保サイズはどうやって決めるの?確保サイズ以上に追加されたらどうするの?
っていうか vector 使え。
297デフォルトの名無しさん:2012/08/04(土) 23:57:49.88
多分B木とか新しいコンテナ作る気じゃね?
298デフォルトの名無しさん:2012/08/05(日) 00:00:15.70
>>254=257だが、
俺は「スマポ極力使うな」派で、「ナマポ派」じゃないよw

>>263
管理放棄ってのは、メモリのnew/deleteの話ではなく、設計上の意味合い。
「スマートポインタの管理者」の話で、もう1つ上のレイヤーの話。
インスタンスには単一の管理者が居るという設計にした方がシンプルだと思う。

これの不具合の具体例は、コードが難読になる程度。じわじわくる。
299デフォルトの名無しさん:2012/08/05(日) 00:01:40.73
これが具体例?
なりそうな気がするよ、程度にしか読めないんだが
300デフォルトの名無しさん:2012/08/05(日) 00:05:58.72
なぜスマポを使うべきでないのかという説明になってないな
301デフォルトの名無しさん:2012/08/05(日) 00:12:58.95
>>299
大半の人がそう。気軽にスマポをぶん回す。
新卒相手の場合は、設計をまず見直すように言う。
302デフォルトの名無しさん:2012/08/05(日) 00:13:37.98
いや、それは判るんだけど具体例をね。
303デフォルトの名無しさん:2012/08/05(日) 00:14:47.69
>>298
つまり所有権の共有が必要ないところで所有権共有のためのスマートポインタを使うな
って言ってるんだよね?そりゃそうだね。

だったら shared_ptr とか「所有権共有のためのスマートポインタ」とかちゃんと言え。
「スマートポインタ」でひとくくりにするな。
304302:2012/08/05(日) 00:14:51.70
スレ間違えたった
305デフォルトの名無しさん:2012/08/05(日) 00:15:13.46
ところで話変わるけど、STLにアトミックな変数操作できる
クラスとか変数とかってある?
306デフォルトの名無しさん:2012/08/05(日) 00:15:47.20
std::atomicとか
307デフォルトの名無しさん:2012/08/05(日) 00:16:32.82
共有しない場合でもunique_ptrで済む所でナマポ使うメリットも無いよね
例外処理とかめんどくさすぎるし
308デフォルトの名無しさん:2012/08/05(日) 00:16:34.73
>>305
"STL" が何を指しているのかよくわからんが、 C++11 には標準ライブラリ <atomic> があるよ。
309287:2012/08/05(日) 00:17:03.99
>292
参照カウンタの一貫性を複数コア間で保つためには一般論としては重い排他ロックか、
キャッシュスルーアクセスが要るが、どっちにせよ数百オーダーのクロックサイクルを消費する
もっとも、スヌープを高速で行う特殊なハードウェアが用意されていればその限りではないが
IAにそんなものがあるのかは知らん(ていうか無いっぽい

>293
ナマポなら上記対策が不要なシチュではプログラマの責任の下で上記対策を省けるが、
使用環境制限のない汎用スマポだと無条件にコア間同期が行われてしまうのではないか
(同一コア内のスレッドセーフのみ保証される軽量なスマポでも選択でき無い限りは

>295
おk
続けて
310デフォルトの名無しさん:2012/08/05(日) 00:18:56.92
>>306
>>308
ありがとう。おれ、atomic、おぼえた。
311デフォルトの名無しさん:2012/08/05(日) 00:21:07.54
>>309
スマポに対する排他コストじゃなくて、スレッド上での排他一般を
コストが問題になるほどするか?って書いたんだけど。
312デフォルトの名無しさん:2012/08/05(日) 00:22:26.66
一貫性云々言う人が生ポインタ使ってるのか...
この人みたいな使い方なら保持者以外弱参照でいい気がするなぁ
313デフォルトの名無しさん:2012/08/05(日) 00:23:49.48
>>309
プログラマの責任が増えたるんなら難しくなってるってことだな。

っていうかそもそも、なるべく共有オブジェクトへのアクセスを
減らすだろうし、そうすれば効率面でもたいして差は出ない。

共有オブジェクトへのアクセスがガンガン入ってる状態で
アクセスひとつひとつの効率が〜とか、いったい何を目指してるの?
って話になる。
314287:2012/08/05(日) 00:36:22.75
>311
スマポの中で行われる排他の話をしているのであって、
スマポに対する排他の話ではないにょろよ

>313
>っていうかそもそも、なるべく共有オブジェクトへのアクセスを
>減らすだろうし
これはごもっとも
コピーできるものはスレッドローカルにした方が速いし問題も少ない

>共有オブジェクトへのアクセスがガンガン入ってる状態で
>アクセスひとつひとつの効率が〜
ああすまん、スマポの参照カウンタの同期が必要、というのはスマポの破棄時のみであって、
スマポを介した他オブジェクトへのアクセスはナマポとあんまり変わらない(コア間同期不要)だな

自己解決しました☆
315デフォルトの名無しさん:2012/08/05(日) 00:38:40.62
>314 訂正;
誤:スマポの破棄時
正:スマポの生成、破棄、所有オブジェクトが変わる(代入等)のいずれかのとき
316デフォルトの名無しさん:2012/08/05(日) 00:50:30.82
韓国ハンファグループ日本法人のハンファ・ジャパンは2日、
総合商社の丸紅が建設を計画している日本全域の太陽光発電所に、
向こう4年間で約50万キロワット分の太陽光モジュールを供給することで
丸紅側と合意したと明らかにした。近く本契約を締結する。

 供給されるモジュールは全てハンファソーラーワンの製品で、
売上額は6000億ウォン(約416億円)に達すると見込まれる。

 日本への太陽光モジュールの供給が本格化したのは、
東日本大震災が発生した昨年3月以降だ。

 ハンファグループは震災後、鳩山由紀夫元首相の支援要請に応じて
太陽光発電システムなど10億ウォン相当の支援を実施。
これを機に金升淵(キム・スンヨン)グループ会長が日本を訪れ、
野田佳彦首相や丸紅の朝田照男社長と面会し、太陽光発電事業での提携を協議した。
http://japanese.yonhapnews.co.kr/headline/2012/08/02/0200000000AJP20120802003300882.HTML



>ハンファグループは震災後、鳩山由紀夫元首相の支援要請に応じて
>太陽光発電システムなど10億ウォン相当の支援を実施。
>これを機に金升淵(キム・スンヨン)グループ会長が日本を訪れ、
>野田佳彦首相や丸紅の朝田照男社長と面会し、太陽光発電事業での提携を協議した。
317デフォルトの名無しさん:2012/08/05(日) 01:01:43.68
>>309
boostもしらないのか? shared_ptrは排他制御のアリナシ選択できるぞ。
318デフォルトの名無しさん:2012/08/05(日) 01:02:40.31
>>314
>スマポの中で行われる排他の話をしているのであって、
>スマポに対する排他の話ではないにょろよ
そういう話じゃなくて、実用上影響が極めて小さくねって話よ。
スレッド上での10分の1の時間をスマポの排他に費やすんならそりゃ問題だが
固定で2μ秒しか消費しないなら気にする必要が無いでしょ。
319デフォルトの名無しさん:2012/08/05(日) 01:05:23.52
スマポで不具合多発する具体例は、生ポとの共生。これが一番来る。
寿命管理に気を使わなくていいスマポで組んでる中に、使用者全員が寿命管理を確実に行わなければならない
ナマポが入ってきたらマジ悪夢。 1コだけでもしゃれにならん。


使うならどっちかに統一下ほうがいいし、どう考えてもスマートポインタベースで、どうしても必要な場合のみ
スマートポインタで寿命管理をしつつ生ポインタも取り出して扱うべき。
320デフォルトの名無しさん:2012/08/05(日) 01:16:34.28
こういうバカが居るから無駄なコストかさんで品質悪い製品が出来上がるんだろうな
どうせスマポ以外も妥協しまくりの糞コード書くんだろ
321デフォルトの名無しさん:2012/08/05(日) 01:17:51.32
>>319
weak_ptrで渡すと、コードが少し冗長になっちゃうのが嫌なんだよな
それでも使うべきなのだろうか
322デフォルトの名無しさん:2012/08/05(日) 01:24:04.20
>>320
C++でスマポ使うのは開発期間短縮のためだよ。低品質でも納期優先なks仕事ばかりなのさ。

>>321
独立したモジュールとかリソースから使い始めてみるといいよ。とくに寿命管理が面倒くさいヤツ。
生ポと相互乗り入れしなきゃ、並列に使うのはさほど問題はない。
323デフォルトの名無しさん:2012/08/05(日) 01:36:10.06
>>319
ナマポはクラスで蓋をすればぜんぜん臭くせずに済ませることもできる(カプセル化)
ていうかスマポ自体その実現方式の一つであるとも言える
大域オブジェクトやSTLのコンテナ要素の管理をスマポに統一するのはそこそこ良い考えだが
あーまあいいや納期までにちゃんと動いて問題が無いものができるなら何だってよろしい
324デフォルトの名無しさん:2012/08/05(日) 01:40:08.21
>>320
無駄なコストって、何のこと言ってるんだ?
325デフォルトの名無しさん:2012/08/05(日) 02:18:04.26
>>323
shared_ptrがナマポにフタしてくれてるんだがねww
326デフォルトの名無しさん:2012/08/05(日) 02:36:26.28
>>325
そう書いてるだろ
327デフォルトの名無しさん:2012/08/05(日) 03:36:08.94
ナマポで生活したいが仕事はしたくないな
328デフォルトの名無しさん:2012/08/05(日) 04:09:58.46
boost::ptr_vectorはスマポじゃないの?
329デフォルトの名無しさん:2012/08/05(日) 04:13:32.89
後でOpenMPで並列化する可能性あるプログラムで
boost::ptr_vector使ってしまった
ptr_vectorの中みてみたらstd::auto_ptrとか使ってるし
並列にしたらバグが出まくるってことでいいのでしょうか
330デフォルトの名無しさん:2012/08/05(日) 04:17:19.03
>>329
「並列にする」の意味もわからんしauto_ptrを中で使ってたらなんだと言うのか。
331デフォルトの名無しさん:2012/08/05(日) 04:40:35.15
>>288
バグがあるかもしれないけど無理矢理書いてみた
普段何気なく使っているvectorの裏側が覗けたような気分になる

http://ideone.com/0EdOx
332デフォルトの名無しさん:2012/08/05(日) 08:49:22.47
OpenMPに対応するときにちゃんと排他しなきゃ
そりゃコンテナのたぐいはなんであれバグるだろうよ
333デフォルトの名無しさん:2012/08/05(日) 14:34:24.07
OpenMPって数学屋さんとかプログラマじゃない人がマルチコアの恩恵を受けるために使うものだと思ってた
334デフォルトの名無しさん:2012/08/05(日) 16:04:34.72
ストラウストラップの本の13章なんですが、
struct Color {
 enum Color_type {
  red = 0, ...
 }
}
ってなっててShape::set_color(Color col)というメソッドに
s1.set_color(Color::red)
って呼び出しできるのはなぜでしょうか?
set_color()の引数はColorオブジェクトのはずなのに
何で列挙のint型整数を渡せるのですか?
335デフォルトの名無しさん:2012/08/05(日) 16:20:27.86
>>334
えっ?渡せないでしょ?
持ってる版が違うのか、ストラウストラップの本でその箇所をみつけられなかったけど
336デフォルトの名無しさん:2012/08/05(日) 16:24:20.53
>334
>何で列挙のint型整数を渡せるのですか?
まず、Color_typeはint型ではない。Color_type→intの暗黙の型変換は行われない
その上でだが、たぶんColor構造体にColor_typeからColorを生成するコンストラクタ
Color::Color(Color_type col)とかが定義されてんジャネーノ
(ストラウストラップの本は引っ張り出していないが、VS2008では(引用コードに抜けているセミコロンをいくつか追加と)
 上記コンストラクタ追加でコンパイルが通る

ちなみにColor_typeがもしクラスか構造体なら、Color_typeにColorへのユーザー型変換が定義されている可能性もある
今回はColor_typeが列挙型なのでその可能性はないが
337デフォルトの名無しさん:2012/08/05(日) 16:24:54.68
>>334
ColorにColor_type(か、同様のもの)を取るコンストラクタない?
338デフォルトの名無しさん:2012/08/05(日) 16:26:52.15
あっ見つけた「ストラウストラップのプログラミング入門」のことか
コンストラクタColor(Color_type)が定義されてるから渡せる
339デフォルトの名無しさん:2012/08/05(日) 16:28:36.86
つかちゃんと説明されてるじゃん
340デフォルトの名無しさん:2012/08/05(日) 16:38:51.50
アドバイスありがとうございます。
ストラウストラップのプログラミング入門の本でした。

>まず、Color_typeはint型ではない。Color_type→intの暗黙の型変換は行われない
>コンストラクタColor(Color_type)が定義されてるから渡せる

いまいちわかってないのですが、Color::redと書いたときに
Color(Color_type)のコンストラクタが呼ばれて自動的にColorオブジェクトが
作られるってことでしょうか?

これは、enumがColorクラス内に書いてあるから可能なのでしょうか?
列挙子は、int型を割り振るものだと思い込んでいたもので。

>つかちゃんと説明されてるじゃん

すみません、見てみたいので場所を教えていただけないでしょうか。
341デフォルトの名無しさん:2012/08/05(日) 16:44:34.04
Color c1(Color::red);
s1.set_color(c1);
これだとColorのコンストラクタはenumのColor_type型をとり、
set_color()は、Colorオブジェクトをとる
ならすぐに納得できたのですが・・・

s1.set_color(Color::red);
だとset_color()がColor_type型をとることになってしまい
型エラーになりそうな気がするのですが・・・
342デフォルトの名無しさん:2012/08/05(日) 16:51:09.47
暗黙的にColor::Color_typeを取るColorのコンストラクタが呼ばれて生成されたオブジェクトがset_color()に渡される
これは変換コンストラクタと言うみたい
343デフォルトの名無しさん:2012/08/05(日) 16:52:32.72
>>340
Color(Color_type)はColor_typeからColorへの変換であるので
コンパイラによる暗黙の変換がされるということ。
この辺りの変換規則は少し分かりずらいけど覚えるしかない。
p.398にColor作成のためコンストラクタを利用してるというhintが
書かれているけど変換規則が分からないと意味が掴めないかも。
344デフォルトの名無しさん:2012/08/05(日) 16:55:30.44
>>341
簡単のため関連するシンボルの公開属性が全部public:でnamespaceも共通である(全シンボルが問題なく見える)として、
 1. Color_typeからColorを生成するコンストラクタColor::Color(Color_type col)が定義されている
2. 上記コンストラクタがexplicitつきでない
場合、
 s1.set_color(Color::red);
という呼び出しは、
 s1.set_color(Color(Color::red));
として解決され得る、だったハズ、
暗黙の型変換絡みはいろいろややこしい
345デフォルトの名無しさん:2012/08/05(日) 17:00:58.80
変換コンストラクタですね・・・初めて聞きました。
ヒントにさらっと書いてあったのがこのことだとわかりませんでした。
とりあえず暗黙の型変換で置き換えられるというのはわかったので
納得して先へ進もうと思います。

ありがとうございました。
346デフォルトの名無しさん:2012/08/05(日) 17:41:05.54
>>333
OpenMPよりもパフォーマンス出せる例というと
どんな場合がありますか?
347デフォルトの名無しさん:2012/08/05(日) 21:02:40.05
>>326
スマートポインタで実現されていることを自前でそれぞれやるのを推奨するようなアホな書き込みだってことだろ
348デフォルトの名無しさん:2012/08/05(日) 21:09:13.19
自前の管理システムなら一箇所で複数のポインタを管理できる
スマポはポインタ一つを一つの管理者が管理するから冗長で無駄だらけ
そもそもスマポでくるんでもくるまなくてもどちらにせよオブジェクトをなんらかの目的で管理するシステムを書くのだからそのシステムに寿命管理も組み込めば済む話だよね
349デフォルトの名無しさん:2012/08/05(日) 21:10:44.60
いちいち自前の管理システムを使わないといけないのか。最悪だな
350デフォルトの名無しさん:2012/08/05(日) 21:21:34.54
スマポと同等機能をポインタの種類分、毎回コーディングしてるのか。

胸が熱くなるな。
351デフォルトの名無しさん:2012/08/05(日) 21:23:44.67
>>348の設計は、1つのクラスに2つ以上の機能があるな
352デフォルトの名無しさん:2012/08/05(日) 21:40:17.26
スマポを毎回書いていると聞いて金玉がヒュンとなった
353デフォルトの名無しさん:2012/08/05(日) 21:45:55.37
>>346
MPIとかスレッドプールじゃね
354デフォルトの名無しさん:2012/08/05(日) 21:46:36.11
>>348
個別管理で無駄が生じるケースも稀だし、その無駄が有意な差として顕在化することもさらに稀だろう。

個別管理の無駄によって性能要件を満たせなくなったのなら自前管理を書いてもいい。
ただし計測環境と結果をコメントで添えたうえでな。
355デフォルトの名無しさん:2012/08/05(日) 21:47:01.37
普通書くだろ
スマポつっても場面場面で答えは違うし
十分もあれば新しいのかけてパフォーマンス上がるんだからめんどくさがらずに書くべき
356デフォルトの名無しさん:2012/08/05(日) 21:48:01.45
>>351
>>348と全く関係ないけど1つのクラスで機能1つだけってどんな状態?
357デフォルトの名無しさん:2012/08/05(日) 21:51:36.40
パフォーマンス、パフォーマンスってどんな用途でスマポがボトルネックになってんだよ
358デフォルトの名無しさん:2012/08/05(日) 21:58:10.76
>>357
インスタンスの生成消滅サイクルが早いときやソートを頻繁に行うときとか無視出来ない

359デフォルトの名無しさん:2012/08/05(日) 22:03:31.73
>>352
つ 去勢手術
360デフォルトの名無しさん:2012/08/05(日) 22:03:36.98
>>358
ソートを頻繁に行うとは?
Codepadに貼り付けて速度測ってくるから具体例を書いてくれ
361デフォルトの名無しさん:2012/08/05(日) 22:14:48.91
>>358
空間効率なのか時間効率なのか、時間効率だとすればどの操作について言ってるのか?
362デフォルトの名無しさん:2012/08/05(日) 22:15:51.48
どうせまたスマポといえばshared_ptrしか頭に無い人がわめいてるんでしょ。
363デフォルトの名無しさん:2012/08/05(日) 22:28:40.76
今はsharedの話だろ
再発名や自前の管理コード書くのだるいからって文脈なんだから
364デフォルトの名無しさん:2012/08/05(日) 22:29:58.79
>>360
ゲームとか作ればわかる
365デフォルトの名無しさん:2012/08/05(日) 22:31:05.66
>>361
スマポは両方クソだからな
366デフォルトの名無しさん:2012/08/05(日) 22:34:46.28
>>364
作れば判るじゃなく、具体的コードを示してくれ
367デフォルトの名無しさん:2012/08/05(日) 22:45:49.15
>>365
auto_ptr, unique_ptr は空間効率も時間効率も生ポインタと変わらないんだが。
368デフォルトの名無しさん:2012/08/05(日) 22:46:47.79
>>363
ならshared_ptrと言え。「スマポ」で括るな。
369デフォルトの名無しさん:2012/08/05(日) 23:00:41.59
>>366
面倒
370デフォルトの名無しさん:2012/08/05(日) 23:01:19.27
>>367
ダウト
371デフォルトの名無しさん:2012/08/05(日) 23:01:38.59
はい、計測せずに言ってることがバレました。
372デフォルトの名無しさん:2012/08/05(日) 23:02:43.06
>>370
疑うんなら差が出るコードを作ってみろよ。
373デフォルトの名無しさん:2012/08/05(日) 23:03:26.86
>>372
削除子使えば悪くなるのは当然だろ
374デフォルトの名無しさん:2012/08/05(日) 23:07:29.69
>>369
グラフィック処理してるが基本はプロファイラー
実測なしで判断しようがない
問題箇所だけなら50行も掛からんだろ
それぐらい渋るな
375デフォルトの名無しさん:2012/08/05(日) 23:11:58.42
スマポでパフォーマンスに影響が出るほど 作成削除してたら、
使わないでも酷い状況になってると思うがw
376デフォルトの名無しさん:2012/08/05(日) 23:13:48.54
unique_ptrのコストが問題になるってそれ生ポ使ってももうダメだろ
377デフォルトの名無しさん:2012/08/05(日) 23:16:20.30
>>373
削除子使ってもサイズ変わらんぞ。
http://ideone.com/Fs05r
struct MyDelete { void operator () (int* p) const; };
static_assert(sizeof(std::unique_ptr<int, MyDelete>) == sizeof(int*),"");
378デフォルトの名無しさん:2012/08/05(日) 23:19:52.16
>>377
アホか
379デフォルトの名無しさん:2012/08/05(日) 23:24:37.26
>>378
373の「削除子使えば」がこれと違うんなら、説明してもらわねばわからん。

つーか、削除子要らない普通の delete ならパフォーマンス違わないのは
認めてるってことでいいの?
380デフォルトの名無しさん:2012/08/05(日) 23:29:26.42
>>379
コンパイルのパフォーマンス最悪だろ
381デフォルトの名無しさん:2012/08/05(日) 23:41:43.61
>>380
あー <memory> クソ重いよな。 <unique_ptr> とか <allocator> とか分けて欲しい。

で、 >367 は認めるってことでいいの?
382デフォルトの名無しさん:2012/08/05(日) 23:47:21.30
主語が抜けてる奴にアホ呼ばわりされたくは無いわな
383デフォルトの名無しさん:2012/08/05(日) 23:49:24.72
>>381
デリータによるが?
384デフォルトの名無しさん:2012/08/05(日) 23:53:22.15
>>383
どんなデリータの話をしてる?状態持ち?
それは生ポインタを使うとどんなコードになるのか、考えて言ってるのか?
385デフォルトの名無しさん:2012/08/06(月) 00:00:01.14
>>384
ローカルなアロケーターもたせると参照の複製が全部に必要になる
集中管理なら実体一つで十分
スマポ終わったな
386デフォルトの名無しさん:2012/08/06(月) 00:17:47.06
>>385
それなら確かにデリータ付きの unique_ptr は効率悪くなるな。

それでもって「スマポ効率悪い」とかいうのはおかしいけど。
387デフォルトの名無しさん:2012/08/06(月) 00:52:13.02
最適化を前提にしてんのか?
388デフォルトの名無しさん:2012/08/06(月) 00:53:47.19
効率がどうこう言ってて最適化抜いてるわけないだろ。
389デフォルトの名無しさん:2012/08/06(月) 01:01:57.12
速度が気になる場面が来るまではスマポ使ってればいいじゃん
全体の8割は速度どうでもいいんだから、本当に気になる2割で
ナマポを気をつけて使えばいい
390デフォルトの名無しさん:2012/08/06(月) 01:14:28.68
ナマポのみとスマポのみで開発した場合、開発期間が50%程度短縮されると思うんだが。
391323:2012/08/06(月) 05:17:10.27
>>347
別に漏れは>323においてナマポにクラスで蓋をできると言っただけであって、
蓋をする手段の中でスマポを使うことまで否定したつもりはないにょ
(コンストラクタ内での例外でリソースリークする危険性を完全に封じるのにauto_ptr<T>ぐらいは使うし
また、一般にナマポ p = new T(); をスマポ p(new T());に変えることはだいたい正義なことはわきまえておりますにょ
しかしたとえばナマポ配列において、配列の破棄日時≦要素の破棄日時が保証されたコードが既存であるときに、
いちいちstd::vector<スマポ<ナマポの指す型> >に書き換えて計算量増大のリスクを犯すよりは
std::vector<ナマポ>ぐらいにしといて外から要素のナマポが一切見えないようにクラスで蓋をすることを選ぶわ
とかいろいろ〜
(なおこのような改造の場合、コンストラクタ内例外への対処としてスマポ<ナマポの指す型>を使うわけにはいかず
そこは専用のdeallocatorを書く、しかしクラスで蓋をする。結果的にスマポの出番無し、というケースがしばしばある
392デフォルトの名無しさん:2012/08/06(月) 05:41:08.73
>>391
なんだ・・・スマポ使いかよ・・・
393デフォルトの名無しさん:2012/08/06(月) 06:25:26.80
スマポ マルチスレッド タイガーバーム
394デフォルトの名無しさん:2012/08/06(月) 14:30:28.67
>>391
軽量スマポの場合、std::vector<ナマポ>とstd::vector<スマポ<ナマポの指す型> >で計算量の違いって本当にあるか?
そのケースだと俺もナマポ使うだろうけど。
395デフォルトの名無しさん:2012/08/06(月) 14:39:14.60
std::vector<std::unique_ptr<> >使うわ
396デフォルトの名無しさん:2012/08/06(月) 14:55:49.14
あるかないかで言えばあるけど、普通ボトルネックにならんよな
自分以外の誰かが触るか、開発期間が長期化するか、とか
そのあたりの速度以外の観点で使うかどうか決めるわ
397デフォルトの名無しさん:2012/08/06(月) 19:56:27.04
>>364
ゲームなんか作らんから判らんわ〜
コーディックの保守してるけどスマポ自体がボトルネックになったこと無いわ〜
フレームを跨ぐ動体の追跡とかでソート使うけど
対象判定処理の方がよっぽど時間がかかってスマポで削った僅かな時間で
どうにか出来そうとか思ったことないわ〜
398デフォルトの名無しさん:2012/08/06(月) 21:46:15.26
ゲーム会社でゲーム作ってるけどスマポのコストが問題になったことなんて一度もないわ
399デフォルトの名無しさん:2012/08/06(月) 22:01:27.95
プログラマでゲーム作ったことない奴は地雷
400デフォルトの名無しさん:2012/08/06(月) 22:19:13.36
ゲームつってもオセロもテトリスも将棋もゲームだからな
401デフォルトの名無しさん:2012/08/06(月) 22:22:11.97
テトリスはともかく、将棋は処理速度が半端なく要求されるよね
こういうジャンルではスマポうんぬんは確かに響くと思う
402デフォルトの名無しさん:2012/08/06(月) 22:24:47.72
ゲームは環境の制約もあるからなぁ
ゆとりたっぷりの富豪プログラミングできる人が羨ましいわ
403デフォルトの名無しさん:2012/08/06(月) 22:25:40.50
将棋でスマポもクソもねぇよ
本格的にやるならビット演算入れるし
構造体やクラスレベルの処理より
コンテナや配列操作に時間掛けるほうが多いだろ
404デフォルトの名無しさん:2012/08/06(月) 22:37:35.16
いまじゃ将棋の板も32bitで3個、64bitで2個あれば
盤面の有無状態が表せるしな。
コマの種類も10種類しかいらないから4bitでいい。
コマの種類と盤面の状態、手持ちを一つの配列にすりゃ
コンパクトでかなりの並列性が得られる。
便利な時代になったもんだよ。
405デフォルトの名無しさん:2012/08/06(月) 22:38:00.00
>本格的にやるならビット演算入れる

わらかすな。
406デフォルトの名無しさん:2012/08/06(月) 22:40:28.50
その程度のドカタが混じってもぶち壊さないで済むように、スマポやらGCやらが発展してるんだから。
ただ、「マトモに組める人」と「底辺」の効率の差は、10倍なんてもんじゃないんだけどね。
407デフォルトの名無しさん:2012/08/06(月) 22:42:31.45
>>405
あの程度のものを整数型1つでひとコマとか
構造体1個でひとコマとかやってんの?
408デフォルトの名無しさん:2012/08/06(月) 22:44:10.89
効率は実測が基本。
409デフォルトの名無しさん:2012/08/06(月) 22:44:56.66
>>407
今の将棋プログラムが、その程度の「当たり前の効率化」をやってないとでも思ってるの?

「ビット演算で効率化することを思いついた俺ってかっこいい」って?
410デフォルトの名無しさん:2012/08/06(月) 22:46:20.03
はからなくてもみつもれるのが二流の最低ラインって常識だろ
411デフォルトの名無しさん:2012/08/06(月) 22:47:50.38
そうだな。「はからなくてもみつもれる」なんて言っちゃうやつは三流だよな。
412デフォルトの名無しさん:2012/08/06(月) 22:49:42.83
将棋やオセロ類は実測すりゃビット演算が響くよ
処理消費が全体で65%近くになるから
小手先だけで10倍近く処理が縮む
枝が増えればキャッシュミス増えて速度も安定しないし
413デフォルトの名無しさん:2012/08/06(月) 22:50:30.41
>>409
当たり前の話なのになんで突っかかってんの?
知らなかったの?
414デフォルトの名無しさん:2012/08/06(月) 22:52:08.29
>>411
三流実測厨は黙ってろ
415デフォルトの名無しさん:2012/08/06(月) 22:52:18.89
ごめん10倍どころではないな。
詰で30分掛かってた所が1分足らずに改善したこともあった。
416デフォルトの名無しさん:2012/08/06(月) 22:53:06.49
最近は最適化やら何やらで糞コードでもそれなりには出るからね。
値渡しと参照渡しの違いが分からないまま走ってる人もいるんじゃないの。
417デフォルトの名無しさん:2012/08/06(月) 22:56:24.82
>>413
>本格的にやるならビット演算入れるし

ビット演算を使う程度のことが「本格的にやる」に含まれると
そう考えている人がいることに、まさに驚愕したよ。
そんな世界、全然知らなかったから。
418デフォルトの名無しさん:2012/08/06(月) 22:58:23.09
おい、おまえらポインタどこいった
419デフォルトの名無しさん:2012/08/06(月) 23:02:13.44
>>409
何が言いたかったの?
420デフォルトの名無しさん:2012/08/06(月) 23:02:59.32
>>417
本格的にやらないなら配列で済ませるよ?
421デフォルトの名無しさん:2012/08/06(月) 23:04:51.87
本気でやらないならむしろコマも盤面もオブジェクト化して
グラフで繋ぐわ。やってて面白い。
422デフォルトの名無しさん:2012/08/06(月) 23:05:22.84
ぶひひ
423デフォルトの名無しさん:2012/08/06(月) 23:11:00.79
>>417
本格的じゃなくてもビット演算使ってちまちま作る人か
424デフォルトの名無しさん:2012/08/06(月) 23:12:58.02
多分いつでも速度に妥協しないナマポさんなんだろ
425デフォルトの名無しさん:2012/08/06(月) 23:42:52.41
>ビット演算を使う程度のことが「本格的にやる」に含まれると
>そう考えている人がいることに、まさに驚愕したよ。
>そんな世界、全然知らなかったから。

簡単な要件でもビット演算使うのが常識とかいう思考勘弁してほしいわ
426デフォルトの名無しさん:2012/08/06(月) 23:51:46.12
C/C++のビット演算がどんなコードに展開されてるか見た事あるか?
ひでえコードだぞ

compiler intrinsicsに置き換えた方が良いと思う
427デフォルトの名無しさん:2012/08/06(月) 23:52:32.86
はした金詰まれればどんな案件でも方針でも文句言わずやる
お前らにはその心意気が足りん
正しい正しくないじゃ無いんだよこの業界
上司がナマポ教なら部下も改宗しないとダメ
それができないなら解雇だな
428デフォルトの名無しさん:2012/08/06(月) 23:56:19.61
>>426
コンパイラー次第だろ
プロファイラーで改善が見られれば十分
429デフォルトの名無しさん:2012/08/06(月) 23:59:56.46
>>425
俺は>>417じゃないけど、それは単に君のレベルが論外に低いからだって。

ビット演算なんかそんな気張って使うようなものかよ。
非常識過ぎる。
430デフォルトの名無しさん:2012/08/07(火) 00:06:56.60
腕次第
431デフォルトの名無しさん:2012/08/07(火) 00:08:51.14
ID記念パピコ
432デフォルトの名無しさん:2012/08/07(火) 00:22:07.79
>>429
ビットフラグだの符号の取り出しだのその程度なら解るが
速度求めてないのに一般に配列で済むような物をビット演算するとか無いわ
気張ると改善に時間の無駄だろ
433デフォルトの名無しさん:2012/08/07(火) 00:31:52.67
>>427
筋さえ通りゃ金次第で何でもやってのける命知らず
不可能を可能にし 巨大なプロジェクトを粉砕する
434デフォルトの名無しさん:2012/08/07(火) 01:18:07.84
CG関係ってビット演算なんじゃないの?
最近はその辺は全部自動なのか
435デフォルトの名無しさん:2012/08/07(火) 01:35:28.05
はあ?
436デフォルトの名無しさん:2012/08/07(火) 01:50:34.96
まずCGってのがなんなのかの説明から必要。
わけのわからん個人的な思い込みを一般常識的に考えるのはやめよう。
437デフォルトの名無しさん:2012/08/07(火) 04:35:57.70
自称自分はすごい人の予感・・・
438デフォルトの名無しさん:2012/08/07(火) 05:11:31.30
結局,OpenMP使うより速度が上がる
テクニックってどんななの?
439デフォルトの名無しさん:2012/08/07(火) 11:10:20.43
バリアント型みたいなのを作ってるんだけど
中身がdoubleのときのdouble同士の四則演算は
doubleのを使ってほしいし
中身がstringのときはstringのを使ってほしい

今はoperatorを乗っ取ってif文で分岐してるけど
異種間のときだけ変換を手助けすればすむようにしたい
440デフォルトの名無しさん:2012/08/07(火) 11:16:05.03
>>439
そうですか。
441デフォルトの名無しさん:2012/08/07(火) 11:48:13.12
>>440
そうなんです。
442デフォルトの名無しさん:2012/08/07(火) 11:54:25.07
>>441
頑張ってくださいね。
443デフォルトの名無しさん:2012/08/07(火) 12:50:37.38
>>442
はい。
444デフォルトの名無しさん:2012/08/07(火) 12:51:25.86
doubleクラスってあるの?
445デフォルトの名無しさん:2012/08/07(火) 13:08:28.06
>>438
自前で並列化を全て制御した方がパフォーマンス上がるのはごく普通のこと。
もっとも、下手にやるならOpenMPの方がマシってのはあるけど。
下手な人がアセンブラで書いたってコンパイラにすら負けるという事態がよくあるように。
446デフォルトの名無しさん:2012/08/07(火) 19:06:06.74
>>439
type_traints
447デフォルトの名無しさん:2012/08/07(火) 20:25:01.54
>>438
単にMPIに変えただけでも速くなる
448デフォルトの名無しさん:2012/08/08(水) 01:19:14.48
C++で質問なんですが。
最近プログラムの高速化について調べているのですが
最近のCPUはどんどん高速化していって、キャッシュサイズ等も増えてきているが
メモリはパスの互換性の問題等から速度は昔とあまり変わっていないので
速いプログラムを書くにはメモリとあまりやりとりせずにCPUのキャッシュに乗せるのが
有効とあったのですが、プログラムでCPUのキャッシュに乗せるというのがイメージできません。
コードで明示的にキャッシュに乗せる事は出来るのでしょうか?それとも、キャッシュにのるサイズのデータなら
自動的にキャッシュを使われるようになっているのでしょうか?
449デフォルトの名無しさん:2012/08/08(水) 01:21:25.63
メモリ効率を考えれば自然にキャッシュ効率もよくなることが多いよ
450デフォルトの名無しさん:2012/08/08(水) 01:26:03.98
>>448
キャッシュの仕組み調べてみれば判ると思うよ。

使用するメモリがキャッシュサイズ以下で連続していれば乗っかってアクセススピードが改善される。
451デフォルトの名無しさん:2012/08/08(水) 01:46:26.08
C/C++つこてるとチョットした事でスグだいなしに成るからキャッシュなんて気にする必要は無いんじゃないかな
452デフォルトの名無しさん:2012/08/08(水) 05:25:15.07
そうでもないよ。ランダムアクセスするよりシーケンシャルアクセスした方がずっと速い。
453デフォルトの名無しさん:2012/08/08(水) 06:57:12.62
>>448
100万回とかそれ以上の計算をCPUのキャッシュサイズ超える配列と
キャッシュサイズに収まる配列でやって測ってみりゃいいだろ
454デフォルトの名無しさん:2012/08/08(水) 08:47:15.96
大きめの多次元配列を走査する多重ループのループ変数を入れ替えて計算してみるとどうすればキャッシュ効率いいか見えてくる
455デフォルトの名無しさん:2012/08/08(水) 14:18:40.06
大容量L3キャッシュを備えているという事は、それだけフラッシュ/再フィルにも
時間が掛かるって事だぜ

だから一概に速くなるとは言えない
小規模なループなら速くなるだろうけど、メモリを広くランダムにアクセスするような
プログラムではむしろメモリの速度とレイテンシの低さが効いてくる
456デフォルトの名無しさん:2012/08/08(水) 14:55:38.87
御託並べるなら該当スレに行ってくれ。その辺りになると、最早C++標準から遠ざかり過ぎている。
457デフォルトの名無しさん:2012/08/08(水) 15:38:41.43
llvm clangとgccはどっちが速いのか
458デフォルトの名無しさん:2012/08/08(水) 17:07:30.41
const変数って定数にコンパイル時に定数に置き換えられるんですか?
459デフォルトの名無しさん:2012/08/08(水) 17:15:20.17
定数式で初期化されたconst変数は定数として扱われます
460デフォルトの名無しさん:2012/08/08(水) 17:18:43.03
ありがとうございます。
最後に静的const 動的const
まとめてconst変数ということを付け加えて
質問を終わらせていただきます。
461デフォルトの名無しさん:2012/08/08(水) 21:46:50.11
静的const =rvalue
動的const =lvalue
ってことでいいの?
462デフォルトの名無しさん:2012/08/08(水) 22:46:10.19
動的const, 静的constってオレオレ用語か伝わればいいわってぐらいで見てたが
用語の意味を知りたいなら正しい用語を使え。動的const, 静的constなんか無い。
それからconstは右辺値しかない。const_castでconst外せるが、外したらそれはもうconst変数じゃない。
463デフォルトの名無しさん:2012/08/08(水) 23:30:23.86
> constは右辺値しかない

マジで!?
464デフォルトの名無しさん:2012/08/09(木) 00:47:36.34
static関数の用途は大量にあるのに
static変数(非const)の用途ってホントねぇなぁ。
シングルトンだのオブジェクトのカウントだの方法論だけはあるが
実際何に使うかってのが全然ない。
ファクトリー用のホルダーに使おうかと思ったが
影響範囲がデカすぎる。何かしら使おうとすると影響範囲の広さがガンになる。
465323:2012/08/09(木) 01:29:41.09
>>394
別に計ったわけではないが、
100万要素のstd::vector<T>が100万1要素に増えたとき、
Tのコピコンが100万回呼ばれて、その後Tのデストラクタが100万回呼ばれるわけじゃん?
さらにT*なら1要素8バイトで住むところが、shared_ptr<T>あたりだと一気に16バイトじゃん?
466デフォルトの名無しさん:2012/08/09(木) 01:37:15.13
>>465
ユニポなら問題ないじゃん?
467デフォルトの名無しさん:2012/08/09(木) 01:59:26.99
ユニポはようわからんのだけど、
コピコンもデストラもナマポより時間コスト大でねえが
つまり、複数のユニポが同一のアドレスを指さない、という規則からすれば、
コピコンでコピー元は所有権を失わねばならないから、0にでもせざるを得ないので、0にするオペレーションが1回、
デストラで0かどうか判定して、0でないときのみヒープ開放という条件分岐が1回、
それぞれ増えるんではないの
468デフォルトの名無しさん:2012/08/09(木) 02:20:45.67
>>455
3次キャッシュのご利益は、マルチコア構成においてコア間でデータの一貫性を保つのに要する時間を
短縮できるところにある(外部メモリからでなく、3次キャッシュから2次キャッシュをfillすれば良いので)
インテルかどっかが試験的に48コアとか作ってたと思うが、あれは3次キャッシュはあっても
3次から2次へのfillは自動では行われない

上で思わずIAにスヌープを高速で行う特殊なハードウェアが用意されていないみたいなことを書いたが
正確ではなかったかも試練、orz
469デフォルトの名無しさん:2012/08/09(木) 02:39:32.36
>>465
そのウンコみたいなコードはちょっと手を入れたほうがいいんじゃね?
470デフォルトの名無しさん:2012/08/09(木) 08:00:10.03
ユニポ厨はアホ
ポインタは複製が作れてなんぼだろ
パフォーマンスが同等でもユニポの利用シーンは限られてくる
471デフォルトの名無しさん:2012/08/09(木) 08:01:41.64
ユニポでもポインタの複製は作れるだろ
472デフォルトの名無しさん:2012/08/09(木) 08:32:21.68
>>463
int const x; で const な左辺値ができる。何かの間違いだろ。
473デフォルトの名無しさん:2012/08/09(木) 08:34:50.08
>>472
それはエラーだ。
474デフォルトの名無しさん:2012/08/09(木) 08:43:14.43
>>467
その考察は正しいと思うけど、実際にはそれで増える処理時間がネックになることは
ほとんど無いだろうから、そこを疑って計測もせずに生ポインタを使うという選択には
ならない。
475472:2012/08/09(木) 08:52:43.80
>>473
あ、ごめん。 int const x = 0; で。
476デフォルトの名無しさん:2012/08/09(木) 08:55:46.12
クライアントコードで使うやっつけ仕事ならスマポがベストだ
ライブラリ制作ではナマポか最悪でもユニポにしたほうがいい
477デフォルトの名無しさん:2012/08/09(木) 09:00:05.64
またスマポ=shared_ptrの人か。ブレないな。
478デフォルトの名無しさん:2012/08/09(木) 09:08:35.23
>>477
実際もっとも代表的なスマポがshared_ptrだろ
いい略称もないしスマポといったら暗黙にshared_ptr
ほかのスマポはわかるように書く
これがベストなのは言うまでもない
479デフォルトの名無しさん:2012/08/09(木) 09:10:38.55
auto_ptrさんのことを忘れるなよ
480デフォルトの名無しさん:2012/08/09(木) 09:14:30.26
>>478
お前ん中ではな
481デフォルトの名無しさん:2012/08/09(木) 09:17:06.33
>>480
いやいや、常識です
482デフォルトの名無しさん:2012/08/09(木) 09:23:28.50
483デフォルトの名無しさん:2012/08/09(木) 09:24:46.40
>>482
世間にもっと目向けてみ?
ひきこもってちゃ何も分からないよ?
普通スマポって言ったらまずshared_ptrを思い浮かべるからな
484デフォルトの名無しさん:2012/08/09(木) 09:30:26.59
>>483 要出典
485デフォルトの名無しさん:2012/08/09(木) 09:31:43.47
>>483
仮にそうだとしてさ、効率の議論をしてるそばで効率特性のまったく違うものを
ごっちゃにするような呼称を使うのはダメだろ。
486デフォルトの名無しさん:2012/08/09(木) 09:53:16.41
>>485
ごっちゃになってないよ
スマポ→shared_ptr
ユニポ→unique_ptr
ナマポ→生ポインタ
auto_ptrは議論に含めない
標準ならこれで十分だし今は非標準の話はしてないでしょ
487デフォルトの名無しさん:2012/08/09(木) 09:59:22.34
スマポの本質はRAIIであり例外安全だ
だから基本はauto_ptr(C++11ではunique_ptr)

shared_ptrは利便性とコストのトレードオフを考えてから使うもので
代表的なわけが無い
488デフォルトの名無しさん:2012/08/09(木) 10:04:25.16
>>486
まさに お前ん中ではな としか言いようが無いなw
489デフォルトの名無しさん:2012/08/09(木) 10:08:32.07
>>488
論理的に考えろバカ
標準でポインタといったらshared_ptr,unique_ptr,*の三種類だ
そしてunique_ptrはユニポ、*はナマポと使い分けてる
残ったスマポは同じく残った一つのshared_ptrをさす以外にないだろ
理系じゃないやつには一から説明しないとわからないか?
490デフォルトの名無しさん:2012/08/09(木) 10:10:55.84
>>486
unique_ptr ∈ スマートポインタは事実であり、「スマポ」は
スマートポインタのことだろうというコンセンサスのもと
「スマポ」が unique_ptr を除外するような分類は通じない。
491デフォルトの名無しさん:2012/08/09(木) 10:11:02.14
>>487
機能の問題じゃない
歴史的経緯からいってスマートポインタっていったら思い浮かべなきゃいけないのはまずLoki::SmartPtrかboost::shared_ptrなんだよ
そこから知名度で絞ってboost::shared_ptrが来るだろ?
それを標準で置き換えたstd::shared_ptrがスマポの代名詞になるのが当然の流れだ
492デフォルトの名無しさん:2012/08/09(木) 10:13:47.30
>>489
論理的に考えろバカ
混乱するという指摘がある中でカタカナ3文字の略称にこだわる必要がないだろ
493デフォルトの名無しさん:2012/08/09(木) 10:13:58.01
>>490
お前はそんなんだから友達いないんだよ
日常的なコミュニケーションレベルの話で、
重箱の隅つついてこれは数学的には〜だから〜無い〜ハイ論破〜っていまどき小学生でも言わないよ?
何時何分何秒地球が何回まわった時?みたいな言葉遊びレベルにも劣る
494デフォルトの名無しさん:2012/08/09(木) 10:15:30.06
>>492
混乱してるのは身勝手な俺理論で自爆してる奴だけ
常識的な感覚持って素直に「スマポっていったら普通sharedだよね〜」って受け入れれば済む話
495デフォルトの名無しさん:2012/08/09(木) 10:16:53.36
>>489
unique_ptr ⊂ Smart pointer
論理的()

>>491
最初にC++の標準として採用されたのはstd::auto_ptr
歴史的()

>>493
最後はレッテル貼りかw
馬鹿の極みだな
496デフォルトの名無しさん:2012/08/09(木) 10:17:32.73
>>493-494
なんだお前、論理的に考える理系じゃなかったのかよwww
497デフォルトの名無しさん:2012/08/09(木) 10:21:47.01
頭堅いなぁお前ら
そんなんじゃ日常生活にも困るレベルだべ?
498デフォルトの名無しさん:2012/08/09(木) 10:24:18.69
オレオレ定義をさも常識のように語るお前の方が頭堅いよ
499デフォルトの名無しさん:2012/08/09(木) 10:25:58.71
>>495
機能的な包含関係じゃなくて
今は識別子での関係を議論してんだよカス
int hoge; long fuga;
だからhoge ⊂ fugaだぜぇ〜的なあほなこと言ってるのがお前な

最初に(爆笑)
お前は物事の最初だけしか見ないのかよwwwwwwそのあとどうなった?黒歴史に認定されただろうがwwwww
お前の言い分が通るなら歴史的に天動説が最初だから天動説が正しいんだよ〜〜〜〜って言ってるようなもん。完全なる白痴wwwww

レッテル張り?何言ってんだ冷静にお前を評価しただけ
韓国人は屑って、当たり前のこと言って、レッテル張り乙って反論された気分だわwww
500デフォルトの名無しさん:2012/08/09(木) 10:28:22.29
これはもうさすがにわざとだろ。
501デフォルトの名無しさん:2012/08/09(木) 10:32:20.99
この板はなぜかIDが出ないからなぁ
502デフォルトの名無しさん:2012/08/09(木) 10:32:37.89
>黒歴史に認定
もしかしてunique_ptrに置き換えられたことを言ってるのだろうか
もしそうなら初心者丸出しだが
503デフォルトの名無しさん:2012/08/09(木) 10:38:19.68
初心者でごめん
504デフォルトの名無しさん:2012/08/09(木) 10:38:37.91
>>502
何言ってんだこいつ
505デフォルトの名無しさん:2012/08/09(木) 10:57:17.20
ナマポ最強って事で手を打て。
506デフォルトの名無しさん:2012/08/09(木) 11:06:02.74
そうだなナマポで書くのが最強だな
どうしてもスマポ使いたいあほがいた場合にもナマポからの乗り換えなら簡単だし
逆にスマポからナマポに乗り換えるのは面倒が多い
スマポで書いたコードは再利用しにくく、再利用を繰り返すとスマポ使用コードがどんどん拡大していく
そしてauto_ptrからunique_ptrへの乗り換え、boostからstdへの乗り換えが同時多発的に起こるとその不都合が目に見えて表れてくる
boost::shared_ptrを返すファクトリを再利用しようとしたのに、新しいプロジェクトではstd::shared_ptrやstd::unique_ptrを使うルールでやっていて、変換作業が追加されてだるい、といったことがそこかしこで起こるんだ
でもナマポで書いたファクトリだったらならstd::shared_ptrやstd::unique_ptrを、あるいはboost::shared_ptrを義務付けたプロジェクトでもたやすく再利用できる
507デフォルトの名無しさん:2012/08/09(木) 11:13:37.45
>>503-504
auto_ptrは初期のムーブセマンティクスと言えるもの
C++11でムーブセマンティクス及び構文を整理した結果
コピーセマンティクスでムーブを行うauto_ptrと齟齬が起きた

しかしauto_ptrを直接修正すると既存コードがコンパイル出来なくなるため
齟齬が無いよう修正した実装を別の名前unique_ptrで提供して
auto_ptrを非推奨とすることになった

http://ideone.com/cb4Ie
auto_ptrをunique_ptrに置き換えた上で、左辺値からムーブしている箇所に
std::moveを付加する必要がある
508デフォルトの名無しさん:2012/08/09(木) 11:20:21.03
>>507
チゲーよauto_ptrはSTLでまともに使えねーからぶっちされたんだよ
その時点でauto_ptrは黒歴史認定されてboost::shared_ptrかそれに相当するスマポへ移行してたんだよ
unique_ptrへの置き換えなんてのは後付けの理由の一つでしかない
509デフォルトの名無しさん:2012/08/09(木) 11:21:55.55
>>506
生ポインタでいいってことは単に new した( delete しないといけない)ポインタ返すだけで
いいってことだとして、それなら std::auto_ptr 使っとけば boost::shared_ptr, std::unique_ptr,
std::shared_ptr のどれにも簡単に変換できるから別に困らないよ。
510デフォルトの名無しさん:2012/08/09(木) 11:24:50.94
>>508
> チゲーよauto_ptrはSTLでまともに使えねーからぶっちされたんだよ

それが「コピーセマンティクスでムーブを行うauto_ptrと齟齬が起きた」なんだろ。

> その時点でauto_ptrは黒歴史認定されてboost::shared_ptrかそれに相当するスマポへ移行してたんだよ

コンテナに入れるなってことになっただけで、それ以外では普通に使えたよ。
511デフォルトの名無しさん:2012/08/09(木) 11:26:24.41
>>509
あふぉか
auto_ptrじゃカスタムデリータつかえんだろ
ポインタはすべてnew/deleteとかどんだけ〜

>>510
×普通に使えていた
○不便に目をつぶり慎重に取り扱っていた
512デフォルトの名無しさん:2012/08/09(木) 11:29:13.89
>>511
「コンテナに入れるな」以外でauto_ptrの何が不便だったの?
513デフォルトの名無しさん:2012/08/09(木) 11:30:12.72
スマポ版、Erが例外を投げてもリークしない
http://ideone.com/AZ2sV

ナマポ版、B()未実装
http://ideone.com/dA56A

ナマポ派の人、これのB()でa,b,cにnewする
例外安全なコードを書いてみてくれないか?
514デフォルトの名無しさん:2012/08/09(木) 11:31:18.61
>>511
確かにカスタムデリータが要るならauto_ptrは使えない。
ならunique_ptr相当のものが要るな、って話になるだけ。
生ポインタにはならない。
515デフォルトの名無しさん:2012/08/09(木) 11:45:25.86
>>513
こんなくだらない問題だして何がしたいの?
http://ideone.com/YD9A6
516デフォルトの名無しさん:2012/08/09(木) 11:53:09.68
~B(){delete c; delete b; delete a;}
も書いとけよw
517デフォルトの名無しさん:2012/08/09(木) 11:53:39.68
>>515
出題者でもないしそのコードがまったくダメだとも言わないが、代入2回になってるのは気になるな。
unique_ptrなら初期化で済む。
518デフォルトの名無しさん:2012/08/09(木) 11:54:46.01
>>516
それを言うならコピーとかムーブとかも・・・
やっぱ生は無いな、実際。
519デフォルトの名無しさん:2012/08/09(木) 11:55:54.30
>>516
ナマポだとそういううっかりがあるんだな
520デフォルトの名無しさん:2012/08/09(木) 11:56:13.67
>>515
new使用箇所全部そのように書いてるなら問題無いよ
単に手間じゃ無い?って思っただけ
521デフォルトの名無しさん:2012/08/09(木) 12:02:48.42
>>516,519
そこは気になったけど
コメント欄部分を書き変えろという意図に解釈したから書かなかったんだよ

>>517
代入二回が気になるのは代入処理がカプセル化されて見えないオブジェクトだけだろ
ポインタで気にする奴なんかいねえしそもそもnewのコストにまぎれてポインタ代入なんか気にもならんわ

>>520
大した手間じゃないだろ
コンパイル時間とタイプする時間天秤にかけたらタイプしたほうが得とすぐに気がつく
522デフォルトの名無しさん:2012/08/09(木) 14:22:28.67
COMオブジェクトにshared_ptr<COM>使わないといけないときのあの屈辱感が癖になる
523デフォルトの名無しさん:2012/08/09(木) 14:44:27.98
CComPtrか_com_ptr_tは使わんのか
524デフォルトの名無しさん:2012/08/09(木) 17:31:10.40
>>501
出たら出たで荒れていそうだけどなこのスレ
525デフォルトの名無しさん:2012/08/09(木) 17:44:39.04
でも強制IDになれば、このスレに限らず板が
今よりかはまともになる気がする

自作PC,ハード,ソフト,linux,ゲ製とか強制IDなのにな
526デフォルトの名無しさん:2012/08/09(木) 19:15:04.72
自演してるわけでもないしID関係ないだろ
527デフォルトの名無しさん:2012/08/09(木) 19:23:41.80
執拗に個人攻撃を繰り返す無自覚荒らしが喜ぶだけだな
528デフォルトの名無しさん:2012/08/09(木) 19:24:44.20
NGにできるじゃん
529デフォルトの名無しさん:2012/08/09(木) 19:28:08.32
ム板はスルーできない性格の子が多いからNGで逃げるなんて卑劣なまねはしないと思う
530デフォルトの名無しさん:2012/08/09(木) 19:34:18.66
IDをNGにしたって1日で戻るから意味ないね
531デフォルトの名無しさん:2012/08/09(木) 19:36:03.27
というか素人じゃないんだし1レスごとにIP変えるだろ
532 ◆QZaw55cn4c :2012/08/09(木) 19:40:10.74
そうそう、ID板なんて、ム板では無駄。
533デフォルトの名無しさん:2012/08/09(木) 19:44:13.54
単発乙で終わり
534デフォルトの名無しさん:2012/08/09(木) 19:54:01.37
535デフォルトの名無しさん:2012/08/09(木) 21:07:31.35
>>475
それも右辺値だろ。
536デフォルトの名無しさん:2012/08/09(木) 21:12:05.94
>>515
初期化リスト使ってないのがイラッとする
B():
 a( 0 ),
 b( 0 ),
 c( 0 )
try
{
 a = new A(1);
 b = new Er();
 c = new A(2);
}
catch(...)
{
 delete c;
 delete b;
 delete a;
 throw;
}
537デフォルトの名無しさん:2012/08/09(木) 21:16:08.87
>>536
こういう人て自分で何も考えられないアホなんだろうな
形だけ覚えて中身をなにも理解してない
そして感情論だけで批判する
仲間にいたら最悪だな
538デフォルトの名無しさん:2012/08/09(木) 21:23:14.51
>>537
批判じゃなくて批難な
539デフォルトの名無しさん:2012/08/09(木) 21:37:26.50
メンバーの初期化で例外が発生することを考えてれば
ポインターでも普通初期化リストで初期化する癖が付くもんだと思うが
あるときは、初期化リストあるときはコンストラクター内みたいな
一貫性が無く汚いコード書いてんのかねぇ。
それともよく知らずバグをはらんだコードを書き続けてただけか
540デフォルトの名無しさん:2012/08/09(木) 21:57:23.48
>>539
メンバーで例外出るとしてもポインタはコンストラクタ内初期化でも全く問題ないが?
お前はいったい何を言ってるんだ
541デフォルトの名無しさん:2012/08/09(木) 22:02:00.82
ID出たらこっちはID変えながら個人攻撃できるから有難いんだけれども
542デフォルトの名無しさん:2012/08/09(木) 22:35:58.48
単発乙で終わり
543デフォルトの名無しさん:2012/08/09(木) 22:48:57.47
c++って求人あるの?実務経験3年以上ばかりで業界未経験は入り込めむ余地がない
544デフォルトの名無しさん:2012/08/09(木) 22:51:19.34
探せば在るけど新卒はスキルより熱意()、将来性()、コミュ力()だからC++の勉強しても意味ないよ
545デフォルトの名無しさん:2012/08/09(木) 22:55:35.26
ゲームで中堅以上なら必須だけど、年々できる人が減るきがする
546デフォルトの名無しさん:2012/08/09(木) 23:15:54.03
>>536
それ未定義動作ね。
15.3 p10
"Referring to any non-static member or base class of an object in the handler for a
function-try-block of a constructor or destructor for that object results in undefined behavior."
547デフォルトの名無しさん:2012/08/09(木) 23:17:54.54
>>521
コンパイル時間とタイプする時間とを秤にかけるとはなかなか面白い考察だが、
コンパイル時間の方には読み手が安全性を確認する手間も乗せてやってくれ。
548デフォルトの名無しさん:2012/08/09(木) 23:20:16.34
c++の勉強って熱意にも将来性にも含まれないんだな
大人しくPHPやjavaから業界に潜り込もうか
vc++ばっかでg++なんて尚更に見たことない
549デフォルトの名無しさん:2012/08/09(木) 23:36:16.52
>>546
へぇ〜function-try-blockって実際使ったことなかったけど
こんな実行順序だったのか、知らなかった

http://ideone.com/e9puX
550デフォルトの名無しさん:2012/08/09(木) 23:47:04.58
>>548
>vc++ばっかでg++なんて尚更に見たことない
お前だけだ、安心しろ。
551デフォルトの名無しさん:2012/08/10(金) 01:31:33.87
>>540
問題はちょっとあるケースがある
メンバa,b,cの初期化リストを省略すると、宣言順でデフォコンが呼ばれ、
その後コンストラ本体で代入が行われるべきものと解釈される
この無駄は、a,b,cに代入演算子が定義されている場合、最適化で除去され難い
C++の最適化でおおっぴらに呼び出し回数の削減が認められているのはコンストラ(コピコン含む)だけ
代入は、普通の関数扱い(呼び出しに副作用がないと無条件に仮定することは認められない)から
よほど賢いコンパイラでないと呼び出しを削減したり、他の呼び出しとの順序を変えたりはしないし、
できない

552デフォルトの名無しさん:2012/08/10(金) 01:34:32.28
>>551
ポインタの話なのに「代入演算子が定義されている場合」は無いだろう。
553デフォルトの名無しさん:2012/08/10(金) 01:35:21.59
代入しないの?
554デフォルトの名無しさん:2012/08/10(金) 01:37:02.64
じゃあa,b,cの代入演算子がinlineだったらどうなのか?
これも議論の余地があり、たしかにinlineであれば一般論としては
副作用の危険性もへったくれもなく関数呼び出しを除去してデータフロー最適化を利かせられるが、
初期化リストにおいては
本当にデータフロー最適化して(たとえば)aのコンストラクタが呼ばれたとみなすタイミングが不分明になると、
例外発生時にaを構築済みとみなしてデストラクタを呼ぶべきか、
未構築とみなして呼ばざるべきか、コンパイラに判断できなくなりかねないので
普通のコンパイラは初期化リストとそれ以外の間でコードを混ぜるような最適化まで踏み込まない
555デフォルトの名無しさん:2012/08/10(金) 01:45:36.80
でもそんなの関係ねぇ
556デフォルトの名無しさん:2012/08/10(金) 03:55:11.92
>>548
PHPはゴミだから論外
557デフォルトの名無しさん:2012/08/10(金) 07:33:02.79
>>550
みんなg++の求人って見かけるもんなの?
558デフォルトの名無しさん:2012/08/10(金) 08:15:35.19
#include<iostream>

template<typename T>
class first
{
typedef T* pointer;
};

template<typename T>
class second
{
typename first<T>::pointer p;
};

int main()
{
second<int> i;

i.p; // error!

}

fixお願いします。
559デフォルトの名無しさん:2012/08/10(金) 08:32:04.87
>>558
なんのエラー?
無いメンバ使うなよ
560デフォルトの名無しさん:2012/08/10(金) 08:36:15.36
>>558
structにするかpublic:を付ける
http://ideone.com/mTEH0

【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/
561デフォルトの名無しさん:2012/08/10(金) 08:43:53.83
>>559-560
ありがとうございます。
562デフォルトの名無しさん:2012/08/10(金) 11:24:46.78
>>557
C++の仕事はよくみかける
VC++の仕事は今はもうみかけない
563デフォルトの名無しさん:2012/08/10(金) 12:35:16.14
C++ばりばり掛けるなら我が社へ是非。
私の部署の案件は、gcc(含む派生版)8割、VC++1割、C#.net1割だ。
564デフォルトの名無しさん:2012/08/10(金) 14:12:11.05
VC++ 指定の案件は無いけど、仕事で VC++ は普通に使う。
565デフォルトの名無しさん:2012/08/10(金) 14:15:08.18
>>563
待遇とアクセス方法は?
566デフォルトの名無しさん:2012/08/10(金) 14:23:48.24
いえないだろうけど、業種は知りたいなぁ
ゲーム以外でつかってるところってあるのかな
567デフォルトの名無しさん:2012/08/10(金) 15:29:11.50
>>563
興味本位で聞きますけれど、c++がバリバリ書けるって、どんなレベルを指すのでしょうか?
デバドラとかコンパイラが書けるレベル?Linuxカーネルやapacheのコミッタとか?
それと、GUI周りって一般的には何が使われているんですか?motif?
guileなんかも書けた方が良い?
568デフォルトの名無しさん:2012/08/10(金) 15:30:52.11
LinuxカーネルにC++なんか使うかよ
569デフォルトの名無しさん:2012/08/10(金) 15:36:28.11
デバドラ
コンパイラ
Linuxカーネル
apache
motif?
guile

自分が難しいと思ってる単語必死に並べたんだろ。
生暖かくスルーしてやりなよ。
570デフォルトの名無しさん:2012/08/10(金) 15:59:46.20
>>568
macの一部はc++で書かれているって、どっかの名無しが言ってた
>>569
難しいとは思わないが知ってる単語ならべただけなことは否定しない
てか、linuxなんて組込み、制御の他に何か使うような場面なんてあるの?
571デフォルトの名無しさん:2012/08/10(金) 16:05:42.04
カーナビの芋臭いモニタはmotifだと思ってた
gdbじゃSTLのvectorなんか整形してくれないし、pythonかguileぐらいは弄れないと仕事にならんでしょ
572デフォルトの名無しさん:2012/08/10(金) 16:24:45.59
くにへかえるんだな
573デフォルトの名無しさん:2012/08/10(金) 16:27:57.17
>>572
君には聞いてないし、そもそも仕事で使ってないでしょ
574デフォルトの名無しさん:2012/08/10(金) 16:30:19.59
まあ空軍少佐がC++使うことはないわな
575デフォルトの名無しさん:2012/08/10(金) 16:36:22.25
>>574
おまえ専門卒だろw
576563:2012/08/10(金) 16:37:38.51
募集はしているから、見ている人は判ると思う。
待遇は交渉次第。案件つきで来てくれたら優遇できると思う。
組み込み、通信系、数値演算、画像処理からちょっとしたGUIまで。
他人の書いたソースを理解してチューニングしたり移植したりできれば、
ライブラリは都度覚えればいい。

ってところかな。
577デフォルトの名無しさん:2012/08/10(金) 16:54:47.85
>>576
情報を提供、ありがとうございました。もっと趣味で使い込んでから転職で移ろうと思います。
578デフォルトの名無しさん:2012/08/10(金) 17:02:43.43
マ板の流れ
579デフォルトの名無しさん:2012/08/10(金) 17:25:36.48
まいったな

なんちゃってーゲハハ
580デフォルトの名無しさん:2012/08/10(金) 17:32:24.05
>>579
うるせーしね
581デフォルトの名無しさん:2012/08/10(金) 18:10:32.91
>>580
禿同
582デフォルトの名無しさん:2012/08/10(金) 18:21:35.18
やっぱ、ctimeよりtime.hを読むようにしたほうがいいな。
time.hにしかないものとctimeにもあるものと
両方読むときに困るわ
583デフォルトの名無しさん:2012/08/10(金) 18:59:21.04
inputなstreamから、outputなstreamへ
全部流し込みたいんだけど、
ifs >> ofs
ってやったらエラーになったんだけど、なんで?
584デフォルトの名無しさん:2012/08/10(金) 19:03:01.63
無理だから
585デフォルトの名無しさん:2012/08/10(金) 19:08:02.47
ofs << ifs
586デフォルトの名無しさん:2012/08/10(金) 19:15:46.34
ロストファンタズマ
587デフォルトの名無しさん:2012/08/10(金) 20:16:31.25
>>583
>>のオーバーロードにstd::ofstreamを取る関数がない

やるなら
std::istreambuf_iterator<char>(std::cin) iic;
std::istreambuf_iterator<char> iiend;
std::ostreambuf_iterator<char>(std::cout) oic;
std::copy(iic, iiend, oic);
とか

なぜistream_iteratorの代わりにistreambuf_iteratorを、ostream_iteratorの代わりに
ostreambuf_iteratorを使うのかはやって見れば分かる
速度の問題

ただし実装依存なので必ずしも速くなる保証はない
1文字ずつの入出力の必要性がなく、先読み、まとめて書き込みが可能なために
最適化されていれば速くなるって事
588デフォルトの名無しさん:2012/08/10(金) 20:45:27.39
ifs >> ofs.rdbuf();
http://ideone.com/UD5eJ
589デフォルトの名無しさん:2012/08/10(金) 21:00:23.55
ディスクリプタをストリームに出来る?
590デフォルトの名無しさん:2012/08/10(金) 23:05:45.33
うん
591 ◆QZaw55cn4c :2012/08/10(金) 23:10:51.66
>>582
ctime = time.h では?
592デフォルトの名無しさん:2012/08/10(金) 23:41:27.68
>>591
お前は一行目しか読めないのか
593デフォルトの名無しさん:2012/08/10(金) 23:46:30.22
>>592
だってQは頭が悪いのに「俺様は頭がいいぜ」と自分で自分を褒めるしかない
自己愛性パーソナリティ障害患者ですから
594デフォルトの名無しさん:2012/08/11(土) 00:10:41.51
>>590
ありがとう
595591 ◆QZaw55cn4c :2012/08/11(土) 06:51:05.10
>>582
>>592
へえ、ctime の実体と time.h に差異があるんですね。手元の環境のctime 自身にも
This is the C++ version of the Standard C Library header @c time.h,
* and its contents are (mostly) the same as that header,
と mostly と書いてあるくらいですね。

time.h をインクルードしたときも、名前空間は std:: になるのでしょうか?
596デフォルトの名無しさん:2012/08/11(土) 09:16:53.37
>>567
linuxのデバドラはCだが
c++でトライバ書かれたオープンソースのOSなんて恐くて使えない
597デフォルトの名無しさん:2012/08/11(土) 09:38:37.99
C++のどの機能がドライバ向きじゃ無いと主張するのかね?
598デフォルトの名無しさん:2012/08/11(土) 09:41:32.30
向いてないんじゃなくて、C++ のアドバンテージがあまり生かせない。
599デフォルトの名無しさん:2012/08/11(土) 09:44:58.93
単にbetter cとして使ってもか?言っている事がよく分からないんだが
そりゃドライバにSTLを使う奴はそうそういないだろ
600デフォルトの名無しさん:2012/08/11(土) 09:46:14.26
C++のアドバンテージ?
Cも書けるしC++の便利なところも使える
601デフォルトの名無しさん:2012/08/11(土) 09:48:51.44
C99さえ使えれば
602デフォルトの名無しさん:2012/08/11(土) 10:01:23.10
>>599-600
単に C と同じように使うなら、そのまま C 使うだろ。
カーネルまで C++ で書き直すならいざ知らず、ドライバだけ C++ なんてありえない。
603デフォルトの名無しさん:2012/08/11(土) 10:03:33.48
better Cとして使うとか言ってる時点でc++はカーネルに向かないって自分でもわかってるくせに
linuxカーネルのコンパイラはgccだからbetter C的な部分はCでも書けるし
604デフォルトの名無しさん:2012/08/11(土) 12:12:30.97
Cで書くと単純にコードが増えるんでメンドクサイ
あとテンプレート使いたい
まぁ、CRTが使えない場合はCRT依存の機能が全く使えないんだけど
カーネルモードならいざ知らずユーザーモードドライバーなら
CRT使えるからわざわざC使う道理もない
605デフォルトの名無しさん:2012/08/11(土) 12:28:20.22
>>603
extern "C" を書くのが面倒臭いから
デバイスドライバは主にストラテジー部分とI/Oハンドラに分けられる
要するにデータをセットして後はハードウェアからの割り込みを待つわけだが、
こういう処理を書くのにそもそもC/C++だと面倒くさい

最も低レベルの部分は今でもアセンブラを使っている

だが、それ以外の部分はC/C++で十分であり、そうなると問題はC++の
名前マングリング(関数の多重定義を既存のリンカで実現するために使われ
ている技法)が問題になる

だから extern "C" でCで書いた部分とリンクが必要になるが、それが面倒臭い
だから全部C++でCライクに書いてしまう

OSのAPIならほとんどコールバックを使用しているのでC++の方がむしろ都合が良い
606デフォルトの名無しさん:2012/08/11(土) 12:40:49.66
>>605
横槍だがextern "C"ってちまちまかかんでも
ブロックで書けるだろ。そんなに面倒か?
607デフォルトの名無しさん:2012/08/11(土) 12:42:41.71
カーネルの話なのになんでユーザ空間の話になってんの?
Cで書けばextern Cも糞もない
608デフォルトの名無しさん:2012/08/11(土) 12:43:48.96
そういう問題じゃないんだなー

C++でCの機能だけを使って書いた物とリンクする場合の手間がいらないだろうって
話をしているのに

なぜわざわざ余計な手間を掛けて機能が違わないCを使う必要があるんだ?
609デフォルトの名無しさん:2012/08/11(土) 13:11:50.88
いやようわからんが、カーネルモードデバッガでC++シンボルのマングリングを
適切に処理できる奴がまだないからジャネーノ、
カーネルモードデバッガ様が言語処理系依存のマングリング規則を解決せねばならない義理も無いし、

それと、必ずしも解決不能な問題ではないが、C++のブートローダ(相当のランタイム)はCよりちょっとめんどくさい
610デフォルトの名無しさん:2012/08/11(土) 13:20:38.08
カーネルモードデバッガでテンプレート関数やインライン関数に
正しくブレークポイントをかけたりステップ実行できるとか
どんだけ未来だよ、と個人的には思う
言い忘れたが、C++流デバッグのためにはメソッド呼び出しにおける暗黙の第一引数thisとか、
ポインタ渡しの言い換えに過ぎない参照渡しもぜひデバッガ─側で解決してほしいし
611デフォルトの名無しさん:2012/08/11(土) 13:40:50.18
>>605
今時割り込み処理ごときでアセンブラって、どんな環境なんだ?
612デフォルトの名無しさん:2012/08/11(土) 13:55:40.21
>>611
(えっ?!)
613デフォルトの名無しさん:2012/08/11(土) 14:06:52.91
なにっ
614デフォルトの名無しさん:2012/08/11(土) 14:27:49.30
>>611
なんだって?割り込み処理がC言語の規格に入っているって?それは初耳

何なに?OSを使えばいいって?そのOSから呼び出されるのがデバイスドライバ
なんですけど
それをどう書くかという話なんですが
615デフォルトの名無しさん:2012/08/11(土) 14:38:21.35
開発環境次第なんじゃない
616デフォルトの名無しさん:2012/08/11(土) 14:40:56.95
なんでCの規格の話に摩り替わるのか意味不明過ぎるな
617デフォルトの名無しさん:2012/08/11(土) 14:41:00.27
環境依存の話は次スレで

【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/
618デフォルトの名無しさん:2012/08/11(土) 14:44:45.80
>>616
>611は割り込みハンドラをCの関数として書くと言っているんですが…
619デフォルトの名無しさん:2012/08/11(土) 14:47:17.35
>>618
だからそれがどうしてCの規格の話になるんだ。
そんなの例えば組み込みの世界じゃ昔から当たり前。馬鹿かよまったく。


俺はよく知らないが、WindowsのDDK(今は名称変わってると思ったが)でも
とっくにアセンブラは必用がなくなっていると聞くが。
620デフォルトの名無しさん:2012/08/11(土) 14:52:07.55
だから環境依存の話はここでするなって

それにC++じゃなくてCの話ならなおさらスレ違い
621デフォルトの名無しさん:2012/08/11(土) 14:55:20.95
>>614
本当に低レベルな奴は gcc の __interrupt__ 属性とか
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

Linux/Windows とかの OS なら ddk とかのフレームワークがあるので、
Cだけで用が足りることも多いよ。

マジでレスしてるなら、相当勉強不足だから、Windows DDK のドキュメントとか
Linux デバイスドライバのソースでも読むことをお勧めする。
622デフォルトの名無しさん:2012/08/11(土) 14:56:11.64
>>619
>そんなの例えば組み込みの世界じゃ昔から当たり前。
えっ?!
割り込みハンドラの初段からCの関数だったりしたら、一般に割り込みの度に半分ぐらいのレジスタが破壊されるぞ…
(確かに処理系依存の呼び出し規約の話であって、純粋はC言語規格からはそれるが
623デフォルトの名無しさん:2012/08/11(土) 14:59:49.91
えーと、
・どんだけレジスタ破壊し捲くってんだよ
・どんだけレジスタ少ないんだよ

どっちで突っ込もうかw
624デフォルトの名無しさん:2012/08/11(土) 15:02:48.71
>>623
高水準wプログラマは黙ってろよwww
625デフォルトの名無しさん:2012/08/11(土) 15:08:16.96
>>621
だからそれは環境依存
626デフォルトの名無しさん:2012/08/11(土) 15:08:57.58
>>622
いい加減馬鹿自慢は見苦しい。
627622:2012/08/11(土) 15:09:54.52
>>626
後学のためにどこらへんが馬鹿なのかkwsk
628デフォルトの名無しさん:2012/08/11(土) 15:10:13.36
>>625
環境に依存せずに書けるかどうかなんていう前提条件は誰もつけてない。
君以外は。

どっか病気なんじゃないの君。
629デフォルトの名無しさん:2012/08/11(土) 15:16:42.31
>>626
GCCの__interrupt__属性などを使って初めて素のCの関数で割り込みハンドラが書けるわけだが
Understand?
630デフォルトの名無しさん:2012/08/11(土) 15:19:02.76
>>629
何を訳のわからんことを言ってるんだ。
マジで病気だろあんた。
631デフォルトの名無しさん:2012/08/11(土) 15:19:59.52
>>630
>何を訳のわからんことを
はいこの問題を論ずる資格無し
632622:2012/08/11(土) 15:26:54.81
オンラインで参照しやすいところでNois IIの例だが
↓ここの表7-2とか
http://www.altera.co.jp/literature/hb/nios2/n2cpu_nii51016_j.pdf

「呼び出し元で保存される汎用レジスタ」r8〜r15は呼び出し元が保存義務を負うが、
割り込みハンドラは呼び出し元が無く、割り込み信号でいきなり呼ばれる点が通常の
(つまり、呼び出し規約を遵守するコンパイラが想定する)関数呼び出しとは異なる
そんなシチュで素のCの関数が呼ばれたら、表7-2で言えばr8〜r15が割り込みの度に破壊される
__interrupt__属性はこの呼び出し規約を割り込みハンドラ向けに変更するもの
633デフォルトの名無しさん:2012/08/11(土) 15:34:20.21
>>625
だからどんな環境よ? [>>611]
って書いてあるんだが、頭大丈夫か?
634デフォルトの名無しさん:2012/08/11(土) 15:50:27.55
アセンブリをアセンブラー呼ばわりする自称ハード屋の話は信用できん
635デフォルトの名無しさん:2012/08/11(土) 16:12:14.04
ハードウェア割り込み(IRQ)ハンドラ
システムコール側のソフトウェア割り込み(SWI)ハンドラ
OSから呼ばれる割り込みハンドラ(Linuxのシグナル,Windowsの構造化例外)

で話が噛み合ってない気がする
636デフォルトの名無しさん:2012/08/11(土) 16:17:43.15
デバイスドライバの話してる時に、

> システムコール側のソフトウェア割り込み(SWI)ハンドラ
> OSから呼ばれる割り込みハンドラ(Linuxのシグナル,Windowsの構造化例外)

なんて持ち出すアホは君以外にはいないと思う。
637デフォルトの名無しさん:2012/08/11(土) 16:18:53.68
>>635
きっと相手はそれをわかっていて、文脈上の環境をすり替えたに違いない!
って相互に考えてると思われ
638デフォルトの名無しさん:2012/08/11(土) 16:27:02.78
>>636は割り込みベクタに直にドライバのエントリが置かれると思ってそう
639デフォルトの名無しさん:2012/08/11(土) 16:33:42.33
>>638
割り込みハンドラーのエントリーポイントとでも言うならわかるが、
ドライバのエントリってOSによって意味違うから、いきなり使う奴は
多分ドライバ書いたことが無いアホ。

Windows のドライバエントリ
http://support.microsoft.com/kb/102989/ja
640デフォルトの名無しさん:2012/08/11(土) 16:38:52.29
割り込みとポーリングの区別も付いてない奴がいそう
特にUSBは両方共使っていて複雑だしモードも多いし
641デフォルトの名無しさん:2012/08/11(土) 16:42:46.43
>>639
割り込みベクタって書いた時点で分かるだろアホ
642デフォルトの名無しさん:2012/08/11(土) 16:59:05.58
なにがわかるんだ?
お前のアホさ加減かよ (w
643デフォルトの名無しさん:2012/08/11(土) 17:01:11.88
質問なんだけど詳しい人おしえて
ドライバの関数って普通はカーネル経由で呼ばれて、レジスタは気にする必要無いんじゃないの?
__interrupt__ってそのカーネルを書くときに使うやつじゃないの?
I/O用の関数をカーネルが持ってる場合はアセンブリ無くてもドライバ書けるんじゃないの?
644デフォルトの名無しさん:2012/08/11(土) 17:04:18.72
>>640
どこのレベルで話しているか知らんけど、USB プロトコルはポーリングしか使ってないぞ。
インタラプト転送モードってあるけど、デバイス側から非同期で割り込みが上げられるわけじゃないよ。
※ 3.0 は知らんので、3.0 にあるならスマン。
645デフォルトの名無しさん:2012/08/11(土) 17:05:45.61
>>642
分からないならいいよアホw
646デフォルトの名無しさん:2012/08/11(土) 17:07:04.43
>>644
転送完了した時に割り込みで知らせてんだよアホ
あんたのマシンに何のOSが入ってるかは知らんが、Widowsならリソース見てみろや
ちゃんとUSBの割り込みがあるだろうが
単なる飾りだと思ってんのか?
647デフォルトの名無しさん:2012/08/11(土) 17:07:20.90
>>643
せめてOSぐらい書かないと、ドライバって千差万別だから、知ったか君が自分の知ってるOSの
話し始めて収拾付かなくなるぞ。




って、このスレの流れ見てもわからない奴に説明してもしょうがないか。
648デフォルトの名無しさん:2012/08/11(土) 17:09:14.68
>>646
「USB プロトコル」って文字が見えないのかよ…
649デフォルトの名無しさん:2012/08/11(土) 17:11:07.73
>>645
捨て台詞乙。
650デフォルトの名無しさん:2012/08/11(土) 17:15:11.25
>>647
Linuxで、出来ればWindows(XP以降どれでも)もおながいします
651デフォルトの名無しさん:2012/08/11(土) 17:15:23.65
まあ、環境次第ではなにつかっても書けるようになってるとしか言い様がないだろ。

新規ハードだったらどうなるだよ。
652デフォルトの名無しさん:2012/08/11(土) 17:16:55.17
>>648
ああUSBプロトコルはポーリングだな
だからバースト転送なんか行うと(外付けHDDとか)CPU負荷が半端ない
もっともUltra DMAを使ってるSATA IDEもUSBほど負荷は高くないが似たようなもんだけど
653デフォルトの名無しさん:2012/08/11(土) 17:21:32.85
>>650

>>621
>> Windows DDK のドキュメントとか
>> Linux デバイスドライバのソースでも読むことをお勧めする。
654デフォルトの名無しさん:2012/08/11(土) 17:21:49.31
>>649
割り込みベクタに設定するドライバ側の割り込みハンドラのエントリポイント
割り込みベクタの話に>>639のURLを出してくる時点でただの文盲
655デフォルトの名無しさん:2012/08/11(土) 17:23:34.90
>>652
>だからバースト転送なんか行うと(外付けHDDとか)CPU負荷が半端ない

何がだからかは知らんが、今時 USB のポーリングに CPU が関与する奴なんて
相当珍しいぞ。
656デフォルトの名無しさん:2012/08/11(土) 17:23:48.21
>>653
大雑把な説明も無理?
657デフォルトの名無しさん:2012/08/11(土) 17:24:04.71
>>652
SATAでも専用ボードを差してる奴は勝手にHDDとコントローラの間でハンドシェイク
するので時々CPUが指示を与える(セクタ番号とか)だけなんでSCSIに近いな

事実SATAカードを差すとSCSIカードとして認識される
658デフォルトの名無しさん:2012/08/11(土) 17:26:12.62
>>654
> 割り込みベクタに設定するドライバ側の割り込みハンドラのエントリポイント

だったら、初めからそう書けばいいだけの話。

> 割り込みベクタの話に>>639のURLを出してくる時点でただの文盲

適当な言葉使うから馬鹿にされてるだけだよ。
659デフォルトの名無しさん:2012/08/11(土) 17:28:19.88
>>658
文盲がよく言うww
660デフォルトの名無しさん:2012/08/11(土) 17:28:59.58
>>655
ポーリングにCPUが関与するとは言ってないだろ
だが転送の時にCPUがI/Oに直接携わっている割合が多いから外付けHDDはCPU負荷が高い

嘘だと思うなら「外付けHDD CPU負荷」でぐぐってみろ
粗悪なドライバのために泣いてるユーザーが多い事がわかるから
661デフォルトの名無しさん:2012/08/11(土) 17:30:49.50
>>656
大雑把には、>>643 の理解であってるよ。
そういう風にするために、色々設定とかが必要だけど。
662デフォルトの名無しさん:2012/08/11(土) 17:33:10.92
>>660
それは、USB がポーリングがどうかには関係が無い。
データ転送に CPU を使うかどうかの問題。
ごっちゃにするなよ。
663デフォルトの名無しさん:2012/08/11(土) 17:34:21.10
http://pc.watch.impress.co.jp/docs/column/interface/20100902_390904.html
http://pc.watch.impress.co.jp/docs/column/interface/20100902_390904.html

この当たりよく読んどけよ

USB2.0がいかにオーバーヘッドが高いか、そしてUSB3.0でそれがどのように改良されて
CPU負荷を減らす事に成功しているか分かる
664デフォルトの名無しさん:2012/08/11(土) 17:42:44.52
> Core Solo 1GHzを搭載した富士通のLIFEBOOK U)にUSB 2.0対応のマウスを接続すると、
> いきなりCPU負荷がガンと上がってしまい、むしろ使い勝手が落ちてしまうという経験をしたことがある

しょぼい機器持ってるアホ記者の記事貼って何をしたいんだ?
665デフォルトの名無しさん:2012/08/11(土) 17:44:04.94
>>661
回答ありがとう
そういうやり方でドライバを作るのってマイナー?
最初に興味持った>>611-614の流れがそんな感じだったので
※自分は勿論ドライバ開発経験無し
666デフォルトの名無しさん:2012/08/11(土) 17:45:05.93
>>664
最悪の状況を想定しとけって話だよ
自分の所でだけ動けばいいってそれ仕事人の態度じゃないぞ
667デフォルトの名無しさん:2012/08/11(土) 17:50:39.05
>>665
今時普通にCだけでドライバ作ってる。
(もちろん、全てではないが。)

>>612-614 は、無視していい。
668デフォルトの名無しさん:2012/08/11(土) 17:52:09.94
それは案件次第
どんな範囲で何ができればよいかは常に有限
669デフォルトの名無しさん:2012/08/11(土) 17:52:12.78
>>666
> 自分の所でだけ動けばいいってそれ仕事人の態度じゃないぞ

別にそいつのシステムの保守請け負ってるわけじゃないし、どうでもいいよ。
670デフォルトの名無しさん:2012/08/11(土) 17:58:30.95
>>667
ありがとう
671デフォルトの名無しさん:2012/08/11(土) 18:41:38.33
低層と高層な仕事だと、どちらが安定しているもんなの?
672デフォルトの名無しさん:2012/08/11(土) 18:43:50.00
>>667
キイッ >612を無視していいリストに含めんなハゲ
>611に対する反応としては>612で全く正しい
673デフォルトの名無しさん:2012/08/11(土) 18:47:48.89
674デフォルトの名無しさん:2012/08/11(土) 19:11:21.10
ハードウェア設計者は高いみたいだけどな。
アセンブラや低レベルができますってのはオプションなんじゃない?

言語自体はアセンブラの方が簡単な希ガス
675デフォルトの名無しさん:2012/08/11(土) 20:47:38.54
アセンブラは簡単だけど超面倒臭いな
レジスタとかフラグとか常に考えないといけないし、同じ事をするのに
C/C++で一行で書ける事が何十行になったりする
676デフォルトの名無しさん:2012/08/11(土) 21:48:48.77
こんな感じのconstついたり、つかなかったりを型で条件分けしたパターンがいくつも続く場合って
1つにまとめれないのでしょうか

template<typename T1, typename T2>
f(const T1 & t1,const T2 & t2
,typename boost::enable_if<boost::is_arithmetic<T1> >::type* = 0
,typename boost::enable_if<boost::is_arithmetic<T2> >::type* = 0
){...

template<typename T1, typename T2>
f(T1 & t1,const T2 & t2
,typename boost::disable_if<boost::is_arithmetic<T1> >::type* = 0
,typename boost::enable_if<boost::is_arithmetic<T2> >::type* = 0
){...
677デフォルトの名無しさん:2012/08/11(土) 22:10:11.27
できるにはできるが





















馬鹿には無理
678デフォルトの名無しさん:2012/08/11(土) 22:22:39.26
C++0xになるけど、
template<typename T1, typename T2>
void f( T1 && t1, T2 &&t2 ){}
でまとめられる予感。
679デフォルトの名無しさん:2012/08/11(土) 22:43:43.53
template<typename T1, typename T2>
inline
void fsub(T1 & t1,T2 &t2 ){...}

template<typename T1, typename T2>
void f(consy T1 & t1,const T2 &t2 ){f_sub}
680デフォルトの名無しさん:2012/08/11(土) 23:07:35.99
boostのプリプロセッサでそういうのを展開するのがあるんだが
重すぎて大変。
681デフォルトの名無しさん:2012/08/14(火) 01:15:28.72
>>675
その何十行をマクロ化することに燃えてた時代もあったな。
682デフォルトの名無しさん:2012/08/14(火) 02:26:21.55
>>681
今ではcompiler_intrinsicsとなって固まったけどな
こいつが吐くコードがまたたまにバカみたいに無駄の多いコードで
683デフォルトの名無しさん:2012/08/14(火) 06:09:57.73
gccやMS C/C++ Optimized Compiler付属のアセンブラって
アセンブリでマクロ書けるんだっけ?
684 ◆QZaw55cn4c :2012/08/14(火) 06:36:48.25
>>683
MASM はかける。今はmlはMS(V)C に付属しているんですか?
685デフォルトの名無しさん:2012/08/14(火) 07:07:46.58
cl.exeにアセンブリ食わせられるがアセンブラ自体がどこの有るかは知らん
686デフォルトの名無しさん:2012/08/14(火) 14:45:40.82
int* a,b int c,dがあります。
c,dはaとbの長さがあります
aとbの長さzとは*aをa[0] ,a[1],...と分解して
さらにa[0],[1],...を2進数列で分解してx_1,.......,x_32, y_1,...........
と分解したとき2進数列のz番目以下の値は定義されていることをいいます。
このときaのcまでの値後ろにbのdまでの値を付け加えたeを作りたいんですけど、
eに対してもまたfを付け加えてgを作ったりしなければなりません。
このときa,b,e,fのデータ構造を全て同じなものに書き換えて効率のよいものにしたいのですけど
どのようにしたらいいですか?
687デフォルトの名無しさん:2012/08/14(火) 14:49:10.69
vector<int>でおk
688デフォルトの名無しさん:2012/08/14(火) 15:00:42.32
>>686
説明が判らん。
cはポインタaの長さがある。
これだけでもう、ちんぷんかんぷんだ。
まして、bは整数型でaとは型が違うのに同じように扱うのか?
それに、*aをa[0], a[1],... と分解するってどういうことだ?
*aがそれすなわちa[0]なのに分解とはどういうことだ?
データ構造を効率化するよりも先ず、他人に説明できる方が重要だぞ。
689デフォルトの名無しさん:2012/08/14(火) 16:34:14.14
>>686
全然わからんw
現状で精一杯のコードをさらせば、誰かが最適化してくれるんじゃね
690デフォルトの名無しさん:2012/08/14(火) 17:01:02.05
https://sites.google.com/site/efcpp01/wiki/wiki04
std::shared_ptr, std::unique_ptrが標準であるので,それを使えばよい.
また,これらのスマートポインタは「オーバヘッドがゼロ」であるため,生ポインタを使うときとくらべてもパフォーマンスに遜色はない.
なので,使える環境があるなら積極的に使えばよい.


ってマジなの?オーバーヘッドゼロってどういう原理?
691デフォルトの名無しさん:2012/08/14(火) 17:10:17.28
ヴォイニッチ手稿よりは読解がたやすい
>686は、intを32 bitと仮定しており、aやbの長さzは、aやbが指すint型配列のビット数、
ただし「2進数列のz番目以下の値は定義されている」とあるから、zは32 の倍数とは限らない(定義のされ方次第
という具合に、zはaやb形式のビット列の正味のビット数を指す
こう考えれば
>このときaのcまでの値後ろにbのdまでの値を付け加えたeを作りたいんですけど、
の意味は明らかで、aが指す配列の先頭cビットと、bが指す配列の先頭dビットを連接したビット列eを作りたい、の意
692デフォルトの名無しさん:2012/08/14(火) 17:11:58.97
vector<bool>とかboost::dynamic_bitsetじゃだめなん?
693デフォルトの名無しさん:2012/08/14(火) 17:18:28.67
へえ
dynamic_bitsetにはappend()ってメソッドがあるのか
奇っ怪なコンテナだな
確かに標準のstd::bitsetじゃ大きさ固定だし
694デフォルトの名無しさん:2012/08/14(火) 17:29:54.93
>>690
スマポ一神教の糞どもがスマポを布教しようと嘘で勧誘してんだよ
オウム真理教の麻原が空を飛べるとかいうのと同じぐらいの嘘っぱち
だからそんな邪教には手を出さず生ポインタをつかうべきそうするべき
695デフォルトの名無しさん:2012/08/14(火) 17:32:41.70
>>690
std::unique_ptr<T>はともかく、
std::shared_ptr<T>については、ナマポ+参照カウンタ(か何か)が必要なので、空間のオーバーヘッドゼロ(ナマポと同じメモリ消費)というのはちと怪しい
空間のオーバーヘッドがゼロでないということは、代入やコピーはナマポより遅くなりかねない
(まあ代入やコピーの時間がナマポと同じになる実装が全く不可能かというとそうでもないが

また、とうぜんながら構築や破棄は素のnew/deleteよりは遅い

ただ、スマポが保持するTのオブジェクトへのアクセスの時間オーバーヘッドは、最適化がちょっとがんばればゼロになる

と思う
696695:2012/08/14(火) 17:35:29.96
スマン、
>(まあ代入やコピーの時間がナマポと同じになる実装が全く不可能かというとそうでもないが (695)
これはないわ、実装を工夫してスマポ本体のサイズをナマポと同じにできても、
代入やコピーの際に所有権に関する処理(委譲や参照カウンタの更新とか何か)があるので
どうしてもナマポの代入よりは遅くなるハズ
697デフォルトの名無しさん:2012/08/14(火) 17:38:43.93
shared_ptrは動的削除子がある分どうしても重くなるわな
(virtual destructor不要)
でもあれだけの機能を備えつつメモリをナマポの倍しか使わないとか優れもの
698デフォルトの名無しさん:2012/08/14(火) 17:45:12.52
sharedで遅いのは生成破棄と複製だな
カウントはアトミック操作だからどうしても時間かかる
boostのほうならマクロでOFFにできるけど
699デフォルトの名無しさん:2012/08/14(火) 18:05:48.57
過去の同じような話題

302 :デフォルトの名無しさん [sage] :2012/05/25(金) 17:04:43.03
 shared_ptrはともかくunique_ptrは消費メモリもオーバーヘッドも生ポインタと変わらんと思う

303 :デフォルトの名無しさん [sage] :2012/05/25(金) 17:23:15.50
 生成と破棄x30000000、sizeof比較

 int*: time: 2.13s
 http://ideone.com/2tLcx

 std::unique_ptr<int>: time: 2.13s
 http://ideone.com/wtba4

 std::shared_ptr<int>: time: 4.41s
 http://ideone.com/UDuJE

 sizeof:
 http://ideone.com/EtftU
 > sizeof(int*) = 4
 > sizeof(std::unique_ptr<int>) = 4
 > sizeof(std::shared_ptr<int>) = 8
700デフォルトの名無しさん:2012/08/14(火) 19:49:46.11
結論=ユニポ使え、ということなのか?
701デフォルトの名無しさん:2012/08/14(火) 19:57:55.84
try-catchで例外安全にするの面倒だし
所有権が移るような代入もそんなに使わないから俺はスマポメイン

所有権の無い参照としてのポインタは当然ナマポだから
全体としてはナマポ方が多いけど
702デフォルトの名無しさん:2012/08/14(火) 20:02:24.67
@変数のスコープがはっきりしてる場合
ポインタではなく自動変数を使えば良い

Aスコープを超えて寿命があるがしっかりと所有権が管理されてプログラマの支配下にある場合
むしろプログラマの管理から意図せずして所有権を奪いかねないunique_ptrではなく生ポインタを使うべきである

Bスコープを超えて寿命が在り、なおかつ共有するオブジェクトが多くプログラマに管理しきれない場合
shared_ptrを使うべきである



以上の考察からunique_ptrに存在価値はほぼない
703デフォルトの名無しさん:2012/08/14(火) 20:05:00.37
またスマポで荒れるのか
704デフォルトの名無しさん:2012/08/14(火) 20:10:12.92
>>702
ユニポは意図しないと所有権が移動しないようになってるけど
705デフォルトの名無しさん:2012/08/14(火) 20:12:48.89
>>702
Aは何でナマポだと解決するの?
706デフォルトの名無しさん:2012/08/14(火) 20:21:19.86
また生ポ脳か
707デフォルトの名無しさん:2012/08/14(火) 20:21:25.47
質問ですが、class Bについて、メソッドでなく普通の関数として等値演算子
 bool operator==(const B& lhs, const B& rhs);
を定義し、なおかつBの派生クラス(公開属性で派生)Dのオブジェクトx, yについては
 x == y
と書いても上のoperator==()が呼ばれないようにしたいんですが、何かいい方法無いでしょうか
やっぱり bool operator==(const D& lhs, const D& rhs);を定義して、
ただし例外でも投げるみたいな作りにしないといけないんですかね…
708デフォルトの名無しさん:2012/08/14(火) 20:22:54.97
>>702
Aでボロが出てるぞ
709デフォルトの名無しさん:2012/08/14(火) 20:36:40.16
お前ら解ってないな
デストラクタってのは見えないコードなんだよ
プログラマが支配者の環境ではそんな悪魔が入り込む余地はないほうがいいんだよ
710デフォルトの名無しさん:2012/08/14(火) 20:38:49.74
>>707
Dの等価演算子を宣言だけして未定義にすればいい
711デフォルトの名無しさん:2012/08/14(火) 20:40:35.89
>>707
こんな感じ?
http://ideone.com/M0fbC
http://ideone.com/9wI7R

特殊化をコンパイルエラーにさせる場合って普通どう書くんだっけ?
712デフォルトの名無しさん:2012/08/14(火) 20:42:55.26
これ影響範囲大きいか、ごめん>>711は無しで
713デフォルトの名無しさん:2012/08/14(火) 20:47:04.12
struct B { int i; };
struct D : B { };

bool operator == (B const & a, B const & b) { return a.i == b.i; }
bool operator == (D const & a, D const & b);

int main(void) {
B b;
D d;
b == b;
// d == d;
return 0;
}
714デフォルトの名無しさん:2012/08/14(火) 20:50:45.94
>>707
Bの派生全て呼ばれないようにしたいのか
それともDだけなのか
715707:2012/08/14(火) 20:56:50.71
>>710
なるほどごもっともです。Dの等値比較をやろうとするとリンクエラーになるからわかるというわけですね

>>711
コンパイル時エラーの起こし方が超クールっすね
おまけにB以外のクラスの等値比較が全部エラーになるというあたりがGJですな

だいたい>710のやり方で実用上ほぼ問題無いのですが、基底クラスB一つに対して
派生クラスが大量にある場合、派生クラスのoperator==()の宣言忘れがあったりすると怖いですね、、
まあ派生関係の子についてもらさずやっておけば、孫以下は安心みたいですが、、
716デフォルトの名無しさん:2012/08/14(火) 21:07:46.20
そういう設計になる理由が気になる
717デフォルトの名無しさん:2012/08/14(火) 21:08:56.65
bool operator==(const B& lhs, const D& rhs);
bool operator==(const D& lhs, const B& rhs);
bool operator==(const D& lhs, const D& rhs);

たぶん意図しているだろう挙動を得るには宣言が3つ必要だから忘れるなよ
718711=712:2012/08/14(火) 21:13:08.57
>>715
これ派生に限らず、Bとまったく関係無いクラスまで
<T>で取り込んじゃうからで危ないかも
719デフォルトの名無しさん:2012/08/14(火) 22:03:17.20
>>716
まあ等値演算させたくないDをBから公開属性で派生するのはやめるのが吉ですかそうですか、
等値演算以外のシチュでDからBへの型変換を希望するときのために、明示的型変換(にほぼ近い)メソッドをDに設ける。
B& D::GetB(); とか。(ユーザー定義型変換にexplicitが書けて、かつコンストラクタ呼び出し回数の最適化がきちんと利けばればクールなんですがね…orz
というわけで、>710で凌ぎつつ、様子を見てGetB()を設ける方向でいこうかと

>>717
Dの等値比較を見たコンパイラは引数にB,D混在な宣言より先に
bool operator==(const D& lhs, const D& rhs); の宣言を探し、
それがあればそれを使うのでB,D混在バージョンの宣言は不要なはず
(ていうかそもそもC++コンパイラって、暗黙の型変換の介在で呼び出し可能な全ての引数の組み合わせを全部チェックするんでしたっけ…

720デフォルトの名無しさん:2012/08/14(火) 22:16:29.57
基本的に基底にできることを派生できなくするpublic継承は邪道なんだよ(個人的にはvirtualも邪道だと思っている)
能力の包含関係でいうとBはDに含まれてないといけない
まあ理想だからすべてがそうなるとはならないんだけどね
721デフォルトの名無しさん:2012/08/14(火) 22:31:24.16
bool operator == (D const&, D const&) = delete;
722デフォルトの名無しさん:2012/08/14(火) 22:36:48.62
>>719D同士の比較だけ禁止したいなら一つでいいけど
DとBの比較も禁止したいんだろ?ってこと
723デフォルトの名無しさん:2012/08/14(火) 22:51:30.37
混在した2つがあれば用は足りるとはいえ
意図を明確にするためには全部書いたほうがいいんだろうなあ
724デフォルトの名無しさん:2012/08/14(火) 22:54:27.89
>>711みたいにtemplate使った上にboost.type_traitsのenable_if, is_base_of, is_same辺りを組み合わせれば
725デフォルトの名無しさん:2012/08/14(火) 23:18:03.89
>>701
> 所有権の無い参照としてのポインタは当然ナマポだから
当然参照だろ?何言ってるんだ?
726デフォルトの名無しさん:2012/08/14(火) 23:23:07.46
>>707
DはBをprivate又はprotected継承してusingでメンバを公開するのはどうだろうか
アップキャストが出来なくなるからoperator==が呼ばれないと思う
727デフォルトの名無しさん:2012/08/14(火) 23:34:06.51
ナマポの戦いはこれからも続く
728デフォルトの名無しさん:2012/08/14(火) 23:44:13.73
>>726のコード
ttp://codepad.org/jAqgVmxh

Bへのアップキャストはしたい、けれどもBのイコール演算子を適用したくないってのはもう設計ミスってる気がする
729デフォルトの名無しさん:2012/08/14(火) 23:47:36.92
きのこたけのこ並
730デフォルトの名無しさん:2012/08/14(火) 23:48:31.48
仮想関数じゃないとオーバーライドはできないよ
と関係ないつっこみ
731デフォルトの名無しさん:2012/08/14(火) 23:56:56.44
新しいクラスで全部ラップしちゃえよ
732デフォルトの名無しさん:2012/08/14(火) 23:58:32.65
>>730
そんな事無い
virtualは親クラスのポインタや参照から呼ぶときにvtblを参照して飛ぶもので少なくともvirtualじゃないとオーバーライド出来ないとかでは無い
以下実証コード、あと子クラスがオーバーライドを提供する場合はusing宣言が要らなかったことを訂正
ttp://codepad.org/pxdDc7Wb
733デフォルトの名無しさん:2012/08/15(水) 00:12:28.68
それはオーバーライドではなく隠蔽(hiding)です
734デフォルトの名無しさん:2012/08/15(水) 00:31:18.94
ggってきた
なるほど親クラスの関数が仮想関数でありかつ型が一致していないとオーバーライドではないので>>732で言ったことは間違いだと
今まで誤った解釈をしていたわありがとう
735デフォルトの名無しさん:2012/08/15(水) 01:12:48.03
初心者が横から入りすみません。
http://codepad.org/l7ZHi7GZ は教科書どおりで初心者としてよく理解できるのですが、

基底クラスを private で継承したとき、
http://codepad.org/FzZmEaBe  (?)
http://codepad.org/DlFN6fRN   (???)
がコンパイルできない理由がわからないでいます。

基底クラスを private で継承したとき main() からみえないものはなにでしょうか?
よろしくお願いいたします。

736デフォルトの名無しさん:2012/08/15(水) 02:59:26.44
main()からは継承していないかのように見えるとでもいえば簡単だろうか
737デフォルトの名無しさん:2012/08/15(水) 03:30:43.85
親クラス
738デフォルトの名無しさん:2012/08/15(水) 06:58:22.91
>>707
template< class Derived > bool B::operator==( const Derived& rhs );
template< class Derived > bool operator==( const Delived& lhs, const B& rhs );
これじゃだめだったか?
739デフォルトの名無しさん:2012/08/15(水) 06:58:28.45
>http://codepad.org/DlFN6fRN
関係ないけどこれエラー行が分かり辛いな
実際のエラー箇所はLine 41なのに
740デフォルトの名無しさん:2012/08/15(水) 07:14:04.14
>>716>>728
設計ミス設計ミス簡単に言うたかてな〜;;
・operator==(lhs, rhs)は、lhsとrhsの実体が同一である限り真偽が一貫しているべきである(さもないと予想外のシチュでバグを生じる
・オブジェクトは状態を持つ。これは、operator==(lhs, rhs)が、lhsとrhsの実体が同一であっても
 一貫性を保たない(時とともに真偽が変わる)ような設計が言語思想上禁止まではされていないことを意味する
 オブジェクトの状態変更を禁止して、全部オブジェクトの新規生成に置き換えるのはパフォーマンスに響くケースもある
 (真に一貫性を強制したければ、関数型言語でも使うわ
・Bをpublic継承するD(複数種類ある)は一般にBにない追加データメンバをもち、そのうちの一部は時とともに状態を変えてD同士の==にも影響する
・この場合、時間とともに変化する追加データメンバを持ってしまったDのopeator==(D, D)狙い撃ちで禁止するのが最も近道

C++の自由度の高さの中から全ての要件とプログラマの立場からの希望を満たす設計をひねり出すのは
なかなかに時間と根気を要する仕事でありまして、後者はしばしば後回しにされがち
ていうか設計のための設計はイラン、というのが管理する立場の平均的意識であるハズ

>>722
説明不足でもうしわけなかったが、BからDを継承する際に追加されたデータメンバの時間変化が問題なので、
BとDの比較は特に問題は無い
741デフォルトの名無しさん:2012/08/15(水) 07:23:40.33
まぁjavaのequalsもgetClassで比較して派生クラスだったら
実行時例外にするとかよくあることだしな
実行時よりコンパイル時に分かる方がいい
742デフォルトの名無しさん:2012/08/15(水) 08:06:08.77
>>739
確かに Line 41 を表示しないのは手抜きだな。

Visual Studio 2010 だとこんなかんじ。

------ ビルド開始: プロジェクト: Test, 構成: Debug Win32 ------
main.cpp
main.cpp(41): error C2247: 'B::hiddendisplay' はアクセスできません。'D' は 'private' で 'B' からの継承で使われています。
main.cpp(15) : 'B::hiddendisplay' の宣言を確認してください。
main.cpp(20) : 'D' の宣言を確認してください。
main.cpp(5) : 'B' の宣言を確認してください。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
743デフォルトの名無しさん:2012/08/15(水) 08:38:24.76
gcc 4.1.2じゃそんなもんだろ
http://ideone.com/4LHUo
744デフォルトの名無しさん:2012/08/15(水) 08:55:23.90
>>721
Visual Studio 2008/2010で通らないでつД`;)
745デフォルトの名無しさん:2012/08/15(水) 09:09:17.96
VC2010で、operator ==でenable_ifしようと思ったら、
引数が多すぎます、既定のパラメを指定できません、って怒られたわ。
それじゃと思い、テンプレート引数上でenable_ifを使ったら、
そういうの使えるの、classだけだから。関数はダメって怒られた。
746デフォルトの名無しさん:2012/08/15(水) 09:29:51.37
型を持った配列を作るにはクラスに埋め込むしかないのでしょうか?
747デフォルトの名無しさん:2012/08/15(水) 09:33:49.95
boostのスレッドってなんで消えたの?
748デフォルトの名無しさん:2012/08/15(水) 09:38:05.68
要らないからじゃね?
749デフォルトの名無しさん:2012/08/15(水) 10:01:06.78
boost::threadがなくなったのかと一瞬思った
750デフォルトの名無しさん:2012/08/15(水) 13:08:02.36
マルチスレッドプログラミングしたい場合の選択肢を全て
おしえてください。
751デフォルトの名無しさん:2012/08/15(水) 13:08:18.23
C#
752デフォルトの名無しさん:2012/08/15(水) 13:20:13.74
C++スレッドなのでC#の話題は他でお願いします。
753デフォルトの名無しさん:2012/08/15(水) 13:27:14.78
C++からC#を呼べばいいハイ論破
754デフォルトの名無しさん:2012/08/15(水) 13:39:10.28
>>750
これから登場するかもしれない選択肢まで含めて網羅することは不可能。
一般的なものを挙げることは可能だが、それなら普通に検索すればいい。
755デフォルトの名無しさん:2012/08/15(水) 13:56:58.43
>>750
まずあなたが知っているものを挙げてください
756デフォルトの名無しさん:2012/08/15(水) 16:17:44.73
そういえばC++でpthreadのかっこいいラッパーって無いよね
757デフォルトの名無しさん:2012/08/15(水) 16:50:12.02
>>756
うんこに金箔つけてもうんこはうんこ
758デフォルトの名無しさん:2012/08/15(水) 17:03:51.45
>>757
うんこを塗りつけるんだから逆じゃね?
759デフォルトの名無しさん:2012/08/15(水) 17:37:51.99
犬のうんこを処理する際に素手でそのままもちかえることはできないが
うんこをビニールぶくろに入れてしまえばたやすく処理できる
これがカプセル化です
760デフォルトの名無しさん:2012/08/15(水) 17:47:18.10
いいえ違います。それはラッパーです。
761デフォルトの名無しさん:2012/08/15(水) 17:49:03.49
ラッパのマークの?
762デフォルトの名無しさん:2012/08/15(水) 17:49:30.89
どんどん?
763デフォルトの名無しさん:2012/08/15(水) 21:07:40.87
shared_ptrって一時的にスレッドセーフ解除することはできないんですか?
764デフォルトの名無しさん:2012/08/15(水) 21:11:28.68
>>763
ナマポもらって突っ走ればいいじゃん
765デフォルトの名無しさん:2012/08/15(水) 21:26:14.91
スマポって大抵は参照カウンタ持ってるよね?

shared_ptr とかで、「誰かが今参照してマース」 というのを
確認する手段ってある?
766デフォルトの名無しさん:2012/08/15(水) 21:33:02.34
use_countとかuniqueとかあるじゃん
767 ◆QZaw55cn4c :2012/08/15(水) 22:03:44.73
>>739
>>736
ありがとうございます。おっしゃるとおり「基底B から派生Dが導出されている」ことがmain() からみえないとすれば納得できます。
継承の書式における private/protected/public はメンバのアクセス制御だけではないのですね。
768デフォルトの名無しさん:2012/08/17(金) 01:07:58.90
VC10 / VC11RCにて

std::wstring r1 = L"3445";

std::wcout << r1 << std::endl;

std::wregex wr2(L"(.)\1+");
std::wstring fmt2(L"x");
std::wstring r2 = std::regex_replace(r1,wr2,fmt2);

std::wcout << r2 << std::endl;

実行結果
3445
3445

任意の数字列にて、同じ数字が連続するものを"x"に置換したいのです。
この場合"3x5"になって欲しいんですが、何故マッチしないのでしょうか?
769デフォルトの名無しさん:2012/08/17(金) 01:47:38.28
>>768
君さ、これは恥ずかしいことになってるぞ。

L"(.)\1+" → L"(.)\\1+"

正規表現のエスケープシーケンスとC++の文字列リテラルのエスケープシーケンスで
二重にエスケープシーケンスでワケワカになっちゃうのは分かるけどさ。
770デフォルトの名無しさん:2012/08/17(金) 02:29:05.87
>>769
oh...
確かに。
ありがとうございました!
771デフォルトの名無しさん:2012/08/17(金) 04:49:16.84
そんなあなたにraw string literal
772デフォルトの名無しさん:2012/08/17(金) 04:56:19.20
template<typename Ret...>
Ret foo(...){...
return ret;}

template<typename Ret...>
void foo_cps(Ret &ret ,...){...
ret=... ;
}

関数の返値を2通りの扱いできるようにしてるのだけど
同じ定義を2回,毎回書くのバカらしい
何かよい方法ないでしょうか
773デフォルトの名無しさん:2012/08/17(金) 05:30:20.41
内容的に違うじゃん、左辺値と純右辺値で
774デフォルトの名無しさん:2012/08/17(金) 10:50:41.79
ttp://codepad.org/zImnVYAZ
上のリンクにあるようなコンストラクト時にストリームを受け取り、デストラクト時にそのストリームにログを出力するクラスを作っています
ここでもしそのストリームが例外を投げるとしたらデストラクタで例外を投げることとなってしまい、危険なコードになってしまいます
なので、リンクのようにデストラクタにおいては例外を握り潰し、その代わりとして例外発生時にそれを伝播させる関数を作ることで対処しようと思いました
この他にデストラクタで例外を投げてしまうことへの対処法は有るのでしょうか、お聞かせ願いたいです
775デフォルトの名無しさん:2012/08/17(金) 11:01:25.48
iphoneアプリ、Windowsアプリを売って生き残れ

格安iPhoneEラーニング(学習動画多数あり)
http://tinyurl. com/7wj77om
コワーキングスペースJP
http://tinyurl. com/76vdrny
コワーキング帳
http://tinyurl. com/brzs486

javaやlinuxは手間がかかる 一人でやるには手間がかかりすぎる 手間がかからないで一人で開発できて
人の多いところで直接販売できる仕組みが提供されているメーカ製言語だけやる ずばりiphone またはWindow 8 Metro App Store C#
やるならメーカー製の言語 洗練された仕様 脆弱性が少なく 開発ソフトが優れ 課金ライブラリ アップデートライブラリが提供されていて 情報、書籍が多く開発しやすい
奴隷になりたければオープン系をやればいい 時間がかかり 人は多く 仕事の取り合い 足の引っ張り合い 脆弱性が多く 互換性がなく 癖があり 大規模開発中心
詳細設計しかできない体になって年取ってぽいだ 独立もできない 手間のかかりすぎる仕様だから 

派遣屋 IT経営者はその方が喜ぶ 大規模分割開発では使い捨てても独立はできまい 嫌なら辞めろ 代わりはいくらでもいる
若い派遣営業は舐めた態度をとってくる ひどいピンハネ

オープン言語、日本独自開発 言語・フレームワーク ガラパコ携帯 javascript html5 android java linux python rubyやnode.jsとかやめとけ
メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る
コンパイルできないからパクられ  直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ
776デフォルトの名無しさん:2012/08/17(金) 11:02:11.45
ここから抜け出すにはiPhone一択 またはWindow 8 Metro App Store(未確) C#
Objective-CやC#を覚えるとサーバーサイドからクライアントサイドまでカバーでき人の多い場所でソフトを売る権利を得られる
仕事や趣味でObjective-CやC#をやっておけば派遣切りされても会社辞めることになってもソフトを売って生きていける それはセーフティーネットになる
WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみ C#は自分用業務支援ツールとして使える 
例えばPHPでWEBアプリを作っていて管理者画面はC#(EXEアプリ)で作るとかなり早く作れる(Smartyなんか使うよりもかなり早くだ)
C#のソースを出さなければWEBアプリの著作権も守れる ASP.net(C#)+管理EXEアプリ(C#)+iPhone

C#マーケット Windows8 Metroアプリ WindowsPhone Surface PS Vita Xbox360 iPhone(mono使用)
iPhoneマーケット iPhone iPad 予定 iTv iCar i (家電製品)

地方に安い土地を買いコンテナ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィス・コワーキングで収入を得ながらそこでアプリを開発する
http://tinyurl. com/7pb2yaa
http://bit. ly/iLIpJa
iPhoneはヤフオク脱獄iphoneで 15kで買える IIJmio,イオン.BB.exite,DTIで月千円程度で利用できる
777デフォルトの名無しさん:2012/08/17(金) 11:03:27.01
>>775-776
ばーか^^
778デフォルトの名無しさん:2012/08/17(金) 11:06:01.16
>>774
void close(){
 if(closed){return;}
 closed=true;
 output();
}
~Logger(){
 try{close();}catch(...){}
}

close呼び出しは必須でなく推奨扱いにして使う側に任せる
779デフォルトの名無しさん:2012/08/17(金) 11:54:57.62
独立に必要なのは詳細設計以外のフェーズなんかじゃない
資金500万の使い方すら頓珍漢もいいとこ何もわかってない

言ってる内容から察するに
こいつ自身にとって独立が自らの問題になったことはない
780デフォルトの名無しさん:2012/08/17(金) 12:50:41.81
最近「ハッシュ」とやらを知ったがすげえ高性能だな
感動した
781デフォルトの名無しさん:2012/08/17(金) 12:55:39.57
いまいちハッシュの高性能性がわからない俺に解説オナシャス
782デフォルトの名無しさん:2012/08/17(金) 12:58:52.81
連想できるところ
あとは朝マックのあれ
783デフォルトの名無しさん:2012/08/17(金) 13:12:06.87
お題
ハッシュから連想できるもの
784デフォルトの名無しさん:2012/08/17(金) 13:15:33.91
連想配列
785デフォルトの名無しさん:2012/08/17(金) 13:15:59.76
ハッシュポテト
786デフォルトの名無しさん:2012/08/17(金) 13:16:42.54
ジェットストリーム・・・ いや何でもない
787デフォルトの名無しさん:2012/08/17(金) 13:16:42.71
一方向性関数
788デフォルトの名無しさん:2012/08/17(金) 13:20:28.09
バッシュ
789デフォルトの名無しさん:2012/08/17(金) 13:24:54.82
金色のハッシュベル!
790デフォルトの名無しさん:2012/08/17(金) 13:45:45.99
std::map
791デフォルトの名無しさん:2012/08/17(金) 13:51:19.66
それは二分木や
792デフォルトの名無しさん:2012/08/17(金) 14:19:54.26
ハッシュといえばディープ・パープルだろ?
793デフォルトの名無しさん:2012/08/17(金) 15:48:28.25
人名でありそうだな……
と思って最初に浮かんだのはヴァッシュだったorz
794デフォルトの名無しさん:2012/08/17(金) 16:09:45.04
>>792
それから連想するのが ADAYINTHELIFE だな
795デフォルトの名無しさん:2012/08/17(金) 16:10:43.46
クロノトリガーの時の最果てに居る時の賢者ハッシュ
796デフォルトの名無しさん:2012/08/17(金) 16:17:00.17
>>795
ライブアライブのハッシュを忘れるなよ
先に出たのはあっちだぞ
797デフォルトの名無しさん:2012/08/17(金) 18:18:03.79
>>778
やはりそれが最善でしょうか
ありがとうございました
798デフォルトの名無しさん:2012/08/17(金) 18:26:46.97
>>774
明示的に処理する関数を用意することは当然として
デストラクタでのエラー処理の挙動は外から与えるように作ればよい
文脈によってエラー処理の方針は常に変化するのであるからクラス側で固定するべきではない
799デフォルトの名無しさん:2012/08/17(金) 20:27:40.50
>>798
なるほど
しかしそのクラスはテンプレートクラスで、どのような例外が投げられるかは全く分かりません
またそのクラスは頻繁に生成破棄を繰り返すので動的に関数を持ち運ぶのは出来ればしたくないです
静的に処理するにはどのような方法が有るでしょうか
800デフォルトの名無しさん:2012/08/17(金) 20:41:08.04
>>799
そういう場合はポリシーを使いましょう
801デフォルトの名無しさん:2012/08/17(金) 21:10:13.17
どうせデストラクタのタイミングでのエラー処理じゃログ出すくらいしか出来ない
802デフォルトの名無しさん:2012/08/17(金) 21:10:46.56
プログラミング10数年にして今さら dynamic_cast を知ったんだが、
何が便利(どう使えばいい)か教えてくれ。

キャストできないときに NULL が返るのは分かったが、
別に NULL チェックがしたいわけじゃないし、
キャストするときは大抵基底で判別してからやらない?

キャストしまくってポインタが返ってきたものだけ処理するとか…そんな書き方するのか…?
803デフォルトの名無しさん:2012/08/17(金) 21:14:49.31
使わないで書けるなら使わないしどうしても使わないと面倒なら使う
804デフォルトの名無しさん:2012/08/17(金) 21:15:25.34
普通にC++使ってれば使う場面なんて一生に一度ぐらいじゃないか
805デフォルトの名無しさん:2012/08/17(金) 21:17:52.53
だってメイヤーズおじさんが使うなって言うんだもん
806デフォルトの名無しさん:2012/08/17(金) 21:24:17.56
>>801
ハンドラで例外を受け取って後で再スローという手も

//close
void f1(){
 Logger<T> lg(st);
 lg.put();
 lg.close(); // throw
}
void f(){
 f1();
 f2(); //実行されない
}
―――――――――
//handler
void f1(){
 ExHandler h;
 {
  Logger<T> lg(st, h);
  lg.put();
 }
 h.checkThrow(); // throw
}
void f(){
 f1();
 f2(); //実行されない
}
807デフォルトの名無しさん:2012/08/17(金) 21:26:31.11
ありがとう。

ずっとC言語キャストばっか使ってたから、今の仕事でC++キャストを強制されて、すげーストレスなんだ…。
他のキャストはとりあえず分かったフリをしたが、dynamic_cast だけはこんな仕様必要か?って思ってしまったんだ。
とりあえず我慢してC++キャスト使っていくよ…。

…アンダーバーとか面倒じゃないのかねぇ。
808デフォルトの名無しさん:2012/08/17(金) 21:30:18.60
デストラクタでの例外の可能性のあるコードって握りつぶそうが何しようがそれはもはやバグだから俺ならすぐに落としてしまうが
開発段階でそんなコードはぜんぶ潰すように心がける

809デフォルトの名無しさん:2012/08/17(金) 21:31:31.28
> 他のキャストはとりあえず分かったフリをしたが、
> dynamic_cast だけはこんな仕様必要か?

リップマン先生も同じこと言ってたし
810デフォルトの名無しさん:2012/08/17(金) 21:32:50.16
>>807
キャストは少ないほどよい
キャストは基本的に悪
悪い事はめんどくさい事しないとできないようにしよう
というのがC++の文化
だからキャストはだらだら長くてださい予約語を割り当てた
Cスタイルキャストも仕様から除外したかったが互換性のために仕方なく残した
811デフォルトの名無しさん:2012/08/17(金) 21:33:42.36
>>807
そもそもすげーストレスになるほどキャストを使っているという状況が
おかしいのではないか?
812デフォルトの名無しさん:2012/08/17(金) 21:35:17.44
DAYONE-
813デフォルトの名無しさん:2012/08/17(金) 21:44:07.10
キャスト使いまくるとかどんな設計なんだよそれ……
814デフォルトの名無しさん:2012/08/17(金) 21:50:37.38
>>810-813
やっと動き出した仕事なので、書きまくってる訳じゃないです。
ファイル読み込みでポインタいじらにゃいかんところで使ってたぐらいです。

ストレスってのは、今までの書き方ができないストレスかなぁ。
>>812の通りで無駄に長くて、変な文字打たせて、揚句ソースは汚くなるし、
やってることは変わらないというのがどうにもね…。
815デフォルトの名無しさん:2012/08/17(金) 21:50:43.42
>>800
STLにおけるアロケータのような仕組みはポリシークラスというのですね、勉強になりました
しかしポリシーを用いてもスローされる例外の種類が分からない以上適切な処理を行うのは難しいと思うのです
解決策としてはストリームを渡すことによってそのストリームの状態を使ってエラー処理してもらう事になるのでしょうか
816デフォルトの名無しさん:2012/08/17(金) 22:09:03.82
>>9
数年ぶりに来たけど、まだあって安心した。
817デフォルトの名無しさん:2012/08/18(土) 00:16:16.84
std::pair と同じデータ構造使いたいけど
同じ型だとコンパイルの自動型推論(ポリモアフィズム?)でおかしくなるので
struct mypair: std::pair
{};
を作った。

継承なんてしてるせいで実行速度減らないか心配
std::pairをそのまま使った方が速度は速い?
818デフォルトの名無しさん:2012/08/18(土) 01:43:02.65
かわんないんじゃね
819デフォルトの名無しさん:2012/08/18(土) 05:33:48.25
>>802
D&E読めば書いてあるがRTTIの一環で考案された。
基本的には派生クラスの機能を使用する時も仮想関数でキャストしなくてもいいようにするはずだが、
時には特定の派生クラスの型情報がいる時もあり、そういう場合にdynamic_castでダウンキャストする。
他の機能もそうだがこういう余分な機能は必要になった時に使えばいいのであって必要なければ使わなくてもいいんだ。
820デフォルトの名無しさん:2012/08/18(土) 11:43:22.13
>>813
タグとして使うならあるいわ・・・

if( dynamic_cast< Attribute< true, true, true >& >( object ) )
{
 return object.Something();
}
else
{
 return object.Example();
}
821デフォルトの名無しさん:2012/08/18(土) 12:10:57.66
参照じゃぬるぽ来ないぞ
822デフォルトの名無しさん:2012/08/18(土) 12:13:06.82
そういやそうだった
823デフォルトの名無しさん:2012/08/18(土) 12:22:52.54
デバッグ時には結構使うけど
824デフォルトの名無しさん:2012/08/18(土) 13:44:08.12
ばぁぶー!
825デフォルトの名無しさん:2012/08/18(土) 13:54:10.32
if( dynamic_cast< std::tuple< Can, You, Speek, English >* >( bob ) )
{
  std::puts( "No. So I'm japanese." )
}
826デフォルトの名無しさん:2012/08/18(土) 20:50:04.53
キャストを多用する奴はキャス
827デフォルトの名無しさん:2012/08/19(日) 08:55:26.16
opneMPって.net3.5以降入ってないように思えるけど
消滅しないよね?
828デフォルトの名無しさん:2012/08/19(日) 09:25:12.44
釣りか
829デフォルトの名無しさん:2012/08/19(日) 10:49:45.89
質問させてください。
比較演算子を仮想関数にしたいのですが、下のように書いても、引数の型が違うため、動的結合になってくれません。
(下記プログラムでは派生クラスが一つしかありませんが、実際には多数あります。)

仕方ないので、基本クラスのoperator==だけを定義し、そこで実行時の型を判定して型に応じた処理をさせているのですが、
これだとオブジェクト指向の意味が半減するような・・・。こういう場合、どう書くのが一般的なのでしょうか?

class Base
{
public: virtual bool operator==(const Base& obj) const
{
cout << "基本クラスの処理\n";
return true;
}
};

class Delived : public Base
{
public: virtual bool operator==(const Delived& obj) const
{
cout << "派生クラスの処理\n";
return Base::operator==(obj);
}
};

int main()
{
Delived d1, d2;
Base *pB1 = &d1, *pB2 = &d2;
if(*pB1 == *pB2) { } // Baseクラスしか呼ばれない
return 0;
}
830デフォルトの名無しさん:2012/08/19(日) 11:08:11.11
自己レスです。

改めてプログラムを眺めていて気付いたのですが、派生クラスの演算子を

virtual bool operator==(const Delived& obj) const
ではなく
virtual bool operator==(const Base& obj) const
とすればうまくいきそうです。(試してみたところ、うまく動いています。)

派生クラスの演算子なのに基本クラスの参照で引数を受け取るのは何だか変な気持ちですが。。。

もし考え違いをしているようでしたらご指摘くださればありがたいです。
831デフォルトの名無しさん:2012/08/19(日) 11:28:25.53
http://codepad.org/X49BBIRw
どうしても==で派生まで比較したいならこんな感じかねぇ
でもvirtualで実装した演算子は混乱を招くから一部の便利なパターンを除いてお勧めしないよ

自分が作るなら
operator == はvirtualにしないでスライシング&等価判定にして
派生まで含めた完全な等価判定はvirtual Equalsを直接呼び出す風に書くけど
832デフォルトの名無しさん:2012/08/19(日) 12:12:35.05
>>831
貼っていただいたソース拝見しました。確かにこれなら派生分を含めて判定可能ですね。
わざわざ完全なソースまで作っていただき、ありがとうございます!

ところで、「一部の便利なパターン」とは、どんなパターンなのでしょうか?
もしよろしければ、後学のために教えていただけると嬉しいです。
833デフォルトの名無しさん:2012/08/19(日) 12:55:52.55
>830
プークスクスクスそれは当たり前であって、
同一シグネチャのメソッドの振る舞いがオブジェクトによって変わるというのが多態性だというのに、
シグネチャ自体を最初からBaseとDelivedで相違させて多態とかYOUは何をしたかったのか

また、>830の処置で一見多態を実現できたとしても、Delived::operator==(const Base& obj)の中で
objが本当はどのクラスなのか特定して適切な比較演算を行うという難事業が待っておる
>831の最後のようなやり方でも、Equals()がconst Base&を引数としてとる限りは同じ話
dynamic_castでも使わないことには解決しない
834デフォルトの名無しさん:2012/08/19(日) 12:57:33.81
なにかってに話しかけ店の?
835デフォルトの名無しさん:2012/08/19(日) 13:05:25.59
dynamic_cast を使えばいいってだけだね、くだらん
このケースでは dynamic_cast 相当の関数を自作だってできる(>>833 にはできなさそうに見えるが)
836デフォルトの名無しさん:2012/08/19(日) 13:07:29.83
dynamic_castなんか必要ないが?
837デフォルトの名無しさん:2012/08/19(日) 13:13:12.88
>>835
dynamic_cast相当の機能をプログラマが書いても良いが、
未来におけるDelivedの潜在的設計者全員にそれを強制する仕組みが別途要るわけだが
>835クンには設計センスがないね〜

一方ロシアはoperator==()を仮想関数などにせず、Equals()も設けず、dynamic_castも使わずに解決した
838デフォルトの名無しさん:2012/08/19(日) 13:13:13.67
流れ追ってるか?
839デフォルトの名無しさん:2012/08/19(日) 13:17:13.05
ぷーくすくす配達クラスで何がしたいの?
必要に応じてってだけで強制することには全然ならないんだが =0; はともかく
840デフォルトの名無しさん:2012/08/19(日) 13:23:51.69
>>839
=0;は実体化できないのだからdynamic_castのしくみで比較できなくとも実害アリマセンネー
それはともかく、わざわざ藻前は仮想関数テーブルのアドレスをプログラマに算出させるのか
それとももっと原始的な方法をとって、Delivedが追加される度にクラス識別コード一覧の定義ファイルをメンテナンスせねばならないつくりにしたいのか
841デフォルトの名無しさん:2012/08/19(日) 13:26:54.81
あほ =0; は実体化できるよ
842デフォルトの名無しさん:2012/08/19(日) 13:27:56.02
>>841
kwsk
843デフォルトの名無しさん:2012/08/19(日) 13:28:46.73
vtable の実装には全然関係ないし
識別コードって GUID のことか? これまた全然いらないし
844デフォルトの名無しさん:2012/08/19(日) 13:30:22.99
ダブルディスパッチする手もあるが
845デフォルトの名無しさん:2012/08/19(日) 13:42:36.63
どうやらぷーくすくす君は仮想関数をやめてif文の羅列にしたいらしい
846デフォルトの名無しさん:2012/08/19(日) 13:46:19.64
シリアライズしてバイナリ比較
ハイおしまい
847デフォルトの名無しさん:2012/08/19(日) 13:48:48.88
>>843
dynamic_cast相当の機能は少なくとも型の互換性情報をオブジェクト内に埋め込まねば始まらない
C++のdynamic_castは、仮想関数を1つ以上持つオブジェクトに必ず埋め込まれている
仮想関数テーブル(vtable)のアドレスをそれに利用している

>識別コードって GUID のことか? これまた全然いらないし
上記のように互換性情報の埋め込みが全くいらないというdynamic_castはありえない
識別コード不要のテクニックとして、構造体の先頭に構造体サイズを持たせ、その大小で、
キャスト可能か否か判定する方法が存在はするが、既存フィールドの順序を厳格に保たねばならないなど、
コンパイラが責任をもてない規則が増える

>>845
>837の最後の1行が藻前にはそう見えるのかそうか…達者でな
848デフォルトの名無しさん:2012/08/19(日) 13:51:32.99
>>831で解決してる問題をわざわざ引き延ばすな
炎上質問法はもう流行らないから
849デフォルトの名無しさん:2012/08/19(日) 13:51:41.43
>>846
生成時の(ていうか、一般にvtableへのポインタとかあるので生成直前の、が正しい)領域全体のゼロクリアをお忘れなく
850デフォルトの名無しさん:2012/08/19(日) 14:06:53.92
vtable の実装がどーとか言うまえに
まず virtual の外から見た使い方くらい押さえろよ
この流れはそれだけで充分だぞ
851デフォルトの名無しさん:2012/08/19(日) 14:57:43.14
>>846
単にdynamic_cast使ったほうが早くね?
インライン化されて条件が消え失せてくれることもあるし

bool Delived::operator == ( const Base &base )
{
 if( !dynamic_cast< Delived* >( &base ) ) return false;
// 他
}
852デフォルトの名無しさん:2012/08/19(日) 15:06:06.48
>>851
ここではoperator == ( const Base &base )がvirtualなので、
operator==()に与えられる引数の型(真 or Delivedのどれか)を
コンパイル時に真に一意に決定できる場合にしかインライン化されない

当然そのときはdynamic_castも最適化で除去されるわけで、
dynamic_castを使ったら速くなる、というのは偽のような気がするが
853デフォルトの名無しさん:2012/08/19(日) 15:15:30.71
>>852

bool Compare( const Base &left, const Base &right )
{
  return left == right;
}

if( !Compare( Delived(), Base() ) )
{
  std::puts( "Not equal" );
}

MSのコンパイラーならこういうコードはインライン化されて
最終的にstd::putsだけになる。インライン展開される機会って
そんなに少なくないから十分じゃないか?
854デフォルトの名無しさん:2012/08/19(日) 15:18:58.54
template <class D> struct TypeInfo {
static void * GetTypeID(void) { static int i ; return &i ; }
};

struct Base {
virtual void * GetTypeID(void) const = 0 ;
virtual bool operator == (Base const & obj) const = 0 ;
} ;

struct Derived1 : Base {
/* override */ void * GetTypeID(void) const { return TypeInfo<Derived1>::GetTypeID() ; }
/* override */ bool operator == (Base const & obj) const {
if(this == &obj) return true ;
if(TypeInfo<Derived1>::GetTypeID() != obj.GetTypeID()) return false;
return CompImpl(static_cast<Derived1 const &>(obj)) ;
}
bool CompImpl(Derived1 const & obj) const;
}

これがほぼ最強やな
855デフォルトの名無しさん:2012/08/19(日) 15:23:48.67
struct Derived1 : Base {
/* override */ void * GetTypeID(void) const { return TypeInfo<Derived1>::GetTypeID() ; }
/* override */ bool operator == (Base const & obj) const { return TypeInfo<Derived1>::GetTypeID() == obj.GetTypeID() && *this == static_cast<Derived1 const &>(obj) ; }
bool operator == (Derived1 const & obj) const { return this == &obj || /* ry */ ; }
};

いやこうだな
856デフォルトの名無しさん:2012/08/19(日) 15:25:23.98
実測してみたら?多分dynamic_castの方が速いか同じ速度だよ
857デフォルトの名無しさん:2012/08/19(日) 15:28:36.39
>>856
それ以前にdynamic_castじゃ簡潔に書けないよ
ためしに一回書いてみ?
typeid(組み込みか自作か)の比較が必要になってくるから
858デフォルトの名無しさん:2012/08/19(日) 15:33:31.84
だよな
最初にdynamic_castとか言い始めたアホは誰だよ
859デフォルトの名無しさん:2012/08/19(日) 15:35:36.28
わたしです
860デフォルトの名無しさん:2012/08/19(日) 15:39:12.82
>>857
どういう事?派生と一致するとマズイって事かい?
861デフォルトの名無しさん:2012/08/19(日) 15:46:48.95
dynamic派はちょっとコードさらして
普段実行時型なんて使わんからホントにできんのかちょっとこんがらがってきた
862デフォルトの名無しさん:2012/08/19(日) 15:55:08.26
>>829 以降、基底・派生が混在した等値比較をどう意味づけるのか、はっきり読み取れないんだが
みんな同意のうえで話してるの?

等値の条件に型の一致を必要とするなら typeid の比較が当然なんだろうけどさ、片方が一方の
派生である場合に基底部分だけの一致で等値とみなすことも考えられるよね? dynamic_cast を
使うって言う人はたぶん後者で考えてるよね?
863829:2012/08/19(日) 16:26:12.94
質問者です。たくさんのレスありがとうございます。

>>833
キャストが必要であるにしても、最初に自分が採っていたやりかた(基本クラスですべての処理をする)に比べると随分すっきりする
ので、よしとします。

>>839
基地がたくさんあって、配達をされた内容によって基地ごとに処理をわけたかったんですwww
非常にお恥ずかしい。

>>862
皆さんほどC++に詳しくないので、あまり議論についていけてないのですが。。。

基本クラスは抽象クラスで、基本クラスの実体を生成することはありません。
また、実際の運用上、配達…じゃなかった、派生クラスAのオブジェクトと派生クラスBのオブジェクトを比較するといったような、
異なる派生クラスどうしを比較することもありません。

よって、たとえば>>830の方法で処理する場合、派生クラスの比較処理は、自分の型に強制的にキャストして比較してやればうまくいきます。
念のために、別の派生クラスのオブジェクトが渡された場合にエラーとなるよう、何らかの処理は入れるつもりですが。
864デフォルトの名無しさん:2012/08/19(日) 16:31:29.48
>>862
>派生である場合に基底部分だけの一致で等値とみなすことも考えられるよね? dynamic_cast を
>使うって言う人はたぶん後者で考えてるよね?
別に。つかむしろ話は反対で、operator==()を仮想関数とするという残念な基本構想のため、
dynamic_castでも使わねば
 virtual bool Delived::operator==(const Base& obj)
というシグネチャに従い、Delivedクラスである*thisと、Baseクラスにアップキャストされたobjの比較しかできませんよ、みたいなノリ
865829:2012/08/19(日) 16:39:00.42
あ、いや、考え違いをしていました。
異なる派生クラスどうしでの比較は起こりえますです。

いずれにせよ、派生クラスの比較演算子の中で、異なる型が来た場合は同値でないと判断させればいいですね。

その方法がdynamic_castなのか別の方法なのかは、今回の質問の意図からは外れますので、あまり気にしません。
866デフォルトの名無しさん:2012/08/19(日) 16:59:45.22
> operator==()を仮想関数とするという残念な基本構想のため

残念なのでしょうか? 本来はどうすべきなのでしょうか?

ちなみに今回やりたいことは、以下のようなことです。

作成したいのは、一種のドローソフトのようなものです。ワードの図形描画機能とかIllustratorに近いものを想像してください。
図形にはいろいろ種類があります。たとえば直線や円や四角のような(実際にはちょっと違うのですが、まあ似たようなものです)。
「図形」クラスが基本クラスで、「直線」等が派生クラスです。

ユーザーは、キャンバス内に複数の図形を描画できます。
プログラムでは、それらは図形クラスのポインタを集めたコンテナ(ただの配列ですが)で保持しています。

ユーザーが描画処理を開始する前にバックアップとしてコンテナのコピー(深いコピー)を作成しておき、編集完了操作後に、バック
アップしたコンテナと編集されたコンテナとで比較を行って、変更されていた場合は「変更されているが保存するか?」という確認を
表示します。

コンテナの比較は、保持している図形の個数が等しいかどうかをまず判定し、等しい場合は、その中に保持されている個々の図形の
比較演算子を順次呼び出すことで比較をおこないます。
コンテナが保持しているのは基本クラスであるところの「図形」クラスのポインタなので、if(*pBase1 == *pBase2) のような比較が
発生します。

このような内容なのですが、operator==()を仮想関数にしないとすれば、どうするのが適切なのでしょうか?

初心者的な内容だと思いますが、良い方法があればご教示くださいませ。
867デフォルトの名無しさん:2012/08/19(日) 17:01:39.71
>>865
違う型は等値でないとしていいならtypeidの比較でFAだな。
dynamic_castだと指定の型とその派生型を区別しないから不適。
868デフォルトの名無しさん:2012/08/19(日) 17:10:20.79
>>866
各クラスの operator == は普通に同じ型の引数を取るものを定義。
で、 virtual bool Equals() const = 0 は各クラスで typeid を確認した後に *this == ...
とすれば自然な気がする。

この実装部は型が違うだけになるんで、基底クラスにテンプレートで置いとけば少し楽が
できるだろう。派生クラスを定義するのが限られた範囲なら、宣言まで含めてマクロにしても
いいかもしれない。
869デフォルトの名無しさん:2012/08/19(日) 17:15:35.49
>>857
if( typeid( *this ) != typeid( base ) ) return false;
で良いわけか。これなら孫クラスからDelived::operator==( base )呼び出しても使えるな。

あとtypeidって結局v_tableに展開されるんだよな。いちいちID持つより速いだろうね。
if( *this->v_table != base.v_table ) return false;
870デフォルトの名無しさん:2012/08/19(日) 17:19:12.49
とっくに答えでてる話を延々といつまでやってんだよwww
871デフォルトの名無しさん:2012/08/19(日) 17:30:25.44
>>868
なんでわざわざEqualsとoperator==で二重定義するのか判らん
872デフォルトの名無しさん:2012/08/19(日) 17:32:24.14
>>871
中身が違うからだよ
873デフォルトの名無しさん:2012/08/19(日) 17:41:12.36
詳しく
874デフォルトの名無しさん:2012/08/19(日) 17:49:09.01
>>868は、C#のbool Equals(object obj)のガイドラインを地で行くやり方だな
Equals()の引数が空なの書き損じミスらしいがw

>>871
非virtualなbool Delived::operator==(const Delived& obj);を書けば、そちらはtypeidの比較が明白に不要で
かつvtableが介在しない分、コンパイラがちょっとがんばるだけでインライン展開も思いのまま
円と円とか、四角と四角、を比較する場合は a == bと書いて最適なコードが生成される
どれかの図形とどれかの図形の比較のときは、プログラマにEquals()を呼んでもらう、みたいなノリ
(C#のガイドラインではoperator==()から結局Equals()を呼んでるが、これはおそらくJITだからあまり効率に響かないのであろう
875デフォルトの名無しさん:2012/08/19(日) 17:52:46.85
>>870
同意見

「残念な基本構想」を強いて挙げるなら operator == がメンバという点くらいだが
これだけ延々と話すほどの情報量はない
876デフォルトの名無しさん:2012/08/19(日) 17:52:53.20
画像処理で画像の横方向foreachと縦方向foreachの2重ループ書くことが頻繁にあるんだけど
こういう2重ループをまとめたライブラリーみたいなの、ないのでしょうか
877デフォルトの名無しさん:2012/08/19(日) 17:56:27.97
>>876
関数にまとめればおしまいだろうしアプリごとの都合がいろいろ入りそうだし、ないんじゃないかな。
878デフォルトの名無しさん:2012/08/19(日) 18:06:44.46
>>875
>866はぎりぎりセーフだが、typeidの一致確認後、Delivedとしての内容の一致比較まで踏み込む場合は>868でFA
つまり、Baseや派生クラスとの比較を担保するvirtualなEquals()と、同一のDelived同士の比較のみ担保する非virtualなoperator==()の構成で正しい
さもないと、Baseおよびその派生クラス全てからfriendされ、巨大なif文とともに全てのDelived同士の比較ロジックを内臓する
巨大なoperator==(const Base& a, const Base& b)を書く羽目になる
長くなってサーセン;
879デフォルトの名無しさん:2012/08/19(日) 18:14:15.92
>>874
普通仮想関数でも引数の型が決まってりゃインライン展開されるよね。
>>853 みたいな話で。
そのへんどう考慮してんの?
880デフォルトの名無しさん:2012/08/19(日) 18:15:08.80
>>876
もし「画像」の二重ループのさせ方が表記上一定の構文で良く、
それに対して呼び出すべき処理も表記上一定の構文で良くて記号のみ変わるようなら
テンプレートでFA、なのでは

二重ループ処理を関数にまとめる、でも良いが、そうすると呼び出すべき処理を関数ポインタで渡さねばならず、
実行速度上多少不利かもしれない
(すくなくともインライン展開の出る幕は完全に無くなってしまう
881デフォルトの名無しさん:2012/08/19(日) 18:15:15.64
friend っておまえ・・・ (図工
882デフォルトの名無しさん:2012/08/19(日) 18:22:50.09
>>878
>つまり、Baseや派生クラスとの比較を担保するvirtualなEquals()と、同一のDelived同士の比較のみ担保する非virtualなoperator==()の構成で正しい

逆の関係のほうが良くね?operator==使うときの用途は完全一致しか無いんだから
部分一致の判定だけ別関数にしといた方がいいよ。
大体根底クラスの部分一致ならスライシングさせてもできるし。
883デフォルトの名無しさん:2012/08/19(日) 18:31:14.99
障子をきれいに貼るにはどうしたらいいんですか?
884デフォルトの名無しさん:2012/08/19(日) 18:43:27.55
>>880
関数ポインタ?あんたC++標準アルゴリズム知らんの?
885829:2012/08/19(日) 18:54:07.83
>>878
> さもないと、Baseおよびその派生クラス全てからfriendされ、巨大なif文とともに全てのDelived同士の比較ロジックを内臓する
> 巨大なoperator==(const Base& a, const Base& b)を書く羽目になる

巨大なif文にしたくないからこそ、virtualにしようとしているのですが。。。

派生クラスでoperator==をvirtualにして、
bool DerivedX::operator==(const Base &obj)
{
if(typeid(*this) != typeid(obj))
return false;
DerivedXクラスの内容比較
}
とすれば、巨大なifを作る必要はないと思いますが、間違ってますでしょうか?

>>882
>>878は部分一致で判定をしようとしているのではなく、単に引数の型が同一派生クラスどうしか否かによって、関数をわけようと
言っているのだと思いますが。
886デフォルトの名無しさん:2012/08/19(日) 18:55:44.69
まあ好みの問題かもしれないことはお断りしておくが、
>>879
コンパイラに仕事しなくていいと伝えられる場合は伝えたほうが良い希ガス

>>882
一般に、Delived::operator==()にDelived以外のクラスとの比較機能も持たせると、
当てはまるクラスが追加される度に、我々が==演算子というものに対して期待する性質
(常等性(a==a)や交換則(a==bならb==a)や結合則(a==bかつb==cならa==c)といったもの)
が損なわれていないか、気にかけ続ける必要が生じてしまう
Equals()にはそこまで強い期待は世間的に無く、"Equals()"というシグネチャに出くわしたプログラマは
やや注意深く仕様書を読むであろうから、多少異常な等値演算の機能を持たせても問題が少ない
887デフォルトの名無しさん:2012/08/19(日) 18:56:55.25
>>876
フィルターを書けるとか塗りつぶしたいとか具体的に何がしたいの?
用途によっちゃboost::gilで済むだろうよ
元々Adobeが使ってた画像処理用高機能ライブラリだ
888デフォルトの名無しさん:2012/08/19(日) 19:05:10.88
>>885
そりゃ分かってるよ。ただ言語的に不自然という話。
部分一致の方法は言語的に元々用意されてて自分のコードだけ
特殊な事をすれば他のライブラリーと協調性が無くなるんだよ。

○言語的に用意されてる方法

// 完全一致
delived == baseB;

// 部分一致1
baseA = delived;
baseA == baseB;

// 部分一致2
Base &baseA = delived;
baseA.Base::operator==( delived );
889デフォルトの名無しさん:2012/08/19(日) 19:06:10.39
最後間違えた・・・

// 部分一致2
Base &baseA = delived;
baseA.Base::operator==( baseB );
890デフォルトの名無しさん:2012/08/19(日) 19:08:37.49
>>885
>878は、>875(「operator == がメンバ」である点が残念)に対するレス
非メンバの大域関数としてbool operator==(const Base&, const Base&)を設け、
かつDelivedやBaseにおいて、operator==()またはそれと同様な機能のメンバを公開しなかった場合、
大域関数の中身が酷い事になりますよ、みたいなノリ

仮想関数が全く要らないという本日正午ごろの発言は撤回すますごめん;

>>884
正直知らんが、>887は、イテレータを作れと言うのでもなく、二重ループを行う関数を作れと明白に言っているので
>880はそれほど間違った指摘ではないつもり
891890:2012/08/19(日) 19:11:13.54
アンカーミスった、orz
×: >887
○: >877
892デフォルトの名無しさん:2012/08/19(日) 19:15:00.58
>>890
処理を渡すためには関数ポインタが必要になる、というのは明らかに間違い。
標準アルゴリズムのように関数オブジェクト使えばインライン展開も可能。
893デフォルトの名無しさん:2012/08/19(日) 19:31:21.03
関数ポインターがインライン展開されないってのも間違いだけどぬ
テンプレートの引数に渡した場合はインライン展開の対象になる
厳密にはインライン展開できる関数の引数に渡した場合はインライン展開できる
894デフォルトの名無しさん:2012/08/19(日) 19:36:07.40
s/Delived/Derived/g
895デフォルトの名無しさん:2012/08/20(月) 15:39:30.92
openMPが消滅したとして
何が並列化の標準になるの?
>>827
> 827 名前:デフォルトの名無しさん [sage]: 2012/08/19(日) 08:55:26.16
> opneMPって.net3.5以降入ってないように思えるけど
> 消滅しないよね?
896デフォルトの名無しさん:2012/08/20(月) 15:41:56.92
>>887
gil何かが物足りないから
いつもOpenCVだ
c++と画像処理は相性良くないのかもしれない
897デフォルトの名無しさん:2012/08/21(火) 00:44:52.39
256諧調ですむならいいけどねぇ。
898デフォルトの名無しさん:2012/08/21(火) 01:30:02.77
足りないときは16bitにすればよくね?
899デフォルトの名無しさん:2012/08/21(火) 01:50:28.31
1色素をdoubleにして1画素256bitか
1色素をfloatにして1画素128bitにしとくといい感じ

まぁ、1色素intにして少数位置ずらしたほうが速度出るけど
900デフォルトの名無しさん:2012/08/21(火) 09:42:02.60
色素に浮動小数点数使っても指数部ビットが無駄になる気がするけど・・・
901デフォルトの名無しさん:2012/08/21(火) 14:53:01.83
902デフォルトの名無しさん:2012/08/21(火) 17:04:28.08
きっと0.0001Luxから1000万Luxまで扱うHDRなんだろう
903デフォルトの名無しさん:2012/08/21(火) 19:08:40.36
すいません。初めて投稿するのですが、巡回セールスマン問題の完全列挙法を再起呼び出しでやれ
という課題がゼミで出ているのですが、全然分かりません。ネットで結構調べたのですがダメだったので、
どなたか教えてくれる方ございましたら、お願いいたします。
904デフォルトの名無しさん:2012/08/21(火) 19:15:08.23
>>902
自然光計算したら28bitなんて直ぐ潰れるもんな
905デフォルトの名無しさん:2012/08/21(火) 19:17:34.49
>>903
まず再起呼び出しはわかるのか?
906デフォルトの名無しさん:2012/08/21(火) 19:19:00.57
>>903
「巡回セールスマン問題」と「完全列挙法」と「再起呼び出し」をそれぞれググって
何が分からないのか書いてみたら?
907デフォルトの名無しさん:2012/08/21(火) 19:36:11.48
宿題は宿題スレでやるべきじゃね?
908デフォルトの名無しさん:2012/08/21(火) 19:38:53.13
「分かりません」と書いて提出しろ。
909デフォルトの名無しさん:2012/08/21(火) 19:44:28.53
>>907
>>903がヒントでなく答えそのものを求めてるならそうだな
910デフォルトの名無しさん:2012/08/21(火) 20:00:06.87
>>903
字面的に「全ルートを列挙して解け」ってことだろ……
列挙するのに再帰使えってこと
911デフォルトの名無しさん:2012/08/21(火) 20:19:53.40
>>910
そのとおりです。意味は分かったんですけど、プログラムが書けないんです・・・
912デフォルトの名無しさん:2012/08/21(火) 20:26:43.47
先生にわかりませんって言って教えてもらえ
913デフォルトの名無しさん:2012/08/21(火) 20:28:42.74
                  )
             (
         ,,        )      )
         ゙ミ;;;;;,_           (
          ミ;;;;;;;;、;:..,,.,,,,,
          i;i;i;i; '',',;^′..ヽ
          ゙ゞy、、;:..、)  }
           .¨.、,_,,、_,,r_,ノ′
         /;:;":;.:;";i; '',',;;;_~;;;′.ヽ
        ゙{y、、;:...:,:.:.、;:..:,:.:. ._  、}
        ".¨ー=v ''‐ .:v、,,、_,r_,ノ′
       /;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
       ゙{y、、;:...:,:.:.、;:..:,:.:. ._  .、)  、}
       ".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
      /i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
      ゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、)  、}
      ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
914デフォルトの名無しさん:2012/08/21(火) 21:00:22.09
>>911
1. 再帰自体ワカラン
2. 再帰で探索する方法がワカラン
3. 「枝刈り」がワカラン
4. 巡回セールスマン問題を解く方法が想像できない
どの番号?
915デフォルトの名無しさん:2012/08/21(火) 21:26:13.04
>>914
2番です^^巡回セールスマン問題を解くためのアルゴリズムは理解できているとおもいます。
再起でプログラムを組む方法が馬鹿なので想像できないのです;;
916デフォルトの名無しさん:2012/08/21(火) 21:36:02.16
>>915
多分どちらかと言えば「深さ優先探索」を使うんだろうね
「深さ優先探索 再帰」とかのワードでググってみたら?
917デフォルトの名無しさん:2012/08/21(火) 21:51:36.75
void SAIKI(コンテナ)
{
while(1)
{
行き先を探す
見つかった コンテナに行き先を入れる SAIKI(コンテナ)
見つからなかった break;
}
}
こんなんじゃねーの
918デフォルトの名無しさん:2012/08/21(火) 21:59:57.80
>>916
ありがとうございました。違いました(><)
質問が下手すぎました。すんません。
巡回セールスマン問題の厳密解を総当り法で求めるプログラムを再起呼び出し
を用いて作成せよ。っていう問題なんですが、宿題なので宿題板で質問した方が
よろしいでしょうか?お手数おかけして申し訳ございません。
919デフォルトの名無しさん:2012/08/21(火) 22:43:40.58
>>903
> ネットで結構調べたのですがダメだったので

もしかして、「再帰」じゃなくて「再起」で調べたから見つからなかったというオチじゃないよな。
920916:2012/08/21(火) 23:31:52.62
>>918
>違いました(><)
とりあえずC++だの言う以前に頑張って学ぼうぜ
頑張ろうぜ
921デフォルトの名無しさん:2012/08/22(水) 10:31:54.89
>>918
  B
A<|>D
  C
※A-B, A-C, B-C, B-D, C-Dの連結

のような道があったとして
まずA, B, C, Dから探索開始、Aからとして
 「Aから(B,C)を探索」出来る、でBについて
  「Bから(C,D)、既に通ったAは除外して探索」出来る、Cについて
   「Cから(D)、既に通ったA,Bは除外して探索」出来る

A┬B┬C─D
 │ └D─C
 └C┬

そうやって再帰的に探索する
探索結果のうち距離が最小になるものを返せばいい
922デフォルトの名無しさん:2012/08/22(水) 11:10:44.38
まずCの上にLispを作ります
ambで巡回する都市を列挙します
3行ぐらいで解けます
923デフォルトの名無しさん:2012/08/22(水) 11:19:17.89
Aに帰らないとダメっぽいけどまぁそれぐらい追加できるか
924デフォルトの名無しさん:2012/08/22(水) 11:22:17.30
行列で解くとはやいよ
925デフォルトの名無しさん:2012/08/22(水) 11:26:09.50
sealedってできないん?継承禁止的なあれ
926デフォルトの名無しさん:2012/08/22(水) 11:36:08.92
C++11で struct A final{}; というように継承禁止出来るようになるので
お使いのコンパイラが対応するまで長らくお待ち下さい。
927デフォルトの名無しさん:2012/08/22(水) 12:01:35.09
class Sealed {
Sealed() {}
Sealed(Sealed const & obj) {}
public:
static Sealed * New() { return new Sealed(); }
};

すいません自己解決しました
928デフォルトの名無しさん:2012/08/22(水) 15:41:31.89
>>918
ありがとうございます。なんとかなりそうです^^
みなさんいろいろありがとうございました。
929デフォルトの名無しさん:2012/08/22(水) 18:55:58.50
失せろゴミ
930デフォルトの名無しさん:2012/08/22(水) 20:07:44.66
>>927
static Sealed Create() { return Sealed(); } も欲しいが
コピコンが空だと困るな
931デフォルトの名無しさん:2012/08/22(水) 20:19:53.40
それじゃ継承できちゃう
932デフォルトの名無しさん:2012/08/22(水) 22:01:30.52
= default があれば・・・と言いたい所だが
それがあるなら final があるというジレンマ
933デフォルトの名無しさん:2012/08/22(水) 23:36:49.64
継承とテンプレート、データ構造ぐらいしか知らない
次何やろか
934デフォルトの名無しさん:2012/08/22(水) 23:45:54.89
C#やればいいよ
935デフォルトの名無しさん:2012/08/22(水) 23:58:06.93
>>933
それがC++の本質だといつから錯覚していた……?
936デフォルトの名無しさん:2012/08/23(木) 00:01:12.45
const int a[] = { 4, 1, 0, 2, 3, 5, 6 };
const int b[] = { 4, 1, 0, 5 };

aの中からbのどれとも一致しない位置を見つけるアルゴリズムってありますか?
上の例だと2が帰ってくるものです。
937デフォルトの名無しさん:2012/08/23(木) 00:06:46.84
struct Hoge {
int value;
#if 1
volatile Hoge& operator = (const Hoge& m) volatile { value = m.value; return *this; }
#else
volatile Hoge operator = (const Hoge& h) volatile { value = h.value; return *this; }
#endif
Hoge& operator = (const volatile Hoge& h) { value = h.value; return *this; }
Hoge(const volatile Hoge& h) { value = h.value; }
Hoge(const Hoge& h) { value = h.value; }
Hoge() : value(0) {}
};

int main() {
volatile Hoge vh;
Hoge h;
vh = h;
h = vh;
}

if 0 のときは警告無しでコンパイル出来るのですが、
if 1 のときは、以下のような警告が出ます。
tmp.cpp:18:8: 警告: implicit dereference will not access object of type ‘volatile Hoge’ in statement [デフォルトで有効]

operator= で volatile な構造体の参照を返すことはいけないことなのでしょうか。
コンパイラは g++4.6.3 です。
938デフォルトの名無しさん:2012/08/23(木) 00:16:05.10
>>937
Hoge厨失せろよ
お前きもちわりーんだよ
939デフォルトの名無しさん:2012/08/23(木) 00:22:11.67
>>937は煽るためにHogeとか使ってるだけだろ。

スルーでおk。
940937:2012/08/23(木) 00:26:39.79
ここではHoge使ってはいけないんですか。
何でもいいのですが……
941デフォルトの名無しさん:2012/08/23(木) 00:37:02.37
struct oge {
int value;
#if 1
volatile oge& operator = (const oge& m) volatile { value = m.value; return *this; }
#else
volatile oge operator = (const oge& h) volatile { value = h.value; return *this; }
#endif
oge& operator = (const volatile oge& h) { value = h.value; return *this; }
oge(const volatile oge& h) { value = h.value; }
oge(const oge& h) { value = h.value; }
oge() : value(0) {}
};

int main() {
volatile oge vh;
oge h;
vh = h;
h = vh;
}

if 0 のときは警告無しでコンパイル出来るのですが、
if 1 のときは、以下のような警告が出ます。
tmp.cpp:18:8: 警告: implicit dereference will not access object of type ‘volatile oge’ in statement [デフォルトで有効]

operator= で volatile な構造体の参照を返すことはいけないことなのでしょうか。
コンパイラは g++4.6.3 です。
942デフォルトの名無しさん:2012/08/23(木) 00:39:37.90
>>936
bが大量にあるのならbをソートしておいて
aの先頭から1つ1つbを二分探索だと思われ
あるいはbをstd::setとして作っておくか
943デフォルトの名無しさん:2012/08/23(木) 00:40:12.08
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge

944デフォルトの名無しさん:2012/08/23(木) 00:47:20.50
>>940
ここは?
まともな人間だろうと普通は使わないんだけど
ちゃんと教育受けられない環境で育った人?
945デフォルトの名無しさん:2012/08/23(木) 00:50:05.03
>>940
何でもいいならhogeやめてbokuhabakadesuにしろよ
言ってることは同じだからいいだろ
946デフォルトの名無しさん:2012/08/23(木) 00:51:19.68
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHoge
947937:2012/08/23(木) 00:51:24.93
C++は独学です。ちゃんと教育受けてないです。
948デフォルトの名無しさん:2012/08/23(木) 00:53:42.27
Hogeがどうとか言ってる奴はただの荒らしだからほっとけばいいよ
949937:2012/08/23(木) 00:58:57.02
Twitterで教えてもらったのでもういいです。
Twitterの人たちはHogeには特に何も言いませんでした。
もう二度と来ません。
950デフォルトの名無しさん:2012/08/23(木) 01:05:17.14
正常な人が拒否反応起こしてるのを見ても
それを理解できずに荒らし認定しかできない思考停止してる>>948














不憫すぎてwwwwwwwwwwwwwwwwwww
951937:2012/08/23(木) 01:18:03.42
>>941 >>949
なりすまし止めて。
952デフォルトの名無しさん:2012/08/23(木) 01:23:39.64
hogeは万物の均衡を表すための抽象的な概念だ。
世界が平和なのも、
我々が健康でいられるのも、
空が落ちてこないのも、
全てが均衡のなせる事象でありこれをhogeとすることによって
我々は初めて認識できるのであり
この場合はhogeが世界の均衡と我々の理解との仲介をするための
いわゆる媒介と考えることもできる。
つまりhogeなくしては我々は世界とのつながりを維持できないのである。

よってhogeを否定することは反社会的かつ悪質極まりない行為であり、
法的制裁をとるべく政府には動いてもらいたい。
結構本気で。
953937:2012/08/23(木) 01:34:12.93
>>941,>>951は偽物です。
レス読んだ感じで分かるとは思いますが、念のため。
質問は締め切っています。
954デフォルトの名無しさん:2012/08/23(木) 01:54:27.11
>>940
このスレにはHogeが嫌いな輩がやけにいるんだよ……
せめてpiyoとかにしておけ
955デフォルトの名無しさん:2012/08/23(木) 08:04:57.24
foo bar
956デフォルトの名無しさん:2012/08/23(木) 08:10:53.68
英語圏でfooを使うと苦情がくる
957デフォルトの名無しさん:2012/08/23(木) 08:33:04.14
フーバーは初代FBI長官
958デフォルトの名無しさん:2012/08/23(木) 09:41:55.95
またhogeに憎悪を抱くキチが湧いてるのか
959デフォルトの名無しさん:2012/08/23(木) 10:31:47.14
>>937
ttp://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/C_002b_002b-Volatiles.html#C_002b_002b-Volatiles
gccではvolatileオブジェクトの参照の扱いと参照でないvolatileオブジェクトの扱いは等価ではないという話
960デフォルトの名無しさん:2012/08/23(木) 12:22:58.70
std::setに関する質問なんですけど
http://ideone.com/VXwQs
↑これの16,17行目と同じことを高速にやる方法は用意されてますか?

std::set は内部実装が平衡二分木のはずなので O(log n) 時間でできるはずですけど
上の実装だと O((e-b) × log n) 時間になってます
961デフォルトの名無しさん:2012/08/23(木) 13:53:15.55
>>960
読んでないけどさ、eとかbとかってnの関数なの?
でなきゃ(e-b)が定数になって結局O(log n)時間ってことになるが
962デフォルトの名無しさん:2012/08/23(木) 14:00:30.31
>>960
まず基本を誤解してない?
要素一つの追加に掛かる時間が O(log n) でもx個の複数の要素を追加するなら掛かる時間はおおよそ O(x * log n) になる

それはさておき
標準C++の規格ではsetのイテレータ範囲[i,j)からの構築のときに掛かる時間は
 ・一般的に O(N * log N)。(Nはi,j間の距離)
 ・ただし[i,j)がソート済み範囲なら O(N)
と規定されている

もしソート済み範囲なのに線形時間で処理されないというなら
 set<int> newset;
 for (set<int>::iterator i = b; i != e; ++i) newset.insert(newset.end(), *i);
963デフォルトの名無しさん:2012/08/23(木) 15:28:03.96
>>962
やりたいことをきちんと文で書かなかったのがいけないのですが、
「setのある区間 [b, e) を切り取って新しい set を作る」
が、やりたいことです。

これは x = e-b を区間長とすると O( log n + log x ) でできますが(木の再バランスの時間)、
上の実装だと O( x ) かかっているので、O( log n + log x ) でやる方法が欲しい、ということでした。
#O(x log n) と思っていましたが、この点は誤解でした。指摘ありがとうございます。
964デフォルトの名無しさん:2012/08/23(木) 16:04:27.57
x個の要素のコピーがlog xで可能とは思えんが・・・
965デフォルトの名無しさん:2012/08/23(木) 18:55:06.89
>>963
規格ではsetの内部実装を(直接には)規定していないので木構造で実装されてる保証はない。
だから木構造を前提の話をされても(規格に合致した形での)望む答えはでてこないぞ。
966デフォルトの名無しさん:2012/08/23(木) 19:14:13.45
木構造が保証されていたとしても
新規に構築してる時点でO( log n + log x )は有り得ない

copyでなくmoveしてeraceしたり、範囲フィルタのラッパーを被せるのでも無い限り
967デフォルトの名無しさん:2012/08/23(木) 19:50:19.40
>>964 >>966
>>963で「切り取り」と言っているのが、その点のつもりです
ニ分探索木ならば、親へのリンクを切って再バランスで可能です
再バランスが全体で O(log n) で済むことは、証明を要します

>>965
なので、元々の>>960での質問が「やる方法は用意されてますか?」でした
二分探索木から一部分を切り取る操作は頻繁に現れる操作だと思っているので
STLの範囲でそういった操作が用意されていれば、と思ったのですが・・・
968デフォルトの名無しさん:2012/08/23(木) 20:10:23.05
binary_search_tree コンテナはないか?って質問に近いな

boostには一応 rbtree コンテナがあって
範囲の削除(erase)が O(log n)で動く
削除された要素のデストラクタを呼ばないから可能な計算量だな

切り取りに該当するのは見当たらんかったが
こんだけアクセサがありゃ自分で書いても数行で済む
969デフォルトの名無しさん:2012/08/23(木) 22:55:39.26
赤黒木は作った事あるけど意外と面倒臭い
970デフォルトの名無しさん:2012/08/23(木) 23:50:12.24
面倒臭いが口癖のキチガイには何もできない
失せろやks
971デフォルトの名無しさん:2012/08/23(木) 23:58:22.62
赤黒木はノードに1ビット付け加えるだけで2-3-4木を実現出来るというデータ構造の
簡素さが利点だな

ま、R・セジウィックの本でも読んでみれ
972デフォルトの名無しさん:2012/08/24(金) 00:24:41.64
次のコードで実験しました。

class X {
public:
  virtual void f() {}
};

int main()
{
  X x;
  X* p = &x;

  x.f(); // (1)
  p->f(); // (2)
  (&x)->f(); // (3)

  return 0;
}

コンパイラが生成したアセンブリコードを調べてみると、
(2)は仮想関数テーブル経由の間接的な関数呼び出しになり、
(1),(3)は直接の関数呼び出しになってました。

(3)は(2)と同様にポインタ経由の呼び出しだから仮想関数テーブルが
利用されるはずだと予想していたのですが、実験結果は違いました。
(2)と(3)で生成されるコードが異なるというのは腑に落ちません。

これって言語仕様的に正しいですか?
どのコンパイラでもそうなるんでしょうか?
973デフォルトの名無しさん:2012/08/24(金) 00:30:54.72
グラフのお勉強してるがこんがらがるなぁ
効率よくてカスタム頂点カスタム辺に差し替えもしやすいように書くとなると結構難しい
974デフォルトの名無しさん:2012/08/24(金) 00:40:33.85
面倒なことはCPUやコンパイラにやらせるといい
975デフォルトの名無しさん:2012/08/24(金) 00:47:54.70
だからちゃんと作ったって言ってんだろw
976デフォルトの名無しさん:2012/08/24(金) 00:52:45.59
>>972
仕様的に問題ないしどの環境でもそうなるとは限らないが
君のレベルではまだそんなことは気にしなくてよろしい
977972:2012/08/24(金) 01:02:46.69
そっか。(&x)->f()の場合、どっちのコードを生成しても動作は
同じだから効率的になるように直接呼出しのコードを生成してくれる
ということですね。きっと。
978デフォルトの名無しさん:2012/08/24(金) 01:10:18.41
>>977
そういう意味では (2) を直接呼出しで済ませる実装も存在しうる。
でもそこが大きな違いになることは少ないので、やっぱり気にしなくてよろしい。
979972:2012/08/24(金) 01:19:45.03
コードを書く上では別に困らないけど。。。
980デフォルトの名無しさん:2012/08/24(金) 01:51:58.01
ifstreamで
テキストファイルの"="を区切り文字として値を読み込みたいのですが、質問させてください。

例えばテキストファイルを一行目から順に読み込んでいって
Parameter=50
ってあったら、Parameterっていうint型変数が予め用意されてるので50という値を入れたいのですが
ifstream::getlineという関数で'='を区切り文字として指定した場合
"Parameter"だけ読み込んでくれそうなのはわかるのですが
二度目のgetlineで=50を読み込むのか、50と読みこんでくれるのか、二行目に飛ぶのか
誰か教えてください。
981デフォルトの名無しさん:2012/08/24(金) 03:13:28.89
http://toro.2ch.net/test/read.cgi/tech/1341052801/691
こっちは解決したのかね
982デフォルトの名無しさん:2012/08/24(金) 08:03:44.73
INIParserでも書いているのか?
983デフォルトの名無しさん:2012/08/24(金) 08:24:52.30
>>980
GetPrivateProfileInt使えよ
984デフォルトの名無しさん:2012/08/24(金) 11:16:14.88
赤黒木
リナクサー臭がするな
985デフォルトの名無しさん:2012/08/24(金) 12:02:29.82
>>980
一度にまとめてやろうとしてよくわからなくなったなら素直に複数の処理に分割しなさい
1 一行分文字列を読み込む
2 読み込んだ文字列の中で=を探す
986デフォルトの名無しさん:2012/08/24(金) 12:21:24.18
>>985
ありがとうございました
987デフォルトの名無しさん:2012/08/24(金) 13:43:24.35
まずはトークン分割だろ常識的に考えて
988デフォルトの名無しさん:2012/08/24(金) 15:42:46.92
正規表現だとこんな感じか
/^(.*?)=(.*?)$/
989デフォルトの名無しさん:2012/08/24(金) 15:53:49.80
おっぱいにみえた
990デフォルトの名無しさん:2012/08/24(金) 16:46:54.11
構文解析器生成器系を使うほど大げさなものではないから
手作業で再帰下降構文解析器を書くべきだな。
ちなみに字句解析器はトークンが一文字だから使う必要ない。
991デフォルトの名無しさん:2012/08/24(金) 22:54:18.35
>>989
おっぱいも或意味性器だな
992デフォルトの名無しさん:2012/08/25(土) 00:38:17.34
次スレ建てるよ
993デフォルトの名無しさん:2012/08/25(土) 00:59:47.47
994デフォルトの名無しさん:2012/08/25(土) 01:22:35.42
>>993
995デフォルトの名無しさん:2012/08/25(土) 07:32:52.81
>>986
えっ
>980は
istream& std::getline ( istream& is, string& str, char delim ); か、
istream& std::istream::getline ( istream& is, string& str, char delim );
(第三引数に注意)の仕様を問うひつもんじゃなかったのか…
996995:2012/08/25(土) 07:37:47.67
スマン、>980で問われているのは
 std::istream& std::istream::getline(char* s, streamsize n, char delim );
(第三引数に注意)じゃないのか、に訂正
997デフォルトの名無しさん:2012/08/25(土) 10:05:10.08
>>993
おつうめ
998 忍法帖【Lv=40,xxxPT】 :2012/08/25(土) 10:35:55.08
>>992
スレ立て確認した。超乙

C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
999 忍法帖【Lv=40,xxxPT】 :2012/08/25(土) 10:36:33.30
梅ちゃん先生

C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
1000 忍法帖【Lv=40,xxxPT】 :2012/08/25(土) 10:37:06.24
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。