C++相談室 part96

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

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

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
2デフォルトの名無しさん:2012/06/30(土) 13:08:20.71
■基本■
[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/06/30(土) 13:08:52.69
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
4デフォルトの名無しさん:2012/06/30(土) 13:09:34.44
5デフォルトの名無しさん:2012/06/30(土) 13:10:09.27
6デフォルトの名無しさん:2012/06/30(土) 13:14:54.79
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル'
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
7デフォルトの名無しさん:2012/06/30(土) 13:34:52.46
>>1++
8デフォルトの名無しさん:2012/06/30(土) 13:40:29.80
>>1++
9デフォルトの名無しさん:2012/06/30(土) 13:52:22.49
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
10デフォルトの名無しさん:2012/06/30(土) 15:47:13.84
>#include <stdafx.h>
大丈夫か…
11デフォルトの名無しさん:2012/06/30(土) 17:16:12.80
>>10
12デフォルトの名無しさん:2012/06/30(土) 19:14:04.69
C++11とか覚えるのしんどいから3行にまとめてほしい(´・ω・`)
13デフォルトの名無しさん:2012/06/30(土) 20:07:11.89
A a(1);
a = A(2);

としたとき、2行目で、1行目で生成されたインスタンスは消滅すると思いますが、
デストラクタは実行されないようです。
実行されるにはどうしたらいいでしょうか?
14デフォルトの名無しさん:2012/06/30(土) 20:09:05.92
代入だからインスタンスaのデストラクタは実行されないよ。
二行目の「A(2)」は、ステートメントの最後でデストラクタが実行されるけど。
15デフォルトの名無しさん:2012/06/30(土) 20:11:56.59
オペレーター=のオーバーロード
16デフォルトの名無しさん:2012/06/30(土) 20:13:06.32
>>12
新しい文法とライブラリ。autoの変更がかなり面白い。
ラムダで広がる関数周り。関数ポインタにもできなく無いらしい。
コンパイラさんの対応にあと5年はかかるかも。
17デフォルトの名無しさん:2012/06/30(土) 20:14:01.69
>>13
2行目で生成されたテンポラリオブジェクト A(2) は消滅するけど
1行目で生成されたインスタンス a はそのままだよ
18デフォルトの名無しさん:2012/06/30(土) 20:14:36.33
>>16
関数ポインタにできるのは引数なしのやつだけかな
19デフォルトの名無しさん:2012/06/30(土) 20:23:57.91
引数じゃなくて変数キャプチャの有無だろ
2013:2012/06/30(土) 20:25:10.61
a = A(2);によって、aの中身はA(2)になっているので、
aが消滅するときのデストラクタはA(2)のものです。
だから、Aの中で動的に領域をとっていると、
解放されないままになってしまいます。
newを使わないインスタンス作成をできなくしたり、
代入を禁止したりはできないでしょうか?
Aにoperator=を作るのが正当な解決策でしょうか?
21デフォルトの名無しさん:2012/06/30(土) 20:28:19.89
>a = A(2);によって、aの中身はA(2)になっているので、
間違い。aの中身はA(2)のコピー。

C#かJavaから来た人かな?
22デフォルトの名無しさん:2012/06/30(土) 20:31:47.85
ttp://codepad.org/vhpVaBWA
デストラクタ呼ばないとかどこの糞コンパイラ使ってんだ
23デフォルトの名無しさん:2012/06/30(土) 20:33:42.75
>>20
コピーと代入を禁止するにはprivateで宣言しておけばいい
何も宣言しないとデフォルトの定義が作られるから代入出来てしまう

private:
  A(const A&);
  A& operator=(const A&);
2413:2012/06/30(土) 20:33:52.52
Clang++です。
2513:2012/06/30(土) 20:41:30.84
24は偽物です。Javaから来ました。
C++は難しいですが、いろいろ試してみます。
ありがとうございました。
2613:2012/06/30(土) 20:55:32.15
>>22 さん、ありがとうございます。
~A1 が表示されてほしいんですが、
代入ではデストラクタが実行されないようなので、
無理ですね。
27デフォルトの名無しさん:2012/06/30(土) 21:09:47.64
ttp://ideone.com/GVtgh
これなら表示される
この例じゃあまり意味はないが
28デフォルトの名無しさん:2012/06/30(土) 21:37:36.80
そもそもどうやってどちらのデストラクタが実行されたかを確認してるかからして怪しい
29デフォルトの名無しさん:2012/06/30(土) 21:44:15.24
>>25
お前にC++は無理。
30デフォルトの名無しさん:2012/06/30(土) 22:26:53.13
むしろ代入の取り扱いに関してはJavaやC#の方が難しいと思うんだけどね。
C++はCやBASIC、FORTRANなどと同じ、コピーが基本。
負荷は大きいけど、考えることは少ない。
一方、Javaは参照が基本。負荷は小さいけど、いつ複製が必要になるかについて注意が必要。

…みたいなことが、確かJ++セルフマスターブックとかいう本を読んだ時書いてあったなぁ。
J++って、いつの本だよ^q^
31デフォルトの名無しさん:2012/06/30(土) 23:51:13.72
C++でもポインタ持ってる場合は微妙だが、
そういう時はコピーを禁止する事も可能ではあるね
32デフォルトの名無しさん:2012/07/01(日) 01:52:45.30
>13
デストラクタは「中身」の値ではなく、「入れ物」である変数が破棄されるタイミングで呼ばれる。
a = A(2); は入れ物ではなく、中身が変わっているだけだからデストラクタは呼ばれない。

理解を深めてもらうために付け加えると、 new 、delete とも「入れ物」を作ったり消しているだけで
「中身」そのものは弄ってませんよね。(中身も一緒に消えますが)

>20の問題を解決したいのであれば、「中身」が変わるタイミングで破棄する必要がある。
具体的に言うと>15で上がっている operator= と、コピーコンストラクタををオーバーロードするのが正解。
33デフォルトの名無しさん:2012/07/01(日) 17:57:54.71
代入したときに自動的にコンストラクタが呼ばれるように
するにはどうしたらいいでしょうか

クラスHogeにはメンバ int kazu と string moji がいて
Hoge a = 1; のときは new Hoge(1) が
Hoge a = "unko"; のときは new Hoge("unko");
が呼ばれるような感じがいいんだけど
34デフォルトの名無しさん:2012/07/01(日) 18:07:21.06
つ[変換コンストラクタ]
35デフォルトの名無しさん:2012/07/01(日) 18:11:59.11
36デフォルトの名無しさん:2012/07/01(日) 19:25:04.37
>>35
ありがとう
なんとなくわかりました
37デフォルトの名無しさん:2012/07/01(日) 19:25:49.03
cout << a << endl;
ってやるとき、 a は何にキャストされようとしているの?
38デフォルトの名無しさん:2012/07/01(日) 19:32:50.14
>>37
cout自体がoperator <<(int Value)とかのオーバーロードを持ってるから、オーバーロード検索でマッチする型を使う。
39デフォルトの名無しさん:2012/07/01(日) 19:59:28.71
STLにバリアント型ってあるってマジ?
40デフォルトの名無しさん:2012/07/01(日) 20:18:13.94
>>39
まだないんじゃね?
BoostにあるAnyっていうライブラリがそれだと思う。
41デフォルトの名無しさん:2012/07/01(日) 20:43:59.20
あるよ
42デフォルトの名無しさん:2012/07/01(日) 21:13:40.61
>>41
え、あるの?どれどれ??
43デフォルトの名無しさん:2012/07/01(日) 21:14:04.22
ないあるよ
44デフォルトの名無しさん:2012/07/01(日) 21:14:40.30
class A
{
public:
 template<int i> int get() const { return i; }
 template<> int get<0>() const { return 1; }
};

みたいなことをやりたいのですが、メンバ関数テンプレートで定数による特殊化はできないのでしょうか?
45デフォルトの名無しさん:2012/07/01(日) 21:24:34.48
Template ClassだったらDmyのTemplateパラ入れてむりやり突っ込めるけど
C++11より前だと関数の部分特殊化は無理だからねぇ
46デフォルトの名無しさん:2012/07/01(日) 21:28:38.11
>>44
http://ideone.com/CZqo9
「テンプレート メンバ関数 特殊化」でググッたら方法出てきたよ
宣言ごとクラス外に書けってさ
47デフォルトの名無しさん:2012/07/01(日) 22:20:23.95
>>46
ありがとう、できました
48デフォルトの名無しさん:2012/07/01(日) 23:41:33.73
アルファベット禁止な
49デフォルトの名無しさん:2012/07/02(月) 00:51:07.05
下げれないじゃないか。
50デフォルトの名無しさん:2012/07/02(月) 01:23:56.40
class A{
template<int I,int D=0>struct getobj{operator int()const{return I;}};
template<int D>struct getobj<0,D>{operator int()const{return 1;}};
template<int I>const getobj<I>get(){return getobj<I>();} };
だな。
51デフォルトの名無しさん:2012/07/02(月) 08:47:31.52
>>50
変換関数を使う手もあるな
型が曖昧だと無視されたりするから素直じゃない所があるけど
52デフォルトの名無しさん:2012/07/02(月) 10:41:39.05
>>38
もう少し正確に頼むわ
53デフォルトの名無しさん:2012/07/02(月) 11:14:45.67
54デフォルトの名無しさん:2012/07/02(月) 12:53:50.79
typedefは別の名前を与えるそうです。
例) typedef void v;
これでvと書けばvoidの意味になります。
それではこれはどうでしょう?
typedef void (*SIG_TYPE) (int);
何に対してどういう名前を与えたのですか?
55デフォルトの名無しさん:2012/07/02(月) 12:55:27.63
intを引き数に取る戻り値のない関数へのポインタであるSIG_TYPE型の宣言。
56デフォルトの名無しさん:2012/07/02(月) 13:00:59.57
>>55
ありがごうございます。
じゃぁ voidに(*SIG_TYPE)(int)という名前を付ける事は出来ないんですね。
そもそも名前に()が入っちゃダメだからそういう心配は要らなさそうですね。
57デフォルトの名無しさん:2012/07/02(月) 13:33:16.90
>>56
形としては、変数宣言と同じだと思っていいよ。
58デフォルトの名無しさん:2012/07/02(月) 13:38:21.69
>>57
ですよね。ありがとうございます。
なんかトークンを置き換えるみたいなイメージがありました…。
59デフォルトの名無しさん:2012/07/02(月) 15:23:11.85
それはマクロで。
60デフォルトの名無しさん:2012/07/02(月) 22:35:54.13
インターフェースクラスって、コンストラクタどうすんの?
書かなくてもいいの?
書いてもすること無いけどさ
61デフォルトの名無しさん:2012/07/02(月) 22:45:13.42
いらないだろ
62デフォルトの名無しさん:2012/07/03(火) 00:45:13.09
書いたところで、どうせ他に純粋仮想関数があるだろうからインスタンスは作れない
63デフォルトの名無しさん:2012/07/03(火) 00:58:20.89
HogeAやHogeBはクラスHogeのサブクラスです。
ストリームを読んで、Aって文字列が来たらクラスHogeAの
Bって文字列が来たらクラスHogeBのオブジェクトをnewして
配列hogelistにどんどん追加していく処理をするとき、
64デフォルトの名無しさん:2012/07/03(火) 01:01:11.31
(続き)
鼻から悪魔を出すにはどうしたら良いでしょうか
6563:2012/07/03(火) 01:05:46.85
(続き)
普通はファクトリークラスHogeFactoryとかを作ると思うんですが、
ユーザがHogeの派生がどんどん増やしたときにHogeFactoryを
直接いじらせず、継承させて生産ラインを追加させたいときは
どうしたらかっこういいでしょうか
66デフォルトの名無しさん:2012/07/03(火) 06:56:16.96
std::map<std::string, ExampleFactory*> factorys;

factorys[ "A" ] = new Factory<ExampleA>();
factorys[ "B" ] = new Factory<ExampleB>();

if( factorys.end() != factorys.find( key ) )
{
  Example *examle = factorys[ key ]->New();
}
67デフォルトの名無しさん:2012/07/03(火) 10:24:25.53
>>66
あー、なるほど
これいいかもですね
ありがとうございます
68デフォルトの名無しさん:2012/07/03(火) 13:06:11.88
AndroidNDKでSJISの文書をUTF8に変換する処理を書いているのですが、
環境が違うせいでNDKで動く処理が作れません。
ICU、iconvはコンパイルがうまくいかない。
babelは変換処理が正しく動かない。
マルチバイト確認や変換する関数はNDKでは使えないという感じで、
文字コードをうまく変換するいい手段は無いでしょうか?
69デフォルトの名無しさん:2012/07/03(火) 13:33:09.94
>>68
Android OS&アプリは個人情報ダダ漏れ★9
http://anago.2ch.net/test/read.cgi/smartphone/1335343114/
70デフォルトの名無しさん:2012/07/03(火) 13:37:35.69
>>68
ICU使えって書いてあるらしいからコンパイル頑張れ
https://groups.google.com/forum/#!msg/android-group-japan/kEutty0IWjA/8T4YhZXFqawJ
71デフォルトの名無しさん:2012/07/03(火) 21:05:05.67
vector<Unko> unkolist;
を削除するとき、全要素についてdeleteしたいとき
どうしたらいいの?
72デフォルトの名無しさん:2012/07/03(火) 21:11:15.93
unkolist.clear();
73デフォルトの名無しさん:2012/07/03(火) 21:17:55.34
>>72
clear() を呼ぶと、ついでにUnkoのデストラクタも呼ばれるの?
74デフォルトの名無しさん:2012/07/03(火) 21:19:19.79
当たり前だろ
75デフォルトの名無しさん:2012/07/03(火) 21:32:33.31
下品なネーミングはやめてください。
76デフォルトの名無しさん:2012/07/03(火) 21:37:04.61
>>74
ありがとう
77デフォルトの名無しさん:2012/07/03(火) 23:07:26.09
そしてポインターを格納してメモリーリーク
78デフォルトの名無しさん:2012/07/03(火) 23:08:43.28
>>71
コテを付け忘れてるぞuy
79デフォルトの名無しさん:2012/07/03(火) 23:49:58.74
unkolist.swap(vector<Unko>());
80デフォルトの名無しさん:2012/07/04(水) 00:40:24.15
std::vector<manko> mankoList
81デフォルトの名無しさん:2012/07/04(水) 11:26:16.00
Javaから来たものです。

将棋のAIを作っていたのですが、速度の壁に阻まれ、いろいろアルゴリズムを変えて3割ほど速度アップに成功しましたが、目標タイムには到達しえませんでした。
限界を感じてC++はどうかと考えたのですが、Java→C++で速度アップは図れるものでしょうか。
主な処理は配列の個々の値計算、オブジェクトの生成・消滅がわりと頻繁にでてくるプログラムです。
82デフォルトの名無しさん:2012/07/04(水) 11:41:22.74
早くなるよー。配列の演算はあんまり大差ないだろうけど、消費メモリが劇的に減るからその点は有利か。
オブジェクトの生成・破棄は爆発的に早くなる。

…そのかわり、全部自分でコントロールしなくちゃいけないけどねー。
83デフォルトの名無しさん:2012/07/04(水) 11:43:56.36
速度アップは図れるけど
一番クリティカルなのは言語よりアルゴリズム
84デフォルトの名無しさん:2012/07/04(水) 11:49:30.00
>>83
そのアルゴリズム内でガーベージコレクタを動かす部分があって、
更にC++の素朴なスコープ或いは参照カウンタ方式でメモリ管理を置き換えできれば確かに速くなるから
半分正解で半分間違い。
まぁ具体的な実装を見てみないとなんとも言えませんな。
85デフォルトの名無しさん:2012/07/04(水) 12:08:50.84
>>82-84
C++でチャレンジしようと思えるようになりました、ありがとうございます!
86デフォルトの名無しさん:2012/07/04(水) 12:35:29.33
チャレンジする前に、具体的な実装を詳しい人に見せて本当にGCがネックになっているかどうかを教えてもらったほうが良い。
webだと気軽に匿名でソース公開する訳にもいかんだろうし。
87デフォルトの名無しさん:2012/07/04(水) 12:49:24.04
full gc頻発でも無い限り今のgcがボトルネックにはならんだろ
-serverオプション含めJIT周りの方が影響でかい
88デフォルトの名無しさん:2012/07/04(水) 13:45:56.35
C#からC++に移行したBlunderの人は2倍〜3倍出そうといってた
http://d.hatena.ne.jp/ak11/20120417
89デフォルトの名無しさん:2012/07/04(水) 21:14:51.55
初心者ながらの質問ですいません

ベクトルにnewしたインスタンスを入れたいんですが入れたものを削除するプログラムっていうのはvectorにインスタンス自体じゃなくてポインタを入れればいいんでしょうか
90デフォルトの名無しさん:2012/07/04(水) 21:27:55.72
日本語かコードで書いてくれ
91デフォルトの名無しさん:2012/07/04(水) 21:36:20.03
もしかして: std::shared_ptr
92デフォルトの名無しさん:2012/07/04(水) 21:49:06.03
boost::ptr_vectorか
VC++10でstd::vector<std::unique_ptr>を使うと幸せになれる
93デフォルトの名無しさん:2012/07/04(水) 22:15:03.97
ありがとうございます
糸口をつかめました 感謝します
94デフォルトの名無しさん:2012/07/04(水) 22:27:54.64
std::shared_ptr ってg++でも使えんの? 4.4系なんだけど
95デフォルトの名無しさん:2012/07/04(水) 22:35:30.47
処理系依存の話は処理系依存スレへ。
96デフォルトの名無しさん:2012/07/04(水) 22:37:16.37
あー・・・ ごめんなさい
97デフォルトの名無しさん:2012/07/04(水) 23:27:59.41
規格の話が処理系依存になったでござるの巻
98デフォルトの名無しさん:2012/07/05(木) 00:40:24.34
g++は規格だそうです
99デフォルトの名無しさん:2012/07/05(木) 00:57:41.14
std::shared_ptrは規格で
規格準拠率の話をしてただけじゃん?
100デフォルトの名無しさん:2012/07/05(木) 08:13:54.88
規格準拠率は処理系に依るじゃん?
101デフォルトの名無しさん:2012/07/05(木) 10:48:47.52
コンパイラの名前が出ただけで処理系依存かよ
わからんなら黙ってろ
102デフォルトの名無しさん:2012/07/05(木) 11:35:57.04
お前が黙ってろ
103デフォルトの名無しさん:2012/07/05(木) 11:38:36.32
はい!
104デフォルトの名無しさん:2012/07/05(木) 11:43:34.77
>>100
処理系依存は言語仕様の話なので、その"処理系に依る"話とは関係無いと思う。
105デフォルトの名無しさん:2012/07/05(木) 12:53:57.39
処理系に固有の話はその処理系のスレへ。
g++ 4.4でstd::shared_ptrが使えるかどうかの記述は、C++の規格にありません。
でも、これぐらいいいじゃない馬鹿!
106デフォルトの名無しさん:2012/07/05(木) 15:33:51.21
コンパイラまではOKだろ。
107デフォルトの名無しさん:2012/07/05(木) 15:52:03.75
そもそも処理系依存という言葉遣いからおかしい
implementation-defined なら well-formed だろうが
108デフォルトの名無しさん:2012/07/05(木) 16:48:13.18
ふひひ
109デフォルトの名無しさん:2012/07/05(木) 18:44:08.04
Aを継承してB、Bを継承してC を作ったとき

Aに virtual な関数を作って、Cでその関数を定義するとき
Bにも空でもいいから関数を書かないとだめなの?
110デフォルトの名無しさん:2012/07/05(木) 18:46:01.69
やってみりゃわかるだろ
それとも規格票の箇条でそう読めてしまうところでもあったのか?
111デフォルトの名無しさん:2012/07/05(木) 18:54:45.33
>>110
やってみたらなんか書かないとダメだったんだけど、
そんなわけないよなーと思って聞いてみた

やっぱ飛ばして継承出来るハズだよね
おれのバグとわかってスッキリしたわ直す
112デフォルトの名無しさん:2012/07/05(木) 19:03:03.59
Google C++スタイルガイド 日本語訳
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
113デフォルトの名無しさん:2012/07/05(木) 20:00:00.37
純粋仮想関数なら何か書かないとBのインスタンスは作れない
また継承するのならいいが
114デフォルトの名無しさん:2012/07/05(木) 20:06:16.70
継承したとき、自動的に規定クラスの同じメソッドも
呼ばれるようにしたいときは どうすればいいのかね
呼ばせるのを義務付ける方法とかでもいいや
115デフォルトの名無しさん:2012/07/05(木) 20:18:53.55
基底側から継承側を呼べばいいのです。
class B{
private: virtual void foo_impl( ) = 0;
public: void foo(){ /*code*/ foo_impl( ); /*code*/ }
};
class D{
private: void foo_impl() /*override*/ { /* code_here */ }
};
116デフォルトの名無しさん:2012/07/05(木) 20:22:58.56
>>115
ごめんよくわかんね
117デフォルトの名無しさん:2012/07/05(木) 20:34:10.84
わかれ
118デフォルトの名無しさん:2012/07/05(木) 20:36:39.63
わかめ
119デフォルトの名無しさん:2012/07/05(木) 20:44:46.76
継承先ではfooの代わりにfoo_implをオーバーライドしろてこと?
呼ぶときはfoo()でいいの?
どんどん継承したときはどうなるんだこれ
120デフォルトの名無しさん:2012/07/05(木) 20:46:42.90
こんな感じ??
http://ideone.com/B1tY7

作った後見たらカオス・・・。Orz
121デフォルトの名無しさん:2012/07/05(木) 20:53:08.18
あいわなケイオス!
122デフォルトの名無しさん:2012/07/05(木) 21:00:38.03
(」・ω・)」う〜!(/・ω・)/にゃー!
123デフォルトの名無しさん:2012/07/05(木) 21:27:17.23
ある構造体のアライメントまで考慮したサイズの取得をするにはどうすればよいですか?
具体的にはwindowsのOPENFILENAME構造体のサイズを64bit環境下でも正しく取得したいです
124デフォルトの名無しさん:2012/07/05(木) 21:33:35.49
>>123
アラインメントというのは、構造体の先頭の場所のことなのか、要素の整列のことなのか・・・。
addressOfっていうマクロが世の中にはあるんだけどそれを使えば、要素のアライン状況はわかるよ。

addressOf(LastElement)+sizeof(LastElement);
でわかるかも??
125デフォルトの名無しさん:2012/07/05(木) 21:35:56.15
何かsizeofを使用しない宗教的理由があるのでしょうか?
126デフォルトの名無しさん:2012/07/05(木) 21:36:54.01
>>125
sizeofですむんだったらソッチのほうがいいよな。
127デフォルトの名無しさん:2012/07/05(木) 21:37:10.53
今の場合要素の整列です
addressOf(LastElement) - addressOf(FirstElement) + sizeof(LastElement)ですかね?
128デフォルトの名無しさん:2012/07/05(木) 21:38:00.19
>>125
sizeofだと各要素のサイズの単なる合計が返ってきているように思えますが
なにかアライメントまで考慮させる方法ってありますかね?
129デフォルトの名無しさん:2012/07/05(木) 21:47:51.34
標準入力を全部string hoge に入れたいんだけど
どうしたら簡単?
130デフォルトの名無しさん:2012/07/05(木) 21:48:28.52
>>127

黒魔術なんで、環境によっては動かないかもしれないが、こんなかんじだ。
ttp://ideone.com/TY3kv
131デフォルトの名無しさん:2012/07/05(木) 21:50:12.60
>>129
std::getline
132デフォルトの名無しさん:2012/07/05(木) 22:00:04.85
getlineでデリミタを指定しなければ改行無視できるのか
やってみる
133デフォルトの名無しさん:2012/07/05(木) 22:01:06.60
>>130
こんな方法があるんですね、そして大変なことがわかりました
構造体の要素は別にアライメントされていませんでした・・・orz
OPENFILENAMEには自身のサイズを格納させる場所があるんですが、
じゃあいったい何を格納すれば動いてくれるんですか・・・またお世話になるかもしれません
ありがとうございました
134デフォルトの名無しさん:2012/07/05(木) 22:04:59.30
>>133
それ、多分sizeofでいいと思うよ。
135デフォルトの名無しさん:2012/07/05(木) 22:05:11.69
OPENFILENAME ofn = { sizeof(OPENFILENAME) };
でなんの問題もないだろ
136デフォルトの名無しさん:2012/07/05(木) 22:10:52.90
>>135
コンパイルエラーになった
137デフォルトの名無しさん:2012/07/05(木) 22:13:04.90
いえ、sizeofではダメなんです
状況は64bit win7で、vc2008のプロジェクト設定で構造体のアライメントを1,2,4,8,16と変えていくと
8,16のみ正常に動作し、ファイルを選択するダイアログが開くのですが
1,2,4の場合ファイルを選択するダイアログが開かず、キャンセルボタンが押されたような返り値が返ってきます
サイズを調べてみたところ違っていたのでアライメントまで考慮しなければならないのかと思った次第でした
138デフォルトの名無しさん:2012/07/05(木) 22:15:17.67
通常利用でそこまで考慮する必要ってあるかなー。
139デフォルトの名無しさん:2012/07/05(木) 22:16:45.28
もしかして、commdlg.h(かwindows.h)取り込まずに自分でOPENFILENAME構造体定義してる?
140デフォルトの名無しさん:2012/07/05(木) 22:18:50.61
いえ、windows.hをインクルードしています
ググってみると似たような状況が出てきましてやはりアライメントの問題だの
言われていますがほとんどが英語で要領を得ず、です
141デフォルトの名無しさん:2012/07/05(木) 22:20:33.17
>>137
そりゃそうだろGetOpenFileNameが期待してる構造体のサイズ以外のサイズを渡してるんだから
commdlg.hからOPENFILENAME構造体を適当にぱくってきて
#pragma packで一時的にアライメントを変更してやればいい
142デフォルトの名無しさん:2012/07/05(木) 22:28:38.08
混ざった
143デフォルトの名無しさん:2012/07/05(木) 22:46:45.10
The length, in bytes, of the structure. Use sizeof (OPENFILENAME) for this parameter.
と書いてあるんだからsizeofでやれ
アライメント変更によって型定義を壊してるのに見当違いのことを喚くな
144デフォルトの名無しさん:2012/07/05(木) 22:52:33.83
1つの関数が肥大化するとバグの温床になる。
だから最小単位の関数に分割する。
それはいいんだが、今度は関数が増えすぎてその管理が煩雑になりそう。
その対策としてクラスを作り private 静的メンバ関数にするというのは妥当?

例えば、

namespace MyFunctions {
  template <class T> T func1(T x) { ちゅっちゅー } // 隠したい。
  template <class T> T func2(T x) { ちゅっちゅー } // 隠したい。
  template <class T> T func(T x) { func1(func2(x)) ちゅっちゅー } // 使ってほしい。
}

というのを

class MyFunctions {
  template <class T> static T func1(T x) { ちゅっちゅー } // 隠したい。
  template <class T> static T func2(T x) { ちゅっちゅー } // 隠したい。
public:
  template <class T> static T func(T x) { func1(func2(x)) ちゅっちゅー } // 使ってほしい。
};

とするという対策しか思いつかなかったんだが。
みんなはどうしてる?
145デフォルトの名無しさん:2012/07/05(木) 22:59:13.32
クラス作れよ
146デフォルトの名無しさん:2012/07/05(木) 22:59:29.15
>>141
64ビット下では8ビット以上のアライメントが当然期待されているってことですかね・・・
とりあえずその案を試させて頂きます

>>143
>アライメント変更によって型定義を壊している
すいません、ここ詳しくお願いできますか?
ポインタなどのサイズがアライメントで変更されうるということでしょうか?
147デフォルトの名無しさん:2012/07/05(木) 22:59:42.31
無名とかdetailとかdummyとかtsukaunaとかの名前空間をMyFunctionsの下に作って突っ込む
148デフォルトの名無しさん:2012/07/05(木) 23:06:50.23
>>145>>147
ありがとうございます。
149デフォルトの名無しさん:2012/07/05(木) 23:12:07.08
>146
windows.h とかで構造体が定義されている場合、普通 #pragma pack とかでアラインメントは強制されている。
つまり、「vc2008のプロジェクト設定で構造体のアライメントを1,2,4,8,16と変えて」 sizeof の結果が変わること自体がおかしい。
150デフォルトの名無しさん:2012/07/05(木) 23:25:32.69
ヘッダ見るとわかるけどいままで1強制だったのがx64では強制されなくなってるんだよ
だからアライメント変更でこういう問題が起きる
151デフォルトの名無しさん:2012/07/05(木) 23:34:55.69
ソース内で使うだけならただ単にstaticにすれば隠れる。つまりソース単位の関数になる。
外部に公開するんだったら頑張って管理する。

>>144
そういうのモノステートパターンっていうんじゃないの?
152デフォルトの名無しさん:2012/07/05(木) 23:35:28.03
>>149-150
あーものすごく納得しました

重ね重ねありがとうございました、勉強になりました
153151:2012/07/05(木) 23:36:02.71
ありゃ、安価おかしい。

>>151 -> >>144
154144:2012/07/05(木) 23:46:09.55
>>151>>153
ありがとうございます。

とりあえず無名名前空間かモノステートパターンでいこうと思います。
155デフォルトの名無しさん:2012/07/06(金) 00:11:59.43
>>151
ものステートでぐぐったら一番最初に出てくるページがホラ吹いてるけど
あれはモノステートじゃない。モノステートは、static変数メンバーを
主体としたクラス。メンバー関数がすべてstaticってのは間違い。

http://c2.com/cgi/wiki?MonostatePattern
156デフォルトの名無しさん:2012/07/06(金) 00:22:42.54
>>149
そもそも処理系依存なpackなんて使うなっつう話だろ

入出力は面倒でもメンバー1個1個指定するか、
配列で一括読み込してキャストしながら読み書きする。
読み書きでメンバーを同じ数並べるのが面倒というなら、
テンプレート使って読み書きを一つにしてやればいい。

arc.Archiving( this->member1 );
arc.Archiving( this->member2, 100 );
// 読み込みの際はarcを読み込みオブジェクトに
// 書き込みの際はarcを書き込みオブジェクトにしてやる
157デフォルトの名無しさん:2012/07/06(金) 00:32:21.06
お前は何をいっておるのだ
158デフォルトの名無しさん:2012/07/06(金) 08:03:15.14
template <class Type>
Type minof(const Type *x, int n){
Type min = x[0];
for(int i=1;i<n;i++)
if(min > x[i])
min = x[i];
return min;
}

template <>
const char* minof<const char*>(const char** x,int n){
const char* min = x[0];
for(int i=1;i<n;i++)
if(strcmp(min,x[i])>0)
min = x[i];
return min;
}

int main(int argc, char** argv){
char const *s[3]={"ABC","AAA","ADD"};
cout << "sで小さいのは" << minof<const char*>(s,3) << endl;
}

配列の全要素の最小値を求める関数テンプレートの作成なのですが、もっとも小さい文字列を求めるための特殊化がうまくいきません
エラー: template-id ‘minof<const char*>’ for ‘const char* minof(const char**, int)’ does not match any template declaration
とエラーが出て、特殊化部分が標準テンプレートとマッチせずおそらくポインタへのポインタの扱いだと思うのですが
どう直せばプログラムが動くでしょうか?
159158:2012/07/06(金) 08:32:09.81
すいません、自己解決の形になってしまいましたが

const char* = int,etc
とするために、
template <class Type> Type minof(type *x, int n)
とするか、

配列の中身を書き換えたくないという意を保つなら
template <>
const char* minof<const char*>(const char* const (*x),int n)
でやると通りました・・・
constの扱いで頭おかしくなりそうです、これで本当に合っているのか
int x[]=const char (*x)[]
int x[0]の書き込み禁止=const char (*x)[0]の書き込み禁止

const int *x = const char* const (*x)でしょうかね
160デフォルトの名無しさん:2012/07/06(金) 09:17:32.54
>>159
3じゃなく、sizeof()を使った方が良くない?
161デフォルトの名無しさん:2012/07/06(金) 10:19:42.52
>>160
関数呼び出し部は確かにそうしたほうが良いですね
忠告ありがとうございます
162デフォルトの名無しさん:2012/07/06(金) 11:03:16.31
>>158,159
素直にmin_element使え

#include <cstring>
#include <algorithm>
#include <iostream>

bool less_str(char const * p1, char const * p2)
{
return std::strcmp(p1, p2) < 0;
}

int main(int argc, char** argv){
using namespace std;
char const *s[3]={"ABC","AAA","ADD"};
cout << "sで小さいのは" << *min_element(&s[0], &s[3], less_str) << endl;
}
163デフォルトの名無しさん:2012/07/06(金) 21:36:06.85
こんばんは。 私は19歳の女子大生です。

クラスAと、それを継承したB があります。
A *a = new B;
としたときに、 *aに格納されているのが AなのかBなのかを
gdbで確認したいのですが、どうしたら型情報を見れるでしょうか。
ptype(*a) としても、出力されるのは A の構造になってしまいます。
164デフォルトの名無しさん:2012/07/06(金) 21:41:27.57
女子高生なら手取り足取り教えるのに
165デフォルトの名無しさん:2012/07/06(金) 22:02:47.50
女子高生ですが質問です。

class A{
private:
B b;

public:
A(B b){ this->b = b;}
}

コンストラクタであるオブジェクトのコピーをフィールドに入れたいのですがこれであっていますか。
ちなみに参照ではなくコピーをいれたいのです。


166デフォルトの名無しさん:2012/07/06(金) 22:04:16.47
あってます
167デフォルトの名無しさん:2012/07/06(金) 22:04:23.82
すいませんフィールドじゃなくメンバ変数です。
Javaの癖でついフィールドと書いてしまいました
168デフォルトの名無しさん:2012/07/06(金) 22:05:18.25
>>166
ありがとうございます!
169デフォルトの名無しさん:2012/07/06(金) 22:26:32.76
4年ほど前なら女子大生といえばVB6.0だったんだが、
実際のとこ今はどうなんかね。後輩がWeb系行ってStrutsなんて
ダイッキライ!っていってたけど、相変わらずOOとは縁遠い言語ならっとんのかなぁ。
170デフォルトの名無しさん:2012/07/06(金) 22:38:55.65
普通の女子大生がプログラムなんか勉強する訳がない!

ラノベのタイトルみたいだな
171デフォルトの名無しさん:2012/07/06(金) 22:53:45.35
女はウンコしない的発想だな
172デフォルトの名無しさん:2012/07/06(金) 23:04:19.93
工学部だが9割男子だっぺよ
173デフォルトの名無しさん:2012/07/06(金) 23:16:07.12
女子だって半田付けするもん
174デフォルトの名無しさん:2012/07/06(金) 23:17:20.88
工学部にくる女子は男好きだっぺよ
175デフォルトの名無しさん:2012/07/06(金) 23:30:48.56
クラス型の関数を作成したとき、関数内で生成したオブジェクトをそのまま返して大丈夫でしょうか。
調べたところ、オブジェクトのコピーが返されて関数にあったオブジェクトは破棄されるらしいのですが、パフォーマンス的にもっと優れた方法はないでしょうか
176デフォルトの名無しさん:2012/07/06(金) 23:32:46.30
#include <iostream>
#include <typeinfo>

class A {
int a;
public:
A(int i) : a(i) {}
virtual void print() const {
std::cout << a << std::endl;
std::cout << typeid(*this).name() << std::endl;
}
};

class B : public A {
int a;
public:
B(int i) : a(i), A(0) {}
void print() const {
std::cout << a << std::endl;
std::cout << typeid(*this).name() << std::endl;
}
};

int main()
{
A* a = new B(100);

a->print();
}
177デフォルトの名無しさん:2012/07/06(金) 23:33:57.10
>>175
Factoryとかで生成したオブジェクトのポインタならいいっぺよ
ただしスマポに包んでおかないとdeleteする責任の所在があやふやになるっぺ
178デフォルトの名無しさん:2012/07/06(金) 23:50:04.91
>>177
なるほど、そのようにするとパフォーマンスに優れますね。
ありがとうございます!
179デフォルトの名無しさん:2012/07/07(土) 03:14:31.30
>>176
gdbでお願いします
180デフォルトの名無しさん:2012/07/07(土) 09:22:21.44
gdbってtypeinfoに対応してたっけ?
181デフォルトの名無しさん:2012/07/07(土) 09:54:21.87
>>180
してる
182デフォルトの名無しさん:2012/07/07(土) 09:55:14.04
え、してたっけ?昔使って期待通りの結果が得られなかったから使い物にならなかった記憶が。
183デフォルトの名無しさん:2012/07/07(土) 11:35:45.92
gdbがよく分からないので>>176をEclipse CDTでデバッガに掛けてみた

変数ウィンドゥではBのインスタンスを代入しても型がA*のままだな
右クリックから「型にキャスト」でB*にしたらちゃんと全ての要素が表示された
で、「オリジナル型の復元」でA*に戻る

a->print()で仮想関数が実行されてB::print()の中に入ると変数ウィンドゥ
の型が const B* constに変わりちゃんとBの要素が表示される

これ多分gdbの実行結果と同じだよね
だからポインタの先の実際の型までは表示してなくて、thisに変わった時に
初めて表示されるようだ
184デフォルトの名無しさん:2012/07/07(土) 11:50:18.47
大学でプログラミングやってる女なんて
大概商業高校出身だろ
185デフォルトの名無しさん:2012/07/07(土) 14:10:01.92
時代は農学部だからな
186デフォルトの名無しさん:2012/07/07(土) 14:31:29.19
のうりん!
187デフォルトの名無しさん:2012/07/07(土) 15:29:25.24
もやしもん!
188デフォルトの名無しさん:2012/07/07(土) 15:33:34.45
>>163
Aが仮想関数を持っているなら
(gdb) set print object on
して
(gdb) whatis a

(gdb) ptype a
でわかる
189デフォルトの名無しさん:2012/07/07(土) 15:50:09.84
リテラル文字列の文字コードはソースコードを保存したときの文字コードですか?

// hoge.cpp (UTF-8Nで保存)
int main(void) {
puts("日本語の文字列"); // <-これはUTF-8N?
return 0;
}
190デフォルトの名無しさん:2012/07/07(土) 15:53:32.73
>>189
いいえ
191デフォルトの名無しさん:2012/07/07(土) 15:53:37.73
void main()
って、今でもダメですか?
192デフォルトの名無しさん:2012/07/07(土) 17:00:35.90
implementation-definedという意味ではあり
193デフォルトの名無しさん:2012/07/07(土) 17:02:53.24
>>189
処理系依存
194デフォルトの名無しさん:2012/07/07(土) 17:04:25.37
>>191
そのプログラムが終了コードに何を返すか分かるか?
195デフォルトの名無しさん:2012/07/07(土) 17:35:26.86
>>194
なにも返しません
196デフォルトの名無しさん:2012/07/07(土) 17:37:38.36
>>194
どうしてそういう持ってまわった言い方をするの?
直接的な表現が宗教的な理由でできないの?
197デフォルトの名無しさん:2012/07/07(土) 17:42:28.43
>>196
で?
198デフォルトの名無しさん:2012/07/07(土) 18:14:34.15
>>195
答:よく分からない値を返す
199デフォルトの名無しさん:2012/07/07(土) 18:36:38.33
不定な値を返すだけで、なんの問題ないじゃん
200デフォルトの名無しさん:2012/07/07(土) 18:44:29.09
シェルやmake内で使い辛い
201デフォルトの名無しさん:2012/07/07(土) 18:54:53.92
ERRORLEVELが不定とか気持ち悪い
202デフォルトの名無しさん:2012/07/07(土) 19:08:41.22
エラーレベルとかダサい仕様だよな
203デフォルトの名無しさん:2012/07/07(土) 19:16:09.22
同意求められましても
204デフォルトの名無しさん:2012/07/07(土) 19:16:40.82
ダサいのは make 内で使うアプリとは限らないものにまで
make の流儀を強制しているいかにもアチラな尊大さだ
205デフォルトの名無しさん:2012/07/07(土) 19:21:58.81
1が真で0が偽だから
1が正常終了というのが自然
206デフォルトの名無しさん:2012/07/07(土) 19:28:15.40
真偽はちゃんと審議しないとなっ!
207デフォルトの名無しさん:2012/07/07(土) 19:28:55.44
>>206
wwwwwwwwwwwwww
お前才能あるwww
208デフォルトの名無しさん:2012/07/07(土) 19:29:32.47
>>206
腹筋崩壊wwwww
209デフォルトの名無しさん:2012/07/07(土) 19:30:02.85
>>206
ちょww牛乳ふいたじゃねーかwww
210デフォルトの名無しさん:2012/07/07(土) 19:35:24.71
真偽中
211デフォルトの名無しさん:2012/07/07(土) 20:04:22.45
久々に酷い自演をみた
212デフォルトの名無しさん:2012/07/07(土) 20:21:35.75
零か!零かじゃ…?
213デフォルトの名無しさん:2012/07/08(日) 01:51:53.47
foreach( list as l ) l->hoge();

みたいに簡潔に書きたい
214デフォルトの名無しさん:2012/07/08(日) 03:15:35.45
>>213
C++11にご期待ください。
215デフォルトの名無しさん:2012/07/08(日) 03:18:45.24
__foreach(l, list, l->hoge);
216デフォルトの名無しさん:2012/07/08(日) 04:06:33.17
for (auto& l : list) l->hoge();
217デフォルトの名無しさん:2012/07/08(日) 08:45:48.09
しかしこうみるとJavaってほんと簡潔にかけるよなあ
生産性あがるのも納得だわ
218デフォルトの名無しさん:2012/07/08(日) 10:09:18.58
new/deleteないだけで
219デフォルトの名無しさん:2012/07/08(日) 11:12:15.56
>>217
途中からC#の尻を追い掛けるようになっちゃってるけどね
220デフォルトの名無しさん:2012/07/08(日) 11:22:02.81
>>218
テンプレートも無いよ
221 ◆QZaw55cn4c :2012/07/08(日) 11:31:41.78
>>220
テンプレート様にはおよびもしないがジェネリックがある
222デフォルトの名無しさん:2012/07/08(日) 12:00:32.03
ポインタがないのにぬるぽガール
223デフォルトの名無しさん:2012/07/08(日) 12:19:26.42
ポインタをうまく隠蔽してるだけだから
中身はポインタだらけだよ
GCを実装しているので特別な仕組みになってるけど
224デフォルトの名無しさん:2012/07/08(日) 13:12:23.76
C++て難しいですか?
225デフォルトの名無しさん:2012/07/08(日) 13:13:41.88
最も難しい
226デフォルトの名無しさん:2012/07/08(日) 13:14:16.44
Haskellの方が難しいよ
227デフォルトの名無しさん:2012/07/08(日) 14:33:30.60
俺は型の概念で挫折した
今もHSPしかやってない

このスレはひやかしに来るだけ
228デフォルトの名無しさん:2012/07/08(日) 15:58:44.36
C++の非テンプレートなクラスをCで使えるようにラップしてっていわれたんですけどCでクラスなんて使えるんですか?
229デフォルトの名無しさん:2012/07/08(日) 16:13:33.33
C++で
function(C++クラスのインスタンスへのポインタ, functionの引数)
みたいなラッパー関数書きまくって頑張りなさい
230デフォルトの名無しさん:2012/07/08(日) 16:18:53.66
で、そのクラスはstdcall APIをwrapしたユーティリティクラスと
231228:2012/07/08(日) 16:19:34.46
すいません自己解決しました
232デフォルトの名無しさん:2012/07/08(日) 17:04:04.11
C++なんでこんなにかわいいの
233デフォルトの名無しさん:2012/07/08(日) 17:36:49.05
俺の嫁だからに決まってんだろ
234デフォルトの名無しさん:2012/07/08(日) 20:06:40.02
>>223
ハンドルをポインター言い始めたら関接参照全部がポインターになるだろうが。
235デフォルトの名無しさん:2012/07/08(日) 21:33:05.97
ポインターよりチワワ
236デフォルトの名無しさん:2012/07/09(月) 10:19:30.01
>>234
全部ポインタでいいんじゃないの?
237デフォルトの名無しさん:2012/07/09(月) 10:38:00.79
>>234
参照もポインタだと思ってる
238デフォルトの名無しさん:2012/07/09(月) 11:10:10.38
参照ってポインタの名前変えてるだけだと思ってた
239デフォルトの名無しさん:2012/07/09(月) 11:12:30.39
小粒でもピリリと辛いと思ってた
240デフォルトの名無しさん:2012/07/09(月) 11:12:45.90
参照の実現の仕方は規格で規定されてないけど大抵ポインタと同じ
でも保証はないよ
241デフォルトの名無しさん:2012/07/09(月) 12:45:28.80
参照は小粒でもぴりりと辛い
242デフォルトの名無しさん:2012/07/09(月) 12:47:47.44
>>241>>239
やっと理解できたwwww
243デフォルトの名無しさん:2012/07/09(月) 13:03:59.98
>>242
よっ!低脳クン!
244デフォルトの名無しさん:2012/07/09(月) 13:16:08.95
new が全くないプログラム作った場合メモリ管理は気にしなくても大丈夫ですか?
245デフォルトの名無しさん:2012/07/09(月) 13:22:02.24
>>244
ゴミカスのお前が作る規模のゴミカスプログラムならそんなことは考えなくていい
246デフォルトの名無しさん:2012/07/09(月) 13:25:46.19
>>245
コテ外してレスすんな
247デフォルトの名無しさん:2012/07/09(月) 13:28:47.95
>>246
ゴミカスは黙ってろ
248デフォルトの名無しさん:2012/07/09(月) 13:43:04.39
>>244
newと同じ類のもの、mallocとかVirtualAlloc(windows)とかも使ってなければね。
でもopenしたファイルなどの「解放が必要なもの」はメモリと同じく注意する必要があるし
例外の絡みもあるので、基本的にC++ではRAIIという概念で管理する。

メモリもリソースも全部RAIIで扱えば楽だよ。
要はコンストラクタでopen(new)してデストラクタでclose(delete)する。
249デフォルトの名無しさん:2012/07/09(月) 13:53:47.47
>>248
RAII初めて知りました
ありがとうございます!
250デフォルトの名無しさん:2012/07/09(月) 14:00:51.75
ファイルをRAIIしたら最悪首くくる羽目になるよ
251デフォルトの名無しさん:2012/07/09(月) 14:02:55.73
お前だけ
252デフォルトの名無しさん:2012/07/09(月) 14:04:39.30
Ruby on RAll
253デフォルトの名無しさん:2012/07/09(月) 14:40:51.60
るびーおんらいるる
254デフォルトの名無しさん:2012/07/09(月) 14:52:57.51
ファイルをRAIIして首くくる奴はRAIIしなくても同じことになる
255デフォルトの名無しさん:2012/07/09(月) 15:13:26.60
RAIIは理想であるが現実的には解放処理にエラー処理が含まれるリソースだらけだからRAIIは無力
256デフォルトの名無しさん:2012/07/09(月) 15:15:20.00
お前がRAIIを分かってないだけ
257デフォルトの名無しさん:2012/07/09(月) 15:19:13.65
>>256
いやお前がわかってないよ
258デフォルトの名無しさん:2012/07/09(月) 15:23:42.08
>>257
いやお前がわかってないよ
259デフォルトの名無しさん:2012/07/09(月) 15:25:05.69
>>258
やれやれだね
260デフォルトの名無しさん:2012/07/09(月) 15:28:49.99
解放処理にエラー処理が含まれる→RAIIは無力
こんな思考じゃ首くくる羽目になるのも当然だな
261デフォルトの名無しさん:2012/07/09(月) 15:30:03.53
無力だろ
違うと言うならRAIIで完璧なコード書いてみろや
262デフォルトの名無しさん:2012/07/09(月) 15:41:07.54
完璧なコードを書かせるなら無力になるコードを提示すべきかと
それぞれどんなコードを見せてくれるのか興味津々
263デフォルトの名無しさん:2012/07/09(月) 15:44:32.30
std::ofstream file("test");
file << "test";
完璧だろ
264デフォルトの名無しさん:2012/07/09(月) 15:47:59.58
ファイル書き込みが以外のエラーなんてlog取るか無視して全部握りつぶしでいいからRAIIで十分
265デフォルトの名無しさん:2012/07/09(月) 15:58:32.16
解放時のエラーメッセージでも出したいなら
デストラクタ前にclose呼べばいいだけだしな
RAIIに、デストラクタでしか解放してはいけないなんて制限は無いし
266デフォルトの名無しさん:2012/07/09(月) 16:02:07.97
文脈に沿ったエラー処理書いたデリータをもたせればRAIIで完璧だろ
267デフォルトの名無しさん:2012/07/09(月) 16:06:49.86
そうそう幾らでもやり方あるのにね
268デフォルトの名無しさん:2012/07/09(月) 16:23:45.41
今までRAIIで困ったことは無いけど
>>255の言うRAIIが無力になるコードを見てみたいな
普通に興味がある
269デフォルトの名無しさん:2012/07/09(月) 21:08:09.83
>>265
close()じゃなくてflush()してbad()だろ。
close()で失敗した場合は、close()の後に失敗したエラーを検知できん。
270デフォルトの名無しさん:2012/07/09(月) 21:14:59.59
>>236
ポインター以外の関接参照は、アドレスを指してない場合が多い。
参照できるだけで見れば似てるが、委細が大きく違うんで
参照全部を引っ括めて呼ぶんなら間接参照と呼ぶべきだ。

間接参照 ⊇ { ポインター, ハンドル, ディスクリプター, リンク, 他・・・ }
271デフォルトの名無しさん:2012/07/09(月) 23:34:50.14
cache = (char*)malloc(cSize);
while(true){
size = nextReadSize(); // 何Byteファイルから読み込むか計算する
if(cSize > size){
free(cache);
cache = (char*)malloc(size);
}
if(breakCheck()) break; // ファイル読み込みが出来ない場合ループ終了
fread(cache, 1, size, fp);
}
free(cache);
プログラムの中にこんなソース仕込んだら、プログラムがエラー無しでストップするようなエラーが出るようになったんだけど、
これってやっぱりダメなのかな?
それともこれとは全く別の所にミスがあってプログラム止まってるのかな?
272271:2012/07/09(月) 23:36:11.99
すまん。2回目のmalloc後にcSize = size;を入れてくれ
273デフォルトの名無しさん:2012/07/09(月) 23:58:44.12
ステップ実行とかさ、ログ吐くとかさ、なんかしようよ
274デフォルトの名無しさん:2012/07/10(火) 00:00:10.82
ステップ実行てなんですか?
275デフォルトの名無しさん:2012/07/10(火) 00:10:36.78
VC++でデバックモードならブレークポイントでとめたあとF10を押すと1行ずつ実行できる
276デフォルトの名無しさん:2012/07/10(火) 00:13:08.40
>>271
お前のようなゴミカスには無理
277デフォルトの名無しさん:2012/07/10(火) 00:54:04.11
>プログラムがエラー無しでストップするようなエラーが出る
なんだこれ。
278デフォルトの名無しさん:2012/07/10(火) 00:56:55.40
>>271
それ、どう考えてもcSize < sizeじゃないのか?
sizeがcSizeを上回ると確実に破綻するぞ。
279デフォルトの名無しさん:2012/07/10(火) 00:57:33.27
>>277
スタックオーバーフローとかでよく見るけど、メモリースマッシュかも知れないし、0割かも知れない。
280デフォルトの名無しさん:2012/07/10(火) 00:59:30.00
エラーなしでエラーが出るってのが意味わかんね。
281デフォルトの名無しさん:2012/07/10(火) 01:00:33.27
エラーがないのがエラー、それがゴールデンエラーレクイエム
282デフォルトの名無しさん:2012/07/10(火) 01:05:48.86
なんだその鎮魂歌。

要は、メッセージを伴わないエラーと言いたいのかそうでないのかはっきりしろと。
283デフォルトの名無しさん:2012/07/10(火) 01:16:31.61
SIGたんだろ
284デフォルトの名無しさん:2012/07/10(火) 04:30:52.33
挽歌
285デフォルトの名無しさん:2012/07/10(火) 05:51:27.27
宿題スレの方で書きましたがスレチな気がしたのでこちらで聞かせてください。
スレチでしたら誘導頂けると幸いです。

O表記法についてなのですが、イマイチ理解できていません。
授業にて以下7つのルールを定義されたのですが
各々について具体的な数字の入った例をいただけませんでしょうか
#数学の勉強が足りないのかもしれませんが、具体的な数字があれば理解できると認識しています。
#宿題ではないのですが、以降のテストで以下ルールを適用しながらアルゴリズムの証明を行う問題が出題される予定です。

1). if f(n) ∈ O(g(n)) and g(n) ∈ O(h(n)) then f(n) ∈ O(h(n))
2). if f(n) ∈ O(h(n)) and g(n) ∈ O(h(n)) then f(n) + g(n) ∈ O(h(n))
3). an^k ∈ O(n^k)
4). n^k ∈ O(n^k+j) for any j
5). if f(n) = cg(n) then f(n) ∈ O(g(n))
6). loga n ∈ O(logb n) O(logn)
7). loge n ∈ O(loge n)

お手数ですがよろしくお願いします。
286デフォルトの名無しさん:2012/07/10(火) 08:24:18.86
>>285
どうみても言語スレ向けのネタじゃないだろ。
アルゴリズムスレ辺りじゃねぇの。
287デフォルトの名無しさん:2012/07/10(火) 09:29:06.69
>>269
iostreamに限定してねぇよ
リソース一般の話だ
288デフォルトの名無しさん:2012/07/10(火) 10:10:35.41
>>269
「close()の後に失敗したエラー」って何?
289デフォルトの名無しさん:2012/07/10(火) 10:17:27.76
>>191-192
処理系依存でいろいろ認められるのは戻り値以外の部分。戻り値の型は int じゃないとダメ。

3.6.1 Main function p2
It shall have a return type of type int, but otherwise its type is implementation-defined.
290デフォルトの名無しさん:2012/07/10(火) 10:30:05.52
エラー処理まで含めた安全なファイル書き込みのサンプル下さい
291デフォルトの名無しさん:2012/07/10(火) 10:47:12.82
>>290
try
{
  std::ofstream file(name);
  file.exceptions(std::ios::badbit | std::ios::failbit);
  file << x;
  file.close();
}
catch (...)
{
  ...;
}

"..." のところは好きにしろ。

ライブラリ実装が例外を通して提供する情報が要求に対して
不足するようなら個別に try するなり各操作の戻り値見るなりしろ。
292デフォルトの名無しさん:2012/07/10(火) 11:13:53.15
書き込むデータをメモリに蓄えて
書き込み先のファイルをバックアップして
書き込み成功するまで書き込みを繰り返す
失敗したらユーザーに指示を仰ぐ
といった方法で書いてるんだが巨大なデータを生成しながら書き込む場合にメモリに乗り切らなくて困る
どうしたらいい?
293デフォルトの名無しさん:2012/07/10(火) 11:20:15.31
>>292 ユーザーに指示を仰ぐといいよ
294デフォルトの名無しさん:2012/07/10(火) 11:23:25.36
>>292
メモリに蓄えずに書き込めばいいんじゃね
変更が必要ならファイル使うとか
295デフォルトの名無しさん:2012/07/10(火) 11:26:49.15
>>292
最初から別名ファイルに書き出していって、最後にリネームすればいいよ。
296デフォルトの名無しさん:2012/07/10(火) 12:09:00.34
>>292
何か矛盾してないか
もしそのOSが仮想記憶を使ってるとしたら、スワップファイルもまともに動作しないのか
スワップファイルを安心して置けるドライブに書き込むデータを書いておいて
トランザクション処理しろよ
297デフォルトの名無しさん:2012/07/10(火) 12:11:01.39
すいません自己解決しました
分割して書き込んでマージすることにしました
298デフォルトの名無しさん:2012/07/10(火) 12:35:35.72
C++スレに書き込む事じゃないな
初心者スレにでも書け
299デフォルトの名無しさん:2012/07/10(火) 12:43:29.89
^∈^
300デフォルトの名無しさん:2012/07/10(火) 17:53:36.60
class templateClassInt;

templateClassInt* p;

template<class T >
class A {
typedef T Type;
};

typedef A<int> templateClassInt;

これ出来ないの?ぐぬぬ
301デフォルトの名無しさん:2012/07/10(火) 18:02:26.50
こういうのはダメ?

template<class T > class A;

typedef A<int> templateClassInt;

templateClassInt* p;

template<class T >
class A {
typedef T Type;
};
302デフォルトの名無しさん:2012/07/10(火) 18:50:06.95
>>301
こんなことしたい

//a.h
//長いの書くのヤダ、ポインタだから宣言だけでオッケだよね
class VectorInt;
VectorInt* p;
//a.h end

//classInt.h
#include<vector>
extern template class std::vector< int >;
//本当はboost::nklklljkjdljlallkとかで長いし、名前がわかりづらいのでここでtypedefしときたい
typedef std::vector<int> VectorInt;
//classInt.h end

//a.cpp
//#include"a.h"
//#include"classInt.h"
template class VectorInt;//実体化
int main(){
p = new VectorInt();
return 0;
}
//a.cpp end
303デフォルトの名無しさん:2012/07/10(火) 19:01:17.22
めちゃくちゃじゃないか
304デフォルトの名無しさん:2012/07/10(火) 19:09:17.76
まったくです。わけわからん
もう素直にインクルードするわ
extern templateとか見つけて使ったがよくわからんwww

//a.h
#include"classInt.h"
VectorInt* p;
//a.h end


そういえばここのヘッダーファイルごとにstd::vector<int>とかやったらコンパイルするの1回だけだよね
いやぐぐります
ありがとうございました



305デフォルトの名無しさん:2012/07/10(火) 21:13:22.92
>>288
OSバッファでの書き出し失敗。
fcloseやiostreamのcloseはOSバッファまでは感知しないんで、
fclose後に非同期にOSバッファが書き出されるような状況で、
ディスクリプタを閉じてしまうと手も足も出せなくなる。
306デフォルトの名無しさん:2012/07/10(火) 23:38:50.54
enum{TEMA,
AFKA,
SIZE};

int* Select[SIZE]={&TemaNum,&AfkaNum};

ステップ終了後なぜかTemaNumやAfkaNumに83291とか19とか入るんですけどなんでですか?
enum定義前は両方0で初期化されてました。
307デフォルトの名無しさん:2012/07/10(火) 23:46:57.33
デバッガの使い方を理解してない可能性大
308デフォルトの名無しさん:2012/07/10(火) 23:47:35.70
>>306
全部晴れ
309デフォルトの名無しさん:2012/07/11(水) 00:20:55.41
>>305
>269の「flush()してbad()」なら「OSバッファでの書き出し失敗」が
検知できるってこと?

Cの規格 7.21.5.1, 7.21.5.2 を読む限りfflush()の動作にfclose()では
得られない追加の保証があるようには読めないんだけど、
310デフォルトの名無しさん:2012/07/11(水) 01:00:00.30
>>307
ブレークポイントを前後に挟んで変数の内容を検証したんですが・・・
311デフォルトの名無しさん:2012/07/11(水) 01:02:49.00
Releaseモードでやってるんだろ
312デフォルトの名無しさん:2012/07/11(水) 03:05:03.28
>>286
亀レスごめんなさい

了解です
アルゴリズムスレ行ってみます

ありがとうございます
313デフォルトの名無しさん:2012/07/11(水) 19:54:31.47
>>309
仕様云々じゃなく現実の問題。
fflushを2回実行したりすると1回目で取れなかった
OS側のエラーが出てくる実装が多い(実装者が意図してるかは知らん)。
closeだけだと1回で終わりだからそこまで検知できない。
314デフォルトの名無しさん:2012/07/11(水) 22:37:55.75
>>313
へー。そんな話聞いたことないな。改めて適当に検索しても
見当たらない。

とりあえず GNU libc の実装だとバッファに何も無いときの
fflush()は何もしなさそう。

fflush()の繰り返しで OS からエラーを拾ってきてくれる実装を
どれかひとつ教えてもらえないかね?
315デフォルトの名無しさん:2012/07/11(水) 22:54:41.34
検索すんじゃなくて自分でやってみたら?
SDカードに限界までデータ書き込むとか
仮想マシン上で容量のすっくないディスク作って書き込んで見たり。
Windowsのランタイムライブラリーとかそうだからやってみ。
gccもVC用のランタイムライブラリー使ってるだけだから
コンパイラーは何使っても構わん。
316デフォルトの名無しさん:2012/07/11(水) 23:20:32.99
static union{
unsigned short int AX;
unsigned char Hreg[2];
};

/*この位置だとエラー*/
//unsigned char& AL = Hreg[0];
//unsigned char& AH = Hreg[1];

int main(){
/*この位置なら正常にコンパイル*/
unsigned char& AL = Hreg[0];
unsigned char& AH = Hreg[1];

AX=0xabcd;
cout << hex;
cout << "AX=" << AX << " AH=" << (int)AH << " AL=" << (int)AL << '\n';

AH=0x12;
cout << "AX=" << AX << " AH=" << (int)AH << " AL=" << (int)AL << '\n';
ーーーーーーーーーーーーーーーーーーーーーーー
グローバル領域で参照の変数を定義すると undefined reference to `Hreg'となってエラーになります
どこに問題があるのでしょうか?
317デフォルトの名無しさん:2012/07/11(水) 23:25:04.24
>>315
なんだ。またVC++が標準を逸脱してる(してた?)ってだけの話か。
http://support.microsoft.com/kb/66052

「〜実装が多い」といってるけど、他にそんな挙動をする実装あるの?
318デフォルトの名無しさん:2012/07/11(水) 23:39:03.80
標準を逸脱してんじゃなくて、実装依存の範疇。
標準の要件を超えてなきゃ標準無視とは言わん。
319デフォルトの名無しさん:2012/07/11(水) 23:47:09.01
そっか。ライブラリ内のバッファぶんは掃きだすみたいだから、これで問題ないのか。
320デフォルトの名無しさん:2012/07/11(水) 23:50:53.93
void hoge()
{
 const int a[] = {0,1,2,3,4};
 static const int b[] = {0,1,2,3,4};
}

aとbって何が違うんですか
321デフォルトの名無しさん:2012/07/11(水) 23:58:14.25
>>316
別に問題なさそう。
http://codepad.org/lerTWOih
322デフォルトの名無しさん:2012/07/12(木) 00:00:51.32
>>320
記憶域が違う。前者は自動変数。後者は静的変数。

自動変数だと関数呼出しごとに割り当てと初期化が行われるんで、
配列がとても大きいと時間がかかったり、再帰すると毎回違うアドレスが
得られたりする。

その例のままならたいして違わない。
323デフォルトの名無しさん:2012/07/12(木) 00:03:19.23
>>317
OracleやらSunのUNIX向けコンパイラー、BorlandのKylix。
ジャーナリングを確実にしたいためだろうが真意はしらん。
324デフォルトの名無しさん:2012/07/12(木) 00:05:23.22
>>320
後者は、戻り値で返すことができる。
前者は、戻り値で返すと異常を起こすので普通コンパイルエラーになる。
325デフォルトの名無しさん:2012/07/12(木) 00:18:49.76
>>321
gnu c++コンパイラでは通らないですね

以下グローバル領域中で
>int a; int& ref=a;
>static a; int& ref=a;
は通るけど
static union{int a;};
int& ref = a;
は通らないのは共用体特有のなんちゃらかと考えましたが、
グローバル中の無名共用体の宣言でstaticをつける理由を考えると
参照が外部結合しては困るということなのか
static union{int a;};
static int& ref =a;
で通りました
326デフォルトの名無しさん:2012/07/12(木) 00:24:23.48
>static union{int a;};
その名前なしの共用体に使い道があるのけ
327デフォルトの名無しさん:2012/07/12(木) 00:35:40.01
>>326
それそのものは
もともとの使い道のサンプルから、問題となっている箇所を探すためのテストにすぎないですよ?
328デフォルトの名無しさん:2012/07/12(木) 00:37:12.36
>>325
codepad は g++ 4.1.2 なわけだが。
エラーが出るバージョンは?
329デフォルトの名無しさん:2012/07/12(木) 00:38:12.77
>>324
コンパイルエラーにはならんだろ。
330デフォルトの名無しさん:2012/07/12(木) 00:42:45.44
>>328
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3ですね・・・
コンパイル通らないのは自分の環境が特殊なんですかね
331デフォルトの名無しさん:2012/07/12(木) 00:45:19.93
javaのプログラムをC++に移植したらとんでもなくJavaの方が速いです
332デフォルトの名無しさん:2012/07/12(木) 01:10:43.03
>>330
どうせ実際に問題が起こってるコードと>>316のコードが違ってるんだろ。
333デフォルトの名無しさん:2012/07/12(木) 01:17:29.61
>>332
そこまでしてくれとは言えないですが、よかったら実際にコンパイルしてみてください
codepadではエラーを吐かないコードをマルコピして実際にコンパイルしたら問題のエラーが出ます
マニピュレータがstd::付けないと実際のコンパイラで通らないはずですが
codepad上では通ったりしてるので実際のg++の制約を遵守しているようには思えないんですけどね
334デフォルトの名無しさん:2012/07/12(木) 01:17:58.93
やりたいことはわかるが
共用体の使い方が下手すぎるのがなんとも 316
335デフォルトの名無しさん:2012/07/12(木) 01:24:37.19
>>333
コンパイルしてみろというのならコンパイルできるソースを出せよ。
336デフォルトの名無しさん:2012/07/12(木) 01:29:47.62
>>333
codepadで通ってあんたの環境で通らないソースがあるんなら、
そのコードのcodepadのURL貼ってみればいいんじゃないの。
337デフォルトの名無しさん:2012/07/12(木) 01:45:19.04
やりゃわかるけどideoneではエラーになるよ
338デフォルトの名無しさん:2012/07/12(木) 01:45:20.40
C++には、無名共用体という特殊な共用体があります
ワケワカで使おうとしてハマりまくってます状態?
339デフォルトの名無しさん:2012/07/12(木) 01:51:40.20
ん〜、問題はグローバル域中の無名共用体に対する、グローバル領域でのその無名共用体メンバへの参照変数の宣言なので
>>325でも構わないですし、include から全部そーす書けというなら
>>316の最後に}つけたものをコンパイルしてみてください

・・・
伝わらないのはこっちの言葉が足りないのかなあ
>>321さんが入力してくれたhttp://codepad.org/lerTWOihでは通るようですが
同じコードを実際にコンパイルしてみると自分の環境では通りません
340デフォルトの名無しさん:2012/07/12(木) 01:58:36.18
コンパイル出来る出来ないより、何やりたいのか、教えてよ
341デフォルトの名無しさん:2012/07/12(木) 02:01:05.94
g++ 4.1.3 では通るけど g++ 4.3.4 では通らない、と。
342デフォルトの名無しさん:2012/07/12(木) 02:02:07.82
うむ>>321のソースはmingw-gcc4.7.0でリンカエラーになるな(win32、mingw公式のsourceforgeのバイナリ)
343デフォルトの名無しさん:2012/07/12(木) 02:07:54.81
>>338
いや、>>325を勝手な解釈として自分なりには解決したつもりだったのですが
今はコンパイラに通る通らない論争ですね

>>341-342
わざわざありがとうございました

何がやりたいのかわからないってのはstatic宣言のことですかね?
グローバルでの無名共用体の宣言にはstaticが必要っていうルールがあるんですよ
詳しい理由が探してもなかなかないんですけど

344デフォルトの名無しさん:2012/07/12(木) 02:08:51.52
prog.cpp:13: error: ‘hex’ was not declared in this scope
ideoneではエラーになるよ
エラーが英語だから?
345デフォルトの名無しさん:2012/07/12(木) 02:12:52.32
>>342
あ、そうです!
正確に言うと最初から全部リンカエラーですね
346デフォルトの名無しさん:2012/07/12(木) 02:21:21.48
g++ の regression っぽいねぇ。
たぶんこれで最小コード。

static union { int i; };
int& r = i;
int main() { return r; }

/tmp/ccIAPctI.o::(.rdata+0x0): undefined reference to `_i'
collect2: ld returned 1 exit status

さぁ bugzilla へ go!
http://gcc.gnu.org/bugzilla/buglist.cgi?quicksearch=anonymous+union
347デフォルトの名無しさん:2012/07/12(木) 02:21:47.15
unsigned char& AL = Hreg[0];

へー、こういう書き方すると初期化コードが必要になるんだ
348デフォルトの名無しさん:2012/07/12(木) 02:29:46.51
初期化コードってなぁに?
349デフォルトの名無しさん:2012/07/12(木) 02:31:18.12
汗のソース吐かせて見てみたら
C++流の言い方は知らん
350デフォルトの名無しさん:2012/07/12(木) 02:32:35.51
汚ねえな
351デフォルトの名無しさん:2012/07/12(木) 03:07:56.95
>>331
移植した奴の腕が悪過ぎる。
352デフォルトの名無しさん:2012/07/12(木) 08:45:57.55
フリーで超高速に最適化してくれるコンパイラ教えてください
353デフォルトの名無しさん:2012/07/12(木) 08:51:15.62
gcc, clang, vc++ee
っていうかいまどき最適化してくれないコンパイラのほうがめずらしいわ。
354デフォルトの名無しさん:2012/07/12(木) 09:14:15.64
「超高速に最適化」って最適化を超高速に行うってこと?
それとも超高速に動作するように最適化するってこと?
どっちにしても「超高速」は無理かと
355デフォルトの名無しさん:2012/07/12(木) 12:12:03.92
グローバルに無名unionを書いたら、unionにならなかった気がする。
356デフォルトの名無しさん:2012/07/12(木) 12:36:40.97
横着しないで構造体に包めよ
357デフォルトの名無しさん:2012/07/12(木) 13:05:54.55
      宣言     アドレス    アクセス    ポインタの宣言  ポインタの中身へアクセス

変数   型 x       &x       x        *ptr_x = &x        *ptr_x

クラス クラス名 cls  &cls    cls.(メンバ)   *ptr_cls = &cls    ptr_cls->(メンバ)

配列  型 arr[num]  &arr[0]    arr[index]     ?             ?

初心者です。いろいろサイト見て自分なりにまとめたのですが?がサイトによって説明が違くてよくわかりません。
先輩方教えてください 
                     
358デフォルトの名無しさん:2012/07/12(木) 13:48:35.06
ポインタの宣言

(*ptr)[num]

ポインタのアクセス

ptr[index]

それとクラスのメンバへのポインタはそれで動いたか?
クラスの場合は必ずインスタンスが必要なので

インスタンス.*メンバへのポインタ

のようになる

もしインスタンスへのポインタから参照するなら

インスタンスへのポインタ->*メンバへのポインタ

となる
あと仮想関数が絡んで来るとかなり動作は複雑になる
359デフォルトの名無しさん:2012/07/12(木) 13:53:37.91
「ポインタ変数」を「ポインタ」で説明するサイトは糞サイト
ポインタの説明として「アドレス」を説明するのはいいが
「ポインタ」って表現を「アドレス」って表現しているサイトも糞サイト
360デフォルトの名無しさん:2012/07/12(木) 14:02:55.57
>>357
クラスは型
http://ideone.com/GLT9F
※structとclassの違いはデフォルトが「public:」かどうかだけ

配列として宣言した変数は、ポインタ変数のように扱える。
http://ideone.com/jas3H
※配列は入れ物があるけどポインタは無い

?の部分はルールの組み合わせ
http://ideone.com/YvLz6
361デフォルトの名無しさん:2012/07/12(木) 14:12:16.87
>配列として宣言した変数は、ポインタ変数のように扱える。
「ポインタ変数」は誤解を招く

>※配列は入れ物があるけどポインタは無い
ポインタはある

ポインタ変数とポインタをごちゃ混ぜにするからおかしくなる
362デフォルトの名無しさん:2012/07/12(木) 14:13:01.97
>>358-360
親切にありがとうございます 理解できました!
363デフォルトの名無しさん:2012/07/12(木) 14:14:01.31
あと、クラスですがインスタンスにしないとだめみたいでした
みなさんのおっしゃるとおりでした、そこの部分もありがとうございます
364デフォルトの名無しさん:2012/07/12(木) 14:24:08.07
>>361
より分かりやすく誤解を招かない表現を持ってるなら
俺に言わんでそれを初心者に説明してあげなよ
365デフォルトの名無しさん:2012/07/12(木) 14:39:34.39
配列はポインタ変数のように扱える
間違いじゃん

配列にはポインタは無い
間違いじゃん

「分かりやすく」云々以前に間違ったことを教えるなっつーの
366デフォルトの名無しさん:2012/07/12(木) 14:50:10.89
しかし正解は言わない365であった
367デフォルトの名無しさん:2012/07/12(木) 14:59:55.30
>>365
ならそれを訂正しつつ君が説明すればいいじゃんって話なんだけど伝わってる?
別に厳密な言語仕様の話をしてわけじゃないし
368デフォルトの名無しさん:2012/07/12(木) 15:06:21.54
配列名はポインタ
a[1] は 配列名a に[]演算子を使っているだけ
a[1] は *(a+1) に展開されたのと一緒

だから 1[a] は *(1+a) に展開されたのと一緒

よって以下は全部一緒
a[1]
1[a]
*(a+1)
*(1+a)

配列名はポインタでありポインタ変数ではないため
配列名に代入する a = &b のような記述は出来ない

これで満足か?
369デフォルトの名無しさん:2012/07/12(木) 15:09:04.15
厳密な話でないことは理解している
でも「ポインタ」を「ポインタ変数」として説明するから
初心者が理解出来ずに配列とポインタで挫折するんだよ
このあたりは説明する側が気を付けないと駄目って話
370デフォルトの名無しさん:2012/07/12(木) 15:11:29.50
それを>>361の時点で書けば良かったという話だな
371デフォルトの名無しさん:2012/07/12(木) 15:22:23.81
>>368
変数については分かった

入れ物云々については?
 int a[1];
 *a = 0;
は大丈夫だけど
 int* a;
 *a = 0;
は駄目ということを言いたかったんだけど
>>360の最後のソースの補足として
372デフォルトの名無しさん:2012/07/12(木) 15:37:09.85
自分でメモリ管理をするつもりは無いので
あらかじめOSに「自分はこのくらいメモリを使うつもりなので覚悟してくれ」
というヒントを与える方法があるなら教えてくれ。
boostかSTLにあるAPIで。
373デフォルトの名無しさん:2012/07/12(木) 15:37:42.13
>>371
すまん
言ってる意味が分かった

「配列は入れ物があるけどポインタは無い 」
自分は
「配列は入れ物がある」
「しかし配列にポインタは無い」
と言ったのかと思ってた
374デフォルトの名無しさん:2012/07/12(木) 16:04:04.49
>>372
無いので、先にアローケートして自前でプールするしか無いと思うんだが・・・。
書き方しだいではmallocよりもはやくなるよ。
375デフォルトの名無しさん:2012/07/12(木) 16:12:59.49
組み込み方面的の書き方?
http://ideone.com/md53X
376デフォルトの名無しさん:2012/07/12(木) 17:03:13.02
>>374
ならそういうライブラリでもいい
boostにならあるかな
377デフォルトの名無しさん:2012/07/12(木) 17:26:22.07
>>376
詳しくはしらないが、ここらへんじゃないかなぁ・・・。

ttp://www.kmonos.net/alang/boost/classes/pool.html
ttp://www.boost.org/doc/libs/1_50_0/libs/pool/doc/html/index.html
378デフォルトの名無しさん:2012/07/12(木) 22:26:40.95
>>361
配列って実際はアドレス定数だよな。
スタックポインタによって変わるから厳密な定数じゃないけど。
379デフォルトの名無しさん:2012/07/13(金) 00:12:34.04
>>378 なんでわざわざ違うものを混同しようとするの?
380デフォルトの名無しさん:2012/07/13(金) 05:35:14.97
テンプレート引数や、const値に使えない以外は特性がほぼ同じだから。
更に言えば、グローバルで宣言した配列の場合は、static領域をさした
定数そのものだから。
381デフォルトの名無しさん:2012/07/13(金) 06:09:17.33
>>379
・OOやテンプレートの様に演繹的に理解する事で、新たに理解する知識量を減らせるから
 (他の機能と共通する特性を新たに覚える必要がなく、固有特性だけ考えればいい)
・教えるとき説明しやすいから

定数というか、constなポインターの方がもっと近いじゃなかろうか
sizeofで長さが取れなかったり、勝手にどこかの領域で初期化されるぐらいの違いでしょ
382デフォルトの名無しさん:2012/07/13(金) 07:44:16.82
配列へのポインタや参照を知ってりゃ
>>378みたいな事は言えねえなあ

int(*)[10]
383デフォルトの名無しさん:2012/07/13(金) 13:24:20.67
クラス内で自分自身のコピーを作るにはどうすればいいですか
384デフォルトの名無しさん:2012/07/13(金) 13:32:17.22
コピーコンストラクタ(*this);
385デフォルトの名無しさん:2012/07/13(金) 13:36:28.22
それだと継承してたら死ぬだろ
386デフォルトの名無しさん:2012/07/13(金) 13:48:29.88
>>385
天才
387デフォルトの名無しさん:2012/07/13(金) 13:51:07.20
継承に関係ないものだったら使えるのであれば大丈夫です
ありがとうございました
388デフォルトの名無しさん:2012/07/13(金) 14:29:35.36
あ、継承したクラスにコピーコンストラクタが定義されてるとうまくコピー出来ないのか
実験してみよう
389デフォルトの名無しさん:2012/07/13(金) 15:21:10.89
>>385
http://codepad.org/wgHPR5Vo

どういう場合に問題になるのか分からない
return *this; でコピーコンストラクタが呼び出されていると思うんだけど
390デフォルトの名無しさん:2012/07/13(金) 16:15:57.99
スライシングでググれ
391デフォルトの名無しさん:2012/07/13(金) 16:41:43.52
Effective C++によるとスライシング問題って関数に値渡しする時に起きるんでしょ?

今はわざわざclone()って関数を作って返してるんだし、だいたいコピーコンストラクタは
継承されないからね
392デフォルトの名無しさん:2012/07/13(金) 16:56:13.09
わからないならいいよ
いつか痛い目みてその時に気付くから
393デフォルトの名無しさん:2012/07/13(金) 17:13:45.24
あー本当だスマソ

http://ray.sakura.ne.jp/tips/copy.html

腐ってんな
394デフォルトの名無しさん:2012/07/13(金) 17:21:46.54
これcloneしたオブジェクトをポインタで返す時にスマポで包めんの?
共変にならないので困るなこれ
うっかりdeleteし忘れてメモリリークの原因になる
395デフォルトの名無しさん:2012/07/13(金) 19:49:37.45
スマポで受ければいい
396デフォルトの名無しさん:2012/07/13(金) 19:59:39.36
ナマポを受ければいい
397デフォルトの名無しさん:2012/07/13(金) 20:12:08.30
>>395
いや継承してるとclone()をvirtualにするでしょ?
スマポは型を固定してしまうのでコンパイル通らないのよ
398デフォルトの名無しさん:2012/07/13(金) 20:56:18.83
virtual shared_ptr<Base> clone()で派生ではshared_ptr<Base>にDerived*入れて返せばいいだろ
shared_ptr<Derived>とか欲しければ仮想でないshared_ptr<Derived> clone_derived()を派生側で定義しとけばいい
399デフォルトの名無しさん:2012/07/13(金) 20:59:05.66
ありがと
それで書いてみるわ
400デフォルトの名無しさん:2012/07/13(金) 21:08:58.95
http://codepad.org/D58DaaaB

よしこれでメモリリーク無しに出来た
401デフォルトの名無しさん:2012/07/13(金) 21:27:38.98
>>397 こんなんでどう?
ttp://ideone.com/6AMjL
402デフォルトの名無しさん:2012/07/13(金) 21:36:44.74
返り値でスマートポインタを返すな
パフォーマンスの為に生使いたい人が困るだろうが
403デフォルトの名無しさん:2012/07/13(金) 21:43:57.94
>>400
ありがとう
参考にさせていただきます

>>402
いや、メモリリークしないように自分で気をつけるのなら共変のポインタをvirtualで返せばいいよ
404デフォルトの名無しさん:2012/07/13(金) 21:56:29.97
「パフォーマンスのための生ポ」はもうやめようや
小規模ならまだしも。
405デフォルトの名無しさん:2012/07/13(金) 22:16:43.47
パフォーマンスだけじゃなくて再利用の利便性も下がるんだよね
スマポ前提の設計だと後続のコードもスマポに合わせて設計しないといけなくなる
最近は標準化されたから少し抵抗減ったが
少し前にスマポと言ったらブーストなどのライブラリが必要だった
これは使う側からすると面倒だ
ナマポなら利用者がわからスマポの使用不使用や種類を選択しやすい
406デフォルトの名無しさん:2012/07/13(金) 22:18:43.24
いらない子と言われて久しいけれど、時々でいいからauto_ptrちゃんのことも思い出してあげてください。
407デフォルトの名無しさん:2012/07/13(金) 22:20:15.56
C++11ではついにdepricated指定されてしまったorz
408デフォルトの名無しさん:2012/07/13(金) 22:46:38.14
乗り遅れた感もあるけど
ttp://codepad.org/NKX0xGnQ

clone()の戻り値をスマポにしても良いかも
DerivedのコピーコンストラクタにClonable<Derived>()が無いと明示的な初期化が無いという警告が出たんだけど何でなんだろうか
409デフォルトの名無しさん:2012/07/14(土) 00:11:50.02
>>402
生ポインタに比べて例えば std::auto_ptr のパフォーマンスがどう劣ると思ってるの?
410デフォルトの名無しさん:2012/07/14(土) 00:12:30.18
>>405
つまり標準化されたからガンガン使えってことだね
411デフォルトの名無しさん:2012/07/14(土) 00:31:05.16
ライブラリがスマポ指定でもラップしてナマポ形式で再利用できるだろ
class hoge { smapo<x> p; void method() { p->method(); }
hoge(): p(new x) {}
hoge(hoge const &o): p(o.p->clone()){}
};

hoge *p = new hoge;
412デフォルトの名無しさん:2012/07/14(土) 02:42:54.70
auto_ptrがdeprecatedになったのは
unique_ptrが入ったからか
413デフォルトの名無しさん:2012/07/14(土) 03:32:50.11
コピーで所有権の移動とか直観的じゃなさ過ぎたよな
414デフォルトの名無しさん:2012/07/14(土) 09:00:33.89
ptr プトゥル
ioctl アイオークトゥル
fcntl エフクントゥル
ctrl クタール
415デフォルトの名無しさん:2012/07/14(土) 09:10:51.63
clsXXX 来るすXXX
calcXXX 軽くXXX
416デフォルトの名無しさん:2012/07/14(土) 09:37:55.88
>>412
auto_ptr を deprecated にするために
unique_ptr その他を入れたってとこだな

>>413
コピーではなくムーブづら
417デフォルトの名無しさん:2012/07/14(土) 10:58:22.42
>>411
効率悪すぎだな
最初から生ポインタを返せばいい
418デフォルトの名無しさん:2012/07/14(土) 11:08:03.78
boost::shared_ptrとstd::shared_ptrってどう橋渡しするんだろう
419デフォルトの名無しさん:2012/07/14(土) 12:00:49.75
>>418
まだstd::shared_ptrが入ってないコンパイラもあるからだ(どこのコンパイラとは言わないが)
要するにソースの再利用の話だよな?
boostの使用は禁止されていてstdなら良いって会社もあるから
どうするんだろうね?エディタかsedか他のスプリクト言語でまとめて置換か?
420デフォルトの名無しさん:2012/07/14(土) 12:16:36.92
スマポの変換コード書き足して共存させればいい
421デフォルトの名無しさん:2012/07/14(土) 12:26:50.76
どうせboostがboost::cast<std::shared_ptr>()みたいな感じで用意したり、
std::shared_ptr用のコンストラクター作るから使う側は問題ないだろ

問題はboostがどうやってそれを実装するかだ
422デフォルトの名無しさん:2012/07/14(土) 12:40:09.38
簡単だろ
bstsp<y> p(new y);
stdsp<x> q(p.get(), [p](y*){});
423デフォルトの名無しさん:2012/07/14(土) 12:57:20.18
速度最適化してるのにJavaより処理が遅いとかどんだけ・・・
424デフォルトの名無しさん:2012/07/14(土) 13:02:23.04
スマポ間の変換を何万回する気だよ
425デフォルトの名無しさん:2012/07/14(土) 13:06:48.10
>>424
ありがとうございます すごい早くなりましたw
426デフォルトの名無しさん:2012/07/14(土) 13:07:57.28
てかなんかスマポ使ってるってわかったんですかねw
427デフォルトの名無しさん:2012/07/14(土) 13:09:25.24
監視されてるよ
428デフォルトの名無しさん:2012/07/14(土) 13:14:36.71
こわwでもこれで速度の壁超えたのでとある計画ができる!
マジでありがたいw
429デフォルトの名無しさん:2012/07/15(日) 20:53:18.25
typedef vector<string> vec;

class foo{
vec x,y;
public:
foo( const vec &a, const vec &b ):x(a),y(b){}
foo( const vec &a, vec &&b ): x(a),y(move(b)){}
foo( vec &&a, const vec &b ): x(move(a)),y(b){}
foo( vec &&a, vec &&b ): x(move(a)),y(move(b)){}
};

4つも書くのメンドイんですが、どうにかなりませんか?
430デフォルトの名無しさん:2012/07/15(日) 21:24:18.25
右辺値参照は各クラスにキックできないの?
んで、右辺値参照なかったら普通のコピコン動くんじゃなかったっけ?
C++11はよく知らないんだけど。
431デフォルトの名無しさん:2012/07/15(日) 21:54:51.52
>>429
テンプレートと完全転送使え
ttp://ideone.com/rsNRE
432デフォルトの名無しさん:2012/07/15(日) 22:10:16.26
イデオンって0x出来たのか
433デフォルトの名無しさん:2012/07/15(日) 23:00:57.63
>>431
それだと受け付けてほしくないもの受理しちゃう。
ttp://ideone.com/wybTH
434デフォルトの名無しさん:2012/07/15(日) 23:09:23.03
受け付けたく無い型を特殊化して削除
435デフォルトの名無しさん:2012/07/15(日) 23:11:02.33
is_barとか作ってディ酢パッチ
436デフォルトの名無しさん:2012/07/15(日) 23:12:53.81
int,bar
bar,int
int,intの三つ?
"4つも書くのメンドイ"の解決にならんじゃん…
437デフォルトの名無しさん:2012/07/15(日) 23:34:15.84
>>433
元の>>429でもvecに暗黙変換可能な型は受け入れてるからいいんじゃないの
ttp://ideone.com/i3Gzi

厳密に型制限したいならenable_if使って黒魔術
ttp://ideone.com/sbbUO
438デフォルトの名無しさん:2012/07/15(日) 23:56:57.09
>>437
vectorって誰かがoperator vec作るアンポンタンなことせん限り暗黙変換可能な型ないはずだが。
でも、enable_ifはいいアイデアだと思う。static_assert使うよりまともなエラーになるな。
439デフォルトの名無しさん:2012/07/16(月) 00:17:11.23
>>437
decayは要るのか?
440デフォルトの名無しさん:2012/07/16(月) 01:37:32.72
>>439
いるんじゃない ttp://ideone.com/jCjUw
441デフォルトの名無しさん:2012/07/16(月) 01:55:53.78
>>405
いまだにこんな書き込みがあるとは恐ろしいな。

組込で作ってるならC++自体使うなって話だがw
442デフォルトの名無しさん:2012/07/16(月) 08:13:44.26
>>437
なんの制限も無しだと本来は明示的変換が必要な型も暗黙に受け入れてしまう
ttp://ideone.com/eQVC6

暗黙変換が可能な型だけを受け入れるならis_convertibleでenable_if
ttp://ideone.com/X9TS8
443デフォルトの名無しさん:2012/07/16(月) 08:43:09.33
>>441
反論は論理的な文章で書きなよど素人さんwww
つうかパフォーマンス=組み込みってwww
444デフォルトの名無しさん:2012/07/16(月) 08:47:04.77
HSPを1年くらいやってたんですがC++に移るのは難しいですか
445デフォルトの名無しさん:2012/07/16(月) 08:49:10.77
簡単だお!
446デフォルトの名無しさん:2012/07/16(月) 10:11:00.29
>>444
HSPに比べればはるかに大規模コードがバグりにくくなるし、良いんでないの
C++固有の難解なトコに触るレベルまでいかないなら難しくはない
447デフォルトの名無しさん:2012/07/16(月) 13:27:39.72
型制限はenable_ifでSFINAEが現在の常道
448デフォルトの名無しさん:2012/07/16(月) 13:32:55.31
c++ってなんでみんな必死に汚コードの生産性あげようと努力してるの?
449デフォルトの名無しさん:2012/07/16(月) 13:46:30.21
オジャバやウゾムゾスクリプトと違って実用十分なコードでも常に磨き上げる余地があるし
コード蓄積有無で実行/書上げ効率が別次元になるからねー
450デフォルトの名無しさん:2012/07/16(月) 13:50:51.18
やっぱりJavaやっててよかった!
451デフォルトの名無しさん:2012/07/16(月) 13:58:50.35
実用不十分な段階で手の入れ様が無くなるオジャバ哀れ
452デフォルトの名無しさん:2012/07/16(月) 14:07:32.95
>>448
生産性でJavaに追いつかれないように必死なのさ
453デフォルトの名無しさん:2012/07/16(月) 14:20:29.25
>>448
Javaは実行してみると分かるけど突然JITコンパイラやGCが働いてCPUの
負荷が跳ね上がる

マルチコアCPUなら問題ないが、組み込みとかでシングルコアだと致命的
454デフォルトの名無しさん:2012/07/16(月) 14:51:08.90
オペレータオーバーロードしてまるでプリミティブのように擬態するクズクラスが気に食わない

455デフォルトの名無しさん:2012/07/16(月) 15:07:34.67
演算子オーバーロードはうまく使えばタイプ量を劇的に減らしてしかも堅牢性が増す
って利点が分からないのか

C++11になってムーブコンストラクタが新設されてからさらにその性能がアップしている
456デフォルトの名無しさん:2012/07/16(月) 15:09:05.40
>>455
バカ乙
一目見てなにやってるかわからんコードなんてクズ
初回に書くときだけ楽でも後でいじる奴の仕事が二十倍遅くなるわ
457デフォルトの名無しさん:2012/07/16(月) 15:15:41.14
一目見てわかるようにオーバーロードしてんだろうがカス
これだから土方クズプログラマは…
458デフォルトの名無しさん:2012/07/16(月) 15:17:41.31
>>456
こういうバカが多いから未だにCがトップシェアなんだな・・
459デフォルトの名無しさん:2012/07/16(月) 15:18:48.81
>>457
カスだな〜おまえ
一目みてわかってるのはそのコード最初に書いたクズだけだよ
オペレータオーバーロードする奴はアスペルガーみたいなもんだわ
460デフォルトの名無しさん:2012/07/16(月) 15:21:07.62
i += j;
はい
このコードがなにをしてるか当てて下さい




わかるわけねーだろ!!
あーあ、ヘッダかドキュメント見に行かなきゃ〜
時間無駄したな〜
クズがオペレータオーバーロードなんかするからさ〜まじ氏ねよ
461デフォルトの名無しさん:2012/07/16(月) 15:25:55.68
>>460
お前仕様書書いた事ないのか?
サンデープログラマーなのか
462デフォルトの名無しさん:2012/07/16(月) 15:28:45.10
i に j を加えている。
463デフォルトの名無しさん:2012/07/16(月) 15:30:00.42
>>460
お前の上司はそんなこと聞いてくるのか
かわいそうに同情するよ
464デフォルトの名無しさん:2012/07/16(月) 15:35:22.86
>>462
違います
あーあ致命的なバグ出しちゃうよおまえ同寸の
465デフォルトの名無しさん:2012/07/16(月) 15:42:03.14
単なる構ってちゃんだろこいつ
それかC言語しか出来なくてC++が理解出来ない己の頭の悪さを
このような形で解消しようとしていると見る事もできる
466デフォルトの名無しさん:2012/07/16(月) 15:50:03.29
>>464
> 違います

では、正解書いてみ。
467デフォルトの名無しさん:2012/07/16(月) 15:52:36.27
>>466
コードに依存します
ドキュメントかヘッダを毎回参照して確認し時間を無駄にして下さい
468デフォルトの名無しさん:2012/07/16(月) 15:53:43.05
アスペだから他人のためにコメントを書くっていう行為ができないんだろうな

469デフォルトの名無しさん:2012/07/16(月) 16:00:02.53
>>468
馬鹿発見
コメント書いてたらご自慢のタイプ量が少ないメリットが帳消しだろwww
本末転倒ってこの事だな

やはり例外なんていう見えないgotoをありがたがってるバカなだけあるわwww
470デフォルトの名無しさん:2012/07/16(月) 16:14:18.24
悔しいが例外は俺も出来損ないだと思う
471デフォルトの名無しさん:2012/07/16(月) 16:15:50.39
ドキュメントは全て無駄、コードが全て。










アマチュアかよ。
472デフォルトの名無しさん:2012/07/16(月) 16:18:36.73
>>467
>コードに依存します

すくなくとも、俺のところではそんな馬鹿な仕様のクラスは使わない。

>ドキュメントかヘッダを毎回参照して確認し時間を無駄にして下さい

君のところだけだよ、そんな馬鹿なことしてるのは。
473デフォルトの名無しさん:2012/07/16(月) 16:19:20.47
>>471
プロほどコードを信頼する
474デフォルトの名無しさん:2012/07/16(月) 16:20:15.14
>>472
そんなクラスは使わないんだな?
要するにオペレータオーバーロードしたクラスは使わないという事だな
なんだ意見一致したジャないか
475デフォルトの名無しさん:2012/07/16(月) 16:32:52.36
>>474
>そんなクラスは使わないんだな?

そんな「馬鹿」なクラスは使わない。

アホと意見が一致することはないだろう。(w
476デフォルトの名無しさん:2012/07/16(月) 16:33:42.39
>>473
プロ気取り乙
477デフォルトの名無しさん:2012/07/16(月) 16:39:23.79
簡単な事に関してはアホが意見を言えるため議論が迷走する
いつもの事だな
478デフォルトの名無しさん:2012/07/16(月) 16:58:31.60
スコープ毎にusing operator 型;
みたいなの強要するのもありかな
479デフォルトの名無しさん:2012/07/16(月) 17:44:39.83
>>460
i = func(j);

これだって同じくらいなにしてるかわからないだろ。
480デフォルトの名無しさん:2012/07/16(月) 17:46:10.31
型が普通の型じゃなければ
必ず演算子オーバーロードされてるのだから
何も悩む必要は無い
481デフォルトの名無しさん:2012/07/16(月) 18:57:50.02
>>479
適切な名前をつければいい
482デフォルトの名無しさん:2012/07/16(月) 19:00:54.78
a.Add( b );
a += ( b );

名前つけようが、templateでの可搬性が下がるだけでメリット無し。
483デフォルトの名無しさん:2012/07/16(月) 19:01:11.35
その適切な名前がoperator+=なのですよ。
484デフォルトの名無しさん:2012/07/16(月) 19:01:37.93
>>478
iの型も分からないくらい長い関数作ってんだからお察しだろ
485デフォルトの名無しさん:2012/07/16(月) 19:05:04.14
例外に突っ込まないあたり自覚は有るんだな
cppは例外を採用し見えないジャンプコードに汚染されたクソ言語ってな
486デフォルトの名無しさん:2012/07/16(月) 19:10:53.47
俺は1レスしか書いてないがそれ以降スレが伸びてるのが愉快
487デフォルトの名無しさん:2012/07/16(月) 19:11:49.52
>>484
わからなくても動くようにしないといけないだろ。
こういうテンプレートでの可搬性が下がる。

template< class Iterator, class Type > Type Sum( Iterator begin, Iterator end, const Type &initial )
{
  Type sum = initial;
  while( begin != end )
  {
    sum += *begin;
    ++begin:
  }
  return sum;
}
488デフォルトの名無しさん:2012/07/16(月) 19:21:59.02
>>487
>template< class Iterator, class Type > Type Sum( Iterator begin, Iterator end, const Type &initial )
>{
>  Type sum = initial;
>  while( NotEQ(begin,end ))
>  {
>    sum = Add(sum, Unref( begin);
>    Next(begin);
>  }
>  return sum;
>}

こちらのがはるかに理解しやすい

489デフォルトの名無しさん:2012/07/16(月) 19:27:34.31
理解しやすいかどうかはどうでもよくて、整数型と互換性がない。
490デフォルトの名無しさん:2012/07/16(月) 19:28:34.43
>>488
COBOLかよ
491デフォルトの名無しさん:2012/07/16(月) 19:31:17.47
>>489
なんのためのオーバーロードだよwww
プリミティブにも同じく定義すりゃいいだろ
クラスを本来クラスの機能と直接関係ない演算子と関連付けるほうがキモイわ
492デフォルトの名無しさん:2012/07/16(月) 19:32:44.97
どのオーバーロードが呼ばれるんでしょうねぇ
余計にたちが悪いわ
493デフォルトの名無しさん:2012/07/16(月) 19:37:40.89
>>492
なんだオーバーロードのルックアップのルールも知らない素人か
494デフォルトの名無しさん:2012/07/16(月) 19:39:21.94
>>488
NotEQってなんだ?特にEQって
Nextって次の値返すんじゃないのか?
テンプレート書くときも、オーバーロードした関数
単体で使うときも何に使うもんかさっぱり判らんぞ。
495デフォルトの名無しさん:2012/07/16(月) 19:54:45.37
>>494
流石にそれはアスペだろ
鉛筆みてこれはなんだ箸か?とわかってるのにわめいてるようにしか見えないよ
496デフォルトの名無しさん:2012/07/16(月) 19:59:17.25
いや、お前が世界の辞書だと思うなよ
お前のルールで仕切ってる職場ならしらんが、
整数型に演算子と同じ動きをする関数が定義されてるなんて
普通思わないから。別の何かをしてるもんだと思う
497デフォルトの名無しさん:2012/07/16(月) 20:00:01.57
俺が法律だ!!!
498デフォルトの名無しさん:2012/07/16(月) 20:00:51.95
>>495
無いとは思うがそんな自慰行為職場で済んなよ。
499デフォルトの名無しさん:2012/07/16(月) 20:01:41.25
>495 その言葉は459にこそ当てはまるべし。
500デフォルトの名無しさん:2012/07/16(月) 20:02:32.10
std::not_equal_to とかあるのにこれ以上乱立させんな
501デフォルトの名無しさん:2012/07/16(月) 20:03:04.94
>>495
オペレーターちゃん必死ですねw
502デフォルトの名無しさん:2012/07/16(月) 20:16:49.55
オペレータオーバーロードがある理由はイテレーターやポインタや関数のシグネチャをエミュレートできるようにってだけだからな
基本的にそれ以外のオペレータオーバーロードは一部の例外を除いて非推奨だぜ
503デフォルトの名無しさん:2012/07/16(月) 20:22:53.40
>基本的に非推奨
だれが?
504デフォルトの名無しさん:2012/07/16(月) 20:24:54.66
常識だらろ
505デフォルトの名無しさん:2012/07/16(月) 20:31:17.05
オペレーターのオーバーロードはC++以前にSimulaやSmalltalkで導入されたもんなんだけどな。
OOPLじゃ他にも.Net系言語、PythonやRubyでもできる。基本C++の他の設計とは関係ない。
オペレーターをオーバーライドして整数型に対する関数を再利用するために用意されてる。
506デフォルトの名無しさん:2012/07/16(月) 20:33:26.19
>>504
お前の常識はどうでもいいから、非推奨してる規格委員の資料を出せ。
507デフォルトの名無しさん:2012/07/16(月) 21:10:01.98
コレってあれだろ? 炎上式勉強法ってヤツ
508デフォルトの名無しさん:2012/07/16(月) 21:12:02.95
>>507
たまにあるね
何気ない書き込みが思惑を超えて勝手に炎上して
それを見て学ぶ
509デフォルトの名無しさん:2012/07/16(月) 21:14:11.35
>>508
いやいや、わざわざ知ったかしたり、上みたいにキチガイな主張をして、それを正論で叩き潰そうとする人の正論を見て勉強をするっていうやつ
これが真性か炎上勉強法なのかは知らんがw
510デフォルトの名無しさん:2012/07/16(月) 21:18:18.63
>>509
ああ、それか
それもたまにやるけど、ツボを突くのが難しいから
成功率低いんだよな・・・
511デフォルトの名無しさん:2012/07/16(月) 21:35:47.55
>>485
お前が例外安全なプログラムが組めないヘボプログラマってだけだろ・・・
512デフォルトの名無しさん:2012/07/16(月) 21:43:00.35
狂人の真似とて大路を走らば、即ち狂人なり。
513デフォルトの名無しさん:2012/07/16(月) 21:55:44.09
>>507
ばれたかwww
かなりスルーされにくいから重宝するんだよなこれ
514デフォルトの名無しさん:2012/07/16(月) 21:57:10.63
>>485
見えないジャンプコードが入っていてなんの問題があるんだ?
breakでも見えないジャンプコードは入るだろうしreturnだって入るだろ。
そもそも、Cでまともに例外処理してたなら、try-catchで例外処理したって
困ることないだろ。Cで戻り値やerrnoの例外情報もみ消すことが当たり前の
頭になってるから発狂するはめになんだろ。
515デフォルトの名無しさん:2012/07/16(月) 22:01:18.75
意図して捕まえないとアボートとなんら変わらないというか選り始末に負えんgotoだから嫌われるんジャナイかな
516デフォルトの名無しさん:2012/07/16(月) 22:01:20.21
>>513
死ねよ
517デフォルトの名無しさん:2012/07/16(月) 22:01:52.65
>>515
意図して捕まえるケースなんてそうないよ
大体はRAIIで済む
518デフォルトの名無しさん:2012/07/16(月) 22:05:19.01
>>507
QZがやっているやつか。恥しらずにしかできないだろうね。
519デフォルトの名無しさん:2012/07/16(月) 22:05:43.45
あるアセンブリが、
デバッグモードとリリースモードのどちらでコンパイルされたかを
判断するコードを教えてください
520デフォルトの名無しさん:2012/07/16(月) 22:08:21.19
>>515
エラー処理せずに進んじゃ困るから例外扱いにするんだから、
いずれにせよ結果的は異常終了で変わらないだろうにね。
try-catchと違い戻り値無視に関しては最悪データを飛ばすけど。
521デフォルトの名無しさん:2012/07/16(月) 22:16:29.60
int id = 0;
ExampleRead( &id, "key" ); //戻り値チェック無視
ExampleDelete( id );
0 == idが有効なリソースを指していた場合、当然意図しない情報領域が飛ぶ。
効率を考えて、0初期化しなかった場合、より不特定な情報領域が飛ぶ。
同時にクビも飛ぶ。
522デフォルトの名無しさん:2012/07/16(月) 22:23:15.28
そしてミサイルがとぶ
523デフォルトの名無しさん:2012/07/16(月) 22:28:55.41
一発だけなら誤射でセーフ
524デフォルトの名無しさん:2012/07/16(月) 22:28:57.24
>>519
コードは知らんが、リンクされてるライブラリを調べれば分かる
525デフォルトの名無しさん:2012/07/16(月) 22:51:16.33
http://www.fsv.jp/
例外が関係するかは知らんが蓄積情報喪失ってのはとんでもないことになるかならな。
abortとどっちが深刻かは言うまでもない。
526デフォルトの名無しさん:2012/07/16(月) 22:55:21.21
googleがまったく逆の実行パラダイム提唱実行してなかったか?
527デフォルトの名無しさん:2012/07/16(月) 23:01:04.09
例外は再利用がめんどくさい
ラップしてnothrowにしないとCとかで使えないし
528デフォルトの名無しさん:2012/07/16(月) 23:46:40.95
>>527
戻り値でもモジュールまたげば翻訳することになるから同じこと。
529デフォルトの名無しさん:2012/07/16(月) 23:47:43.71
>>485
pythonもrubyも「例外を採用し見えないジャンプコードに汚染されたクソ言語」だと思ってるの?
530デフォルトの名無しさん:2012/07/16(月) 23:54:21.25
Schemeあたりの継続なんか見せたら卒倒しそうだな。そのまま起きてこない方がありがたいけど。
531デフォルトの名無しさん:2012/07/17(火) 01:07:11.10
見えない敵と戦っているクソ言語
532デフォルトの名無しさん:2012/07/17(火) 05:10:21.12
まあ、理由も書かずにクソ言語とか言ってればなんか偉くなったように思えるんだろうな。
>>485 みたいに、ヘタに理由書くとフルボッコだし。(w
533デフォルトの名無しさん:2012/07/17(火) 05:21:24.06
>>526
エラー忘却型コンピューティングか。
http://people.csail.mit.edu/rinard/paper/osdi04.pdf

意味が分かってない日本のお偉いさんは、例外処理せずログだけ残すことだと思ってんだろうが、
この方式は、例外の代わりに問題の起きない値を返す方式で、例外事象が起きたら例外の起きた
関数の中でちゃんと問題のない値を返せるよう処理しなきゃならん。
Cでも例外処理さぼってるような奴が使えるシロモノでもない。
534デフォルトの名無しさん:2012/07/17(火) 07:39:09.20
要するにエラー復帰か
535デフォルトの名無しさん:2012/07/17(火) 10:18:10.27
template<typename S, int ... X>
class E
{
S s[size(X...)];

constexpr int size(int x)
{
return x;
}
template<typename ... P>
constexpr int size(int x, Y ... y)
{
return x+size(y ...);
}


};
配列sがつくれません。
どうしたら直せますか?
536デフォルトの名無しさん:2012/07/17(火) 10:18:51.45
PのところYに訂正します。
537デフォルトの名無しさん:2012/07/17(火) 11:39:07.08
もう一度書き直しますね。
template<typename S, int ... X>
class E
{
S s[size(X...)];
constexpr int size(int x)
{
return x;
}
template<typename ... Y>
constexpr int size(int x, Y ... y)
{
return x+size(y ...);
}


};
ソースコードを日本語で翻訳すると可変長のテンプレート引数の
総和の長さを持つ配列を作りたいけれど。
定数になる関数を使ってもコンパイルできませんということです。
ちなみに配列を初期化する前には関数はないのかもとおもって静的関数にしてみてもできませんでした。
538デフォルトの名無しさん:2012/07/17(火) 12:23:05.11
>>537
sizeの宣言と定義2つをEの定義の外に出す。メンバ関数を作りたいわけじゃないだろう
539デフォルトの名無しさん:2012/07/17(火) 12:50:30.53
>>538
それもやったけど出来ませんでした。
540デフォルトの名無しさん:2012/07/17(火) 12:58:49.25
>>539
gcc4.7ではできる。ideoneの0x gcc4.5.1ではエラー

constexpr int size(int x)
{
return x;
}

template<typename ... Y>
constexpr int size(int x, Y ... y)
{
return x + size(y ...);
}

template<typename S, int ... X>
class E
{
S s[size(X...)];
};

int main() {
E<int, 1, 2, 3> e;
}
541デフォルトの名無しさん:2012/07/17(火) 13:02:09.88
有難うございます。
GCC4.7じゃないので出来ませんでした。
GCC4.7に変えたいです。
542デフォルトの名無しさん:2012/07/17(火) 20:44:08.25
>>533
PDF読んでみりゃ解るが、これって単なる例外じゃなく
バッファーオーバーランとかセキュリティ的に極めて致命的な
場合に限った話で、他の例外は今までどおり例外処理が必要なんだよな。
そもそも、エラー忘却型って訳語自体がおかしいし。
543デフォルトの名無しさん:2012/07/17(火) 21:48:07.20
こういう論文って何処から拾って来るの?
544デフォルトの名無しさん:2012/07/17(火) 22:36:21.21
質問が2つあります
http://ideone.com/h7kQf
このコードはideone(gcc-4.5.1)だとコンパイルが通りませんがgcc-4.6.0と4.7.0だと通ります
またエラーの出ている行をreturn this->f_(g(arg));のように変えると
コンパイルは通りますが今度は例外を出して落ちます
質問の一つ目はコンパイルエラーの理由で二つ目はランタイムエラーの原因と対処です
お願いします
545デフォルトの名無しさん:2012/07/17(火) 22:51:31.83
なんで無名関数の戻り値型書いてないんだ?
546デフォルトの名無しさん:2012/07/18(水) 00:32:01.14
cはf.compose(g)のthisをキャプチャしているがc(3.0)の時点では既に寿命が尽きている
547デフォルトの名無しさん:2012/07/18(水) 01:01:20.22
>>443をファビョらせちゃったかな?

スマートポインタの有用性はもはやググレばいくらでも見つかる・・・と思ったら
ぜんぜんないでやんの。

そりゃ生ポインタ返せって言うヤツがまだいるわけだな。
548デフォルトの名無しさん:2012/07/18(水) 01:11:40.76
訳:面倒くさいので誰か調べて下さい
549デフォルトの名無しさん:2012/07/18(水) 02:31:49.33
ナマポで返して使う側がスマポを外から付け加えてやればいいだけ何度も言わせんな

obj *obj::clone(); // クラス製作者が書くべきコード
//利用者が書くべきコード
spobj create(...) { return spobj(new obj(...)); }
spobj clone(spobj p) { return spobj(p->clone()); }

当然テンプレートを使って楽していいぞ
550デフォルトの名無しさん:2012/07/18(水) 02:38:13.12
常識だよな
普通に考えて「スマポを生成する」なんて機能は論理的に考えて元々のクラスに不必要な機能なんだよ
だから当然スマポを生成する機能は分離するのが正しい設計だ
551デフォルトの名無しさん:2012/07/18(水) 05:59:32.63
>>549
オーバーライドが不便すぎる
所有権の無くなるスマポを返したい時、手の込んだ事せにゃならん
逆も言えた話ではあるがいくぶんかマシだわ
552デフォルトの名無しさん:2012/07/18(水) 07:22:23.00
shared_ptrの場合はスマポ返さないと全く意味がない
553デフォルトの名無しさん:2012/07/18(水) 08:34:30.18
auto_ptr 返せば現状での十分な移植性に加えて shared_ptr も unique_ptr も
使う側の入れ物は好きに選べるんだぜ。最強じゃね?
554デフォルトの名無しさん:2012/07/18(水) 09:24:51.17
ヘッダで#include <memory>するとallocatorやらなんやら、auto_ptrやunique_ptrが使いたいだけにしては重すぎるんだよな。
555デフォルトの名無しさん:2012/07/18(水) 09:35:48.47
>>551
何が言いたいのかよくわからない
556デフォルトの名無しさん:2012/07/18(水) 09:54:21.18
上の方でスマポのパフォーマンスの話出てたから前スレのレス貼っておくね

301 :デフォルトの名無しさん [sage] :2012/05/25(金) 16:45:50.43
 スマポが使えるなら使ったら方がいいが、
 パフォーマンスやメモリの観点で使わない方がいい場合もあるからケースバイケースだな。

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

304 :デフォルトの名無しさん [sage] :2012/05/25(金) 17:24:20.59
 亡きauto_ptrさん
 http://ideone.com/sc7fr
557デフォルトの名無しさん:2012/07/18(水) 10:02:50.79
ユニポは削除子がイマイチ使いにくい
テンプレートで指定だからムーブする時に型を合わせないとダメだし
動的にしたるかと思ってfunction使うと例外安全じゃ無くなるし
558デフォルトの名無しさん:2012/07/18(水) 10:19:54.90
shared_ptrみたいにするとサイズが増えるんじゃないの
559デフォルトの名無しさん:2012/07/18(水) 12:20:04.53
>>556だとサイズが2倍で生成/破棄時間もほぼ2倍になってるね。
処理時間≒メモリアクセス時間という俺の持論通りだ。
560デフォルトの名無しさん:2012/07/18(水) 12:55:49.82
わろた
561デフォルトの名無しさん:2012/07/18(水) 17:52:43.76
共用体がよくわからん(´・ω・)
562デフォルトの名無しさん:2012/07/18(水) 18:11:06.86
共用することを強いられているんだ
563デフォルトの名無しさん:2012/07/18(水) 18:23:11.91
混浴風呂を思い浮かべてごらん
a)入り口に男湯と書いてあるところに入る
b)入り口に女湯と書いてあるところに入る
あら不思議
どっちも同じ風呂釜に
564デフォルトの名無しさん:2012/07/18(水) 18:25:44.27
ただし女湯側から見た時には仕切りがあって
1の湯、2の湯と分かれている
男湯側から見ると3の湯がひとつしかない
565デフォルトの名無しさん:2012/07/18(水) 18:49:11.17
風呂に入ってるひとにアクセスする方法が

男湯.3の湯

女湯.2の湯
女湯.1の湯

というパターンがあることになる
566デフォルトの名無しさん:2012/07/18(水) 18:52:25.80
銭湯ではわかりにくいのでブロリーで例えてください
567デフォルトの名無しさん:2012/07/18(水) 18:53:04.27
家族で歯ブラシを共有することを思い浮かべてごらん

君は歯ブラシを歯磨きに使う
お母さんはその歯ブラシをちょっとした掃除に使う
568デフォルトの名無しさん:2012/07/18(水) 18:55:00.95
俺の歯ブラシで掃除するなよ
569デフォルトの名無しさん:2012/07/18(水) 18:56:38.88
ツマンネ
570デフォルトの名無しさん:2012/07/18(水) 21:51:32.04
>>545
どれですか?

>>546
だからランタイムエラーが出てしまうんですね
ではgccのバージョンが違うとうまく動くのはなぜなんでしょうか
571デフォルトの名無しさん:2012/07/19(木) 01:20:34.25
>>570
> ではgccのバージョンが違うとうまく動くのはなぜなんでしょうか

>> return { [this, g](Arg arg) { return f_(g(arg)); } };
thisをキャプチャしていて (*this).f_ が可視なら f_ が暗黙的にキャプチャされるのが正しい処理
そこに不具合があったからコンパイルエラー
572片山博文MZボット ◆0lBZNi.Q7evd :2012/07/19(木) 01:26:46.38
共用体は、下位バイトを共用すると覚えておけばOK!
573デフォルトの名無しさん:2012/07/19(木) 05:44:02.99
共用体のレイアウトはリトルエンディアンかARMや各種サーバーで使うビッグエンディアンで
全然違ってくるけど、下位バイトってなんの事言ってんだ?
574片山博文MZボット ◆0lBZNi.Q7evd :2012/07/19(木) 06:28:20.24
言い直します。
LEの場合は、共通の下位ブロックを共用する。
BEの場合は、共通の上位ブロックを共用する。
575デフォルトの名無しさん:2012/07/19(木) 06:34:13.09
実際は処理系依存で、ビッグエンディアン系か
リトルエンディアン系なのかで、実行環境関係
なかったりするんだけどな。
576デフォルトの名無しさん:2012/07/19(木) 07:27:39.74
>>572
下位バイト=パンツ

家族でパンツを共有することを思い浮かべてごらん
577デフォルトの名無しさん:2012/07/19(木) 07:38:14.95
template <size_t n>
void func(const double (&arr)[n]);
にdouble*を渡す方法ありますか?(キャストなどで)

具体的には
array<double,10> xs;
に対してfunc(hoge_cast<・・・>(xs.data()))みたいなことを考えています。
(静的な配列なのにAPI的に配列の参照が取り出せないので困っています)
578デフォルトの名無しさん:2012/07/19(木) 08:32:26.54
アレイクラスでオーバーロード
579デフォルトの名無しさん:2012/07/19(木) 09:21:46.65
あー疲れた
580デフォルトの名無しさん:2012/07/19(木) 09:23:56.36
>>577
func((double const(&)[10])xs.data());
581デフォルトの名無しさん:2012/07/19(木) 20:02:35.92
Hoge& operator=(const char* s)
{ set( s ); return *this; }
Hoge& operator=(const string& s)
{ set( s ); return *this; }
Hoge& operator=(int s)
{ set( s ); return *this; }

みたいなのを延々と書きたくないんだけど、どうしたらいいの?
582デフォルトの名無しさん:2012/07/19(木) 20:27:28.92
マクロ
583デフォルトの名無しさん:2012/07/19(木) 20:30:07.04
エクセルでコピペ
584デフォルトの名無しさん:2012/07/19(木) 20:36:49.29
マジか。マクロかよ
585デフォルトの名無しさん:2012/07/19(木) 22:02:27.63
>>581
その例だと設計からおかしいぞ
stringとるならchar*とるのはいらないし文字列と数値のどちらもを直接代入できるのは基本的には悪い設計
586デフォルトの名無しさん:2012/07/19(木) 22:03:59.72
class A {
public:
int hoge;
A(int a) : hoge(a) {}
};

このコンストラクタって
A(int a){ hoge = a; }
と同じ意味?
なんでこんな書き方が用意されてるの?
仕様決めた人は代入すら面倒だったの?
587デフォルトの名無しさん:2012/07/19(木) 22:05:22.71
代入じゃなくて初期化したいから
588デフォルトの名無しさん:2012/07/19(木) 22:05:50.40
>>586
class A {
public:
const int hoge;
A(int a) : hoge(a) {}
};

こうなったときどうする?
589デフォルトの名無しさん:2012/07/19(木) 22:10:44.09
>>587-588
ありがとう、ものすごくなっとくした
仕様決めた人はいろんなこと考えてくれてんだな
590デフォルトの名無しさん:2012/07/19(木) 22:11:03.91
>>586
参照とかどうすんだよ
591デフォルトの名無しさん:2012/07/19(木) 22:13:25.63
>>590
え、どうするの?
592デフォルトの名無しさん:2012/07/19(木) 23:02:16.17
operator<< ってなんて読むの?
593デフォルトの名無しさん:2012/07/19(木) 23:07:49.23
おぺれーたーくく
594デフォルトの名無しさん:2012/07/19(木) 23:12:28.31
子供じゃねーんだからさぁ・・・
595デフォルトの名無しさん:2012/07/19(木) 23:16:12.17
左シフト演算子
596デフォルトの名無しさん:2012/07/19(木) 23:33:17.29
なんでお前らはコンストラクタのイニシャライザ使いたがらないの?
597デフォルトの名無しさん:2012/07/19(木) 23:36:08.02
コンストラクタの中からset()とか呼ばね?
598デフォルトの名無しさん:2012/07/19(木) 23:36:38.02
すごい使ってるけど
599デフォルトの名無しさん:2012/07/19(木) 23:53:29.24
キャスト演算子のオーバーロードって継承されたっけか
600デフォルトの名無しさん:2012/07/19(木) 23:57:41.06
>>597
そのset()が例外飛ばしてきたらどうするんだろうな
601デフォルトの名無しさん:2012/07/20(金) 00:01:03.63
>>600
そんときはスパッと死ねよ
602デフォルトの名無しさん:2012/07/20(金) 00:03:44.00
コンストラクタでset()を使う理由がわからんけど
603デフォルトの名無しさん:2012/07/20(金) 00:08:06.83
>>581
template<typename T>
Hoge& operator=(const T& s)
{ set( s ); return *this; }
604デフォルトの名無しさん:2012/07/20(金) 00:36:15.25
>>603
*とかどうするの?
605デフォルトの名無しさん:2012/07/20(金) 00:45:27.78
stringstream をつかって、文字列の後ろの数字を取りたいんだけど
どうしたらいいかな

stringstream ss;
string dami;
int suji;
ss << "unko123";
ss >> dami >> suji;

ってやったんだけど、数字取れなかった。
606デフォルトの名無しさん:2012/07/20(金) 01:21:03.08
>>604
Tがchar const *になってhoge& operator=(char const * const & s)になるだけ
607デフォルトの名無しさん:2012/07/20(金) 01:30:14.66
>>605
デリミタで調べろ
608デフォルトの名無しさん:2012/07/20(金) 01:35:48.25
>>605
peek(), ignore()
609デフォルトの名無しさん:2012/07/20(金) 08:11:11.06
>>600
別にコンストラクタで例外飛ばしても問題ないけど
610デフォルトの名無しさん:2012/07/20(金) 08:29:14.55
まだコンストラクタからの例外にごちゃごちゃ言うやついるの?
もう絶滅したと思ってたんだけど。
611デフォルトの名無しさん:2012/07/20(金) 09:03:22.64
まともにRAIIを扱えずにコンストラクタからの例外で
リソースリークしちゃうコード書く奴は割といる。
612デフォルトの名無しさん:2012/07/20(金) 14:09:38.39
配列とかのiterator で、最後かどうかの判定に
元の配列を使わなければならないのはいやなので
どうにかならないものか
613デフォルトの名無しさん:2012/07/20(金) 14:22:27.28
>>612
具体的に。アクセスの過程で要素数が変わらないのなら、事前にend()を保持しておけばよさそうだが。
614デフォルトの名無しさん:2012/07/20(金) 14:25:56.72
>>613
ありがとう
その手で行くわ
615デフォルトの名無しさん:2012/07/20(金) 18:45:08.34
iteratorのなかにend()をとっとく場所くらいあればいいのになぁ
616デフォルトの名無しさん:2012/07/20(金) 19:40:59.85
こういう系?
http://ideone.com/kri9w
C#とかJavaのイテレータは終端持ってるよね
でもC++的には単体を指すiteratorも無いと色々と効率がね
617デフォルトの名無しさん:2012/07/20(金) 19:44:08.42
ポインタのシンタックスに合わせたいからって理由のためだけにああいう仕様にするんだよな馬鹿らしい
isEndやNextなどのメソッドを作るべきなんだよ純粋なOOPとしてはね
ただCの表記に合わせたいという不純な動機のためにオペレーターオーバーロードや始点と終点の分離なんて要らないものを書かなきゃいけない
618デフォルトの名無しさん:2012/07/20(金) 19:51:53.48
最後かどうかの判定する場合は--endか毎回it+1しないといけないね
operator--()持ってるかどうかで特殊化とか出来たっけ?
http://ideone.com/gHiFP
619デフォルトの名無しさん:2012/07/20(金) 20:00:33.57
>>616
あーうんこんな感じこんな感じ
標準でこの機能ついてりゃいいんだよな
620デフォルトの名無しさん:2012/07/20(金) 20:01:54.83
boost::rangeでも使ってろ
621デフォルトの名無しさん:2012/07/20(金) 20:04:10.94
>>620
すげぇ。まるで魔法だ
622デフォルトの名無しさん:2012/07/20(金) 20:06:01.18
boost::rangeはイテレータじゃないじゃん
623デフォルトの名無しさん:2012/07/20(金) 22:27:12.57
BidirectionalIterator未満を捨てればおk
624デフォルトの名無しさん:2012/07/21(土) 13:30:40.17
C++って仕事少ないっすね
Javaの勉強すれば良かったと後悔しました
625デフォルトの名無しさん:2012/07/21(土) 13:41:32.22
C++分かるならJavaもすぐ分かるだろう
C++は手続型言語の仲では最も難しい部類の言語だから
それができるなら他の言語なんてすぐ覚えられるよ
626デフォルトの名無しさん:2012/07/21(土) 13:45:34.01
C++/Java/C#はセットで覚えていいレベル
627デフォルトの名無しさん:2012/07/21(土) 13:45:34.37
すぐといってももう就活には間に合わないでしょうから意味ないんですわ
628デフォルトの名無しさん:2012/07/21(土) 13:47:41.23
今日明日で覚えれ
629デフォルトの名無しさん:2012/07/21(土) 13:47:45.74
C++知ってるならJavaとか2日もあれば十分だろ
630デフォルトの名無しさん:2012/07/21(土) 13:53:46.61
Java参考書読んだレベルで使えるって言ってもいいならそうかもしれない
631デフォルトの名無しさん:2012/07/21(土) 14:04:07.09
C++を使い込んでる人は、ロジック汲み上げる過程で色々発見するでしょ
3日で基礎を覚えりゃ仕事いける。
632デフォルトの名無しさん:2012/07/21(土) 14:12:24.50
俺みたいなNNTクズは派遣バイトで生きながらえて趣味でC++やるしか無いんだな……無念だ
633デフォルトの名無しさん:2012/07/21(土) 15:11:06.67
で、Javaの仕事ってそんなに多いのか?
C#かVBかC++の仕事しかやった事無いが
634デフォルトの名無しさん:2012/07/21(土) 15:25:48.96
>>633
SEの説明会みた感じだとJavaかなり多いと思う
組み込み、制御系はCだからプラプラあまり使わないらしいし
ゲームぐらいじゃないかな他にプラプラ使うとこは
635デフォルトの名無しさん:2012/07/21(土) 15:51:44.88
画像を扱う系統のはC++よく使うよ
ゲームに限らず
表示系でもLinuxとかならC++はある
636デフォルトの名無しさん:2012/07/21(土) 15:59:53.56
シミュレーションとかデータ解析とかはC++多くね?
JavaやC#と速度比べるとやっぱ段違いだからな
637デフォルトの名無しさん:2012/07/21(土) 16:03:51.79
規模が大きくなりそうなので、ビルド影響範囲を減らしたい。
他の人も利用するので、IFは綺麗ににしたい。

ってことで、IF公開/継承で隠蔽するか、ピンプルにするかで悩んでます。

それぞれのデメリット
ピンプル:外部提供機能を増やすたびに接続を書くのがめんどくさい。
IF:クラスのインスタンス化にnew が必要になる

位に捕らえてるんだけど、他に注意するべき違いってありますか?
638デフォルトの名無しさん:2012/07/21(土) 16:05:11.58
ツイッターやフェイスブックもC++って聞いたような。
大量のアクセスをさばこうと思ったら、phpよりもいいのかな?
639デフォルトの名無しさん:2012/07/21(土) 16:06:48.29
phpをgccコンパイル・・ってあったわ。こんなこと出来るのか
640デフォルトの名無しさん:2012/07/21(土) 16:15:48.03
最初ピンプルって何かと思った
641デフォルトの名無しさん:2012/07/21(土) 16:17:53.90
RAIIってなんて発音するの
642デフォルトの名無しさん:2012/07/21(土) 16:18:23.98
らいー
643デフォルトの名無しさん:2012/07/21(土) 17:00:04.64
らつー
644デフォルトの名無しさん:2012/07/21(土) 17:12:12.31
>>624
どういう意味で言ってんだ?就職先か?案件の話か?
自社開発してて、グラフィック系だと基本C++の仕事が半分位だぞ。
半年〜1年連続してC++で遊べることもある。
645デフォルトの名無しさん:2012/07/21(土) 17:14:43.04
C++は人のソース読みたいと思えない
646デフォルトの名無しさん:2012/07/21(土) 17:14:59.94
>>637
どっちもクラスが小さいと速度に影響する。
647デフォルトの名無しさん:2012/07/21(土) 18:21:12.22
>>637
new が要るのは pimpl もいっしょじゃね?
648デフォルトの名無しさん:2012/07/21(土) 18:48:32.25
allocaした領域をコンストラクターで初期化して返す関数なら最速なんだけどな。
如何せん、allocaに相当する関数を自前で作らにゃならんのが手間。
649デフォルトの名無しさん:2012/07/21(土) 19:43:38.25
>>647
deleteの面倒を見る場所は変わるから
使用感の差はあるだろうな

>>637
pimplはややトリッキーなので
知らない人が見ると理解してもらえない事があるな
650デフォルトの名無しさん:2012/07/21(土) 19:58:03.50
メンバー関数の実体をpimplじゃなく、pimplを使ってるクラスに配置しとけば
コンストラクター、デストラクター以外の処理速度が下がらない。
MSのコンパイラーやiccなんかだと翻訳単位超えてインライン展開してくれるからな。
651デフォルトの名無しさん:2012/07/21(土) 20:40:34.75
ピンプルとかパンプルとかパムポップンだな
652デフォルトの名無しさん:2012/07/21(土) 20:55:26.98
>>644
グラフィック系というと3DCG?
画像解析とかは別ものか
653デフォルトの名無しさん:2012/07/21(土) 21:05:20.37
画像を扱うものなら何でも
3DCGもそうだし、CODECとか医療系(CT、MRI)とかも
654デフォルトの名無しさん:2012/07/21(土) 21:14:01.40
>>653
医療かーなるほど
どうもっす探してみるっすおっす
655デフォルトの名無しさん:2012/07/21(土) 21:16:14.63
>>652
色々。ウチは2次元ベクトルデータが多い。
図面だったり、組版した文書だったり。
656デフォルトの名無しさん:2012/07/21(土) 21:21:46.09
単に書類関係でも使うけどね。
ビジネスロジックとプリンターの中間は結局描画処理しなきゃならんから
QRコード作ったり、装飾描いたりってなるとC++になる。
657デフォルトの名無しさん:2012/07/21(土) 21:31:40.72
ド阿呆な質問で悪い。なんでstdio.h使わずiostream使わないといけないのか教えて欲しい

Cしか勉強してないから違和感が抜けないんだ…

658デフォルトの名無しさん:2012/07/21(土) 21:35:15.99
誰もそんなこと言ってないけど
659デフォルトの名無しさん:2012/07/21(土) 21:36:21.74
C++勉強すればわかるよ
660デフォルトの名無しさん:2012/07/21(土) 21:37:18.48
ストリームの抽象化が強力だから
661デフォルトの名無しさん:2012/07/21(土) 21:40:04.50
使わないと行けないわけではないし、cstdio( <stdio.h> )使ってる人も多いだろ。
iostreamを使ったほうがいい理由は、streambufを変えたり、istream, ostreamの派生を
作ることで、iostreamを使った処理の出力をTCPソケットだったりstringだったり、
いろんなモノに使いまわせる点。cstdioでも似たようなことが出来なくはないが、OSに依存する。
662デフォルトの名無しさん:2012/07/21(土) 21:44:17.45
>>657
無理やり理由をひねり出すんだったら、可変長引数を使わないで済むってことかなぁ。
アレはなんでも入れれるけど、Voidポインターなんでアブネー。
あとは、開放忘れが無いとかかな。

見た目がダサいのは慣れで済むけど、APPのクラッシュはそうはいかない。
663デフォルトの名無しさん:2012/07/21(土) 21:50:31.60
>>661
それたまに聞くけどよくわからん
664デフォルトの名無しさん:2012/07/21(土) 21:58:13.73
ostream out1( "text.txt", std::ios::out );
example.Store( out1 );

MailStream out2( "no titile", "To:[email protected]" );
example.Store( out2 );

前者だとexampleの内容が、text.txtに書き込まれ、
後者だとメール送信される。
この時Store自体の実装は一切変更しなくて済む。
665デフォルトの名無しさん:2012/07/21(土) 22:06:46.98
具体的にどうすれば?
666デフォルトの名無しさん:2012/07/21(土) 22:12:27.21
それぐらいはまともな入門書読めば判るだろ
streambufのサブクラス作るだけだが、
長くなるから個々には書かん
667デフォルトの名無しさん:2012/07/22(日) 02:45:17.64
ソケットに対するストリームならBoost.Asioに実装がある。
Boost.InterproessのvectorstreamとbufferstreamはなぜInterprocessにあるのか分からない。
668デフォルトの名無しさん:2012/07/22(日) 02:47:17.47
>>657
自分や誰かが作ったクラスや構造体などをprintf/scanfで入出力できるようにするのは無理だけど、
iostreamの<<と>>ならできるってのは便利と言えば便利。
669デフォルトの名無しさん:2012/07/22(日) 06:14:09.05
まあ boost::format がないと不便だけどねえ
670デフォルトの名無しさん:2012/07/22(日) 10:02:58.64
>>666
参考書のタイトル頼む
671デフォルトの名無しさん:2012/07/22(日) 10:35:17.37
>>670
新品はないが中古なら
http://www.amazon.co.jp/gp/offer-listing/4756137156/ref=dp_olp_used?ie=UTF8&condition=used

もしくはISBN4-7561-3715-6でぐぐっても良い

今すぐにC++11の参考書が出てくるのでC++03の新しい参考書は控えてるような印象
672デフォルトの名無しさん:2012/07/22(日) 12:51:08.28
boostのvariantって四則演算できないのか
673デフォルトの名無しさん:2012/07/22(日) 13:50:58.50
中身が空の関数であっても、関数本体は cppソース側に書いたほうが
いいのかな
674デフォルトの名無しさん:2012/07/22(日) 13:53:16.24
>>673
ヘッダに書く方がいい
675デフォルトの名無しさん:2012/07/22(日) 14:56:36.46
STL使ってるとインデクサなんかにsize_tが使われてるみたいだけど、実装する時はintとかじゃなくてsize_tに統一するべきなの?
VS使ってると警告がウザいん。因みにsize_t型が32/64bitで長さが変わることは心得てる
676デフォルトの名無しさん:2012/07/22(日) 15:11:54.45
>>675
まあこの例に限らず警告がゼロになるようにした方がとにかく無難
677デフォルトの名無しさん:2012/07/22(日) 15:31:15.88
>>675
面倒でもstatic_cast<int>してるわいつも
678デフォルトの名無しさん:2012/07/22(日) 15:34:38.96
>>677
そっちにあわせんなよ
679デフォルトの名無しさん:2012/07/22(日) 15:47:49.79
参照な引数を省略する方法ってある?
int hoge( int &unko=0 );
みたいな感じで省略されたときは返さないみたいな感じで
680デフォルトの名無しさん:2012/07/22(日) 15:50:00.99
const int& unkoならいける
681デフォルトの名無しさん:2012/07/22(日) 15:51:14.44
なんでインデクスは符号無しなんだろうな
計算でインデクス出して負になったときに
符号ありなら簡単にチェック出来るのに
符号なしだと単に大きなインデクスを指定したのと区別がつかないから欠点だろ
682デフォルトの名無しさん:2012/07/22(日) 15:55:55.89
>>680
const かぁ・・・
思い切り下の方ではいじる気満々なんだよな
あきらめるわ。 ありがとう。
683デフォルトの名無しさん:2012/07/22(日) 15:57:29.02
>>678
size_t残してたらキャストしないといけないところが他にも出てきたりしてウザイだろ
684デフォルトの名無しさん:2012/07/22(日) 15:57:35.67
>>681
unsignedじゃないとメモリを全部指せなくない?
メモリアドレスより大きい型使えればいいんだけど・・・。
685デフォルトの名無しさん:2012/07/22(日) 15:59:09.80
>>679
int hoge() { int unused; return hoge(unused); }
686デフォルトの名無しさん:2012/07/22(日) 16:00:53.65
>>684
63bitもあれば十分だろ
687デフォルトの名無しさん:2012/07/22(日) 16:02:35.17
>>684
そんな状況は value_type が (signed/unsigned) char の vector か vector<bool> でしか
ありえないわけで、あんまり強い根拠だとは思えないなぁ。
688デフォルトの名無しさん:2012/07/22(日) 16:04:50.82
まー、言語仕様っちゅうもんは今だけ良ければイイっていう観念で作ってるわけでは無いからね。
689デフォルトの名無しさん:2012/07/22(日) 16:33:06.24
>>681
そもそも負の値があっちゃいかんから、
負の値を渡すなという意味合いでもある。
明示的なキャストが無い場合警告を出すことで凡ミスを検知できる。
負の値を使いたい計算なら計算結果にoff_tなんか使えばいい。
690デフォルトの名無しさん:2012/07/22(日) 16:38:46.41
大き過ぎる値渡したらチェック出来ない(結局メモリ循環して負の位置にアクセス)から意味ない
という主張は昔は正しかったかも知れないが今はCPU側に保護機能あるから大丈夫っしょ
691デフォルトの名無しさん:2012/07/22(日) 16:47:07.76
初期化子って継承できないの?
692デフォルトの名無しさん:2012/07/22(日) 16:47:20.08
>>689
http://stackoverflow.com/questions/10168079/why-is-size-t-unsigned

> Bjarne Stroustrup wrote in The C++ Programming Language:
>
> The unsigned integer types are ideal for uses that treat storage as a
> bit array. Using an unsigned instead of an int to gain one more bit to
> represent positive integers is almost never a good idea. Attempts to
> ensure that some values are positive by declaring variables unsigned
> will typically be defeated by the implicit conversion rules.

> Another relevant article by Scott Meyers is here <http://www.aristeia.com/Papers/C++ReportColumns/sep95.pdf>.
> To summarize, he recommends not using unsigned in interfaces,
> regardless of whether the value is always positive or not. In other
> words, even if negative values make no sense, you shouldn't
> necessarily use unsigned.
693デフォルトの名無しさん:2012/07/22(日) 16:47:51.98
>>691 C++でおk
694デフォルトの名無しさん:2012/07/22(日) 16:49:01.93
>大き過ぎる値渡したらチェック出来ない
そもそもこれに意味があるのか判らんな。
負だろうが正だろうが、範囲チェックするならするし、
しないならしないだろうから結局変わらんだろ。
あと、unsignedならsignedと違って0下回った時シグナルとかで検知できるぞ。
695デフォルトの名無しさん:2012/07/22(日) 16:50:40.91
>>681
計算結果が負になった時だけチェックできても中途半端だよ。
ちゃんと上限もチェックしようよ。
696695:2012/07/22(日) 16:53:44.12
かぶった...

>>694
> あと、unsignedならsignedと違って0下回った時シグナルとかで検知できるぞ。

kwsk
697デフォルトの名無しさん:2012/07/22(日) 16:53:54.74
>>693
なんかそんなメンバー無いって言われる
698デフォルトの名無しさん:2012/07/22(日) 16:55:17.70
>>694
変わらんならsigned使えよ。まともに引き算できないunsignedウザイから。

> あと、unsignedならsignedと違って0下回った時シグナルとかで検知できるぞ。
値がラップするだけのはずだけど、どういうこと?
699デフォルトの名無しさん:2012/07/22(日) 16:56:04.47
>>697 C++でおk
700デフォルトの名無しさん:2012/07/22(日) 16:59:23.02
アセンブラならキャリーフラグが立つ
701デフォルトの名無しさん:2012/07/22(日) 17:04:13.48
>>696
例えば、OSによるけどFPE_OVERFLOWとか。浮動小数点数でも無いのに飛んでくる。
http://docwiki.embarcadero.com/RADStudio/ja/Signal%EF%BC%88C_RTL%EF%BC%89
702デフォルトの名無しさん:2012/07/22(日) 17:05:18.15
>>698
>値がラップする
どういう意味?
703デフォルトの名無しさん:2012/07/22(日) 17:06:30.62
>>698
俺に言われても困る。C++の標準委員会とかそのへんに言えよ。
704デフォルトの名無しさん:2012/07/22(日) 17:11:42.70
>>701
> FPE_INTOVFLOW および FPE_INTDIV0 シグナルは整数演算によって生成され,その他は浮動小数点演算によって生成されます。
FPE_OVERFLOW は飛びませんね。
FPE_INTOVFLOW も signed だけでしょう。
705デフォルトの名無しさん:2012/07/22(日) 17:12:48.76
>>702
unsigned int x = -1 とすれば x は UINT_MAX になるものと規格で定められている。
706デフォルトの名無しさん:2012/07/22(日) 17:15:25.76
自分でコンテナ書くときはintで書いてしまうな
どうせ大きいインデックスなんて設計ミスしなきゃ使わないし
仮に使うとしてもインデックスをクラスで置き換えたBigVectorみたいなの作るし
707デフォルトの名無しさん:2012/07/22(日) 17:20:21.54
>>703
今さら標準を変えるほど大きな問題ではない。問題ないとわかってるアプリ側で
signedにキャストすれば十分。

問題は標準コンテナがunsignedを使ってるからって自作のコードでもunsignedを
使いまくるやつら。
708デフォルトの名無しさん:2012/07/22(日) 17:21:19.29
>>701
FPE_ の意味わかってる?
709デフォルトの名無しさん:2012/07/22(日) 17:24:24.50
普通に unsigned 使うだろ。

> まともに引き算できないunsigned

なんて言ってる奴は、自分からアホ公言してるのと同じだし。
710デフォルトの名無しさん:2012/07/22(日) 17:27:04.07
>>704
そうね間違えたFPE_INTOVFLOW。
>FPE_INTOVFLOW も signed だけでしょう。
試してみたら?
711デフォルトの名無しさん:2012/07/22(日) 17:32:45.90
>>710
まずは unsigned 整数に負の値を入れてシグナルの発生を確認したコードを貼ってくれ。
712デフォルトの名無しさん:2012/07/22(日) 17:35:09.98
Unsigned Integerについて

教科書を書いている人のなかには、負にならない数値を表現するのに unsigned 型を使うことを推奨している人たちもいます。これは自己文書化のためです。
しかしCの場合には、実際のところ文書化するメリットよりもバグを引き起こすデメリットの方が上回ります。次の例を考えてみましょう。

for (unsigned int i = foo.Length()-1; i >= 0; --i) ...

このコードは止まりません。gccはこの種のバグに気づいて警告してくれることもありますが、気づいてくれないことも多々あります。
signed と unsigned を比較するときにも同じくらいひどいバグを引き起こすおそれがあります。つまり、Cの型昇格の仕組みによって、unsigned 型は期待と異なる動作をするおそれがあるのです。

したがって、変数が負でないことを示すにはアサーションを使ってください。unsigned 型を使ってはいけません。
713デフォルトの名無しさん:2012/07/22(日) 17:36:11.77
714デフォルトの名無しさん:2012/07/22(日) 17:45:31.36
>>699
解説もとぬ
715デフォルトの名無しさん:2012/07/22(日) 17:48:19.19
>>714
(お前の日本語では何を相談しようとしてるのかさっぱりわからんから問題の)C++(ソースコードとコンパイラからのエラーメッセージ)で(問題を示せば)おk
716デフォルトの名無しさん:2012/07/22(日) 17:51:12.42
>>710
unsignedでシグナル飛んだら規格違反じゃないの?
717デフォルトの名無しさん:2012/07/22(日) 17:52:37.37
>>712
foo.Length( ) が 0 になるかも知れないのに

> unsigned int i = foo.Length()-1;

なんていうコードを書く人は、どうせ他のところでもバグるので unsinged 云々の話じゃないと思う。
718デフォルトの名無しさん:2012/07/22(日) 17:57:57.00
>>717 signedならfoo.Length()が0だろうが何の問題も無いコードなのに、何言ってるの?
719デフォルトの名無しさん:2012/07/22(日) 17:59:06.61
つっこんだ順序がなんとなく保持されるような連想配列mapってある?
720デフォルトの名無しさん:2012/07/22(日) 18:01:39.63
Cはその辺きちんと理解できてその手の下らないバグを入れることが無い人のための言語。
それが出来ないならBASICでも使ってろカス
721デフォルトの名無しさん:2012/07/22(日) 18:03:45.90
>>705
え?オーバーフローとアンダーフローって未定義じゃないの?
722デフォルトの名無しさん:2012/07/22(日) 18:03:53.01
>>719
直接そのものは無いけどmap<Key,list<Value>>でいいんじゃないの?
723デフォルトの名無しさん:2012/07/22(日) 18:04:05.95
unsignedって使わないようにしてる
724デフォルトの名無しさん:2012/07/22(日) 18:05:53.65
>>719
作れるだろ?。
map<T,U>なところを
map<T,pair<U,int>,COMP>に、pairの後ろのintはつっこんた順にインクリメント、
COMPはpairの後側で比較、取り出すところはit->secondを*it->second.secondにすればよかろ。
725724:2012/07/22(日) 18:07:14.34
>>724訂正:
×取り出すところはit->secondを*it->second.secondにすれば
→取り出すところはit->secondを*it->second.firtにすれば
726デフォルトの名無しさん:2012/07/22(日) 18:19:09.53
>>721
signedの演算についてはそうだけど、unsignedについてはそもそもオーバーフローというものが
起こらないことになっている。
3.9.1/4
> Unsigned integers, declared unsigned, shall obey the laws of arithmetic modulo 2n where
> n is the number of bits in the value representation of that particular size of integer. *46
...
> 46) This implies that unsigned arithmetic does not overflow because a result that cannot
> be represented by the resulting unsigned integer type is reduced modulo the number that
> is one greater than the largest value that can be represented by the resulting unsigned
> integer type.
727デフォルトの名無しさん:2012/07/22(日) 18:23:19.42
>>718
>>>717 signedならfoo.Length()が0だろうが何の問題も無いコードなのに、何言ってるの?

そういうことを言いたいのではなく、変数の取りえる範囲を考えずにコーディングする奴は馬鹿だってこと。

何でもかんでも考えなしに signed にすれば OK なんて思って奴はマ辞めた方がいい。
728デフォルトの名無しさん:2012/07/22(日) 18:30:09.83
>>727
誰も「変数の取りえる範囲を考えずにコーディングする」とも「何でもかんでも考えなしに signed にすれば OK」とも言ってないよ。
値の範囲を考えた上で、signedで問題ないところはsigned使えって話。
729デフォルトの名無しさん:2012/07/22(日) 18:41:04.81
>>728
> 誰も「変数の取りえる範囲を考えずにコーディングする」

unsigned int i = foo.Length()-1; は、範囲を考えずにコーディングしているとしか思えないけど。

> 「何でもかんでも考えなしに signed にすれば OK」とも言ってないよ。

だったら、どう考えればいいかを書かないとダメでしょ。

>値の範囲を考えた上で、signedで問題ないところはsigned使えって話。

それなら、「値の範囲を考えた上で、unsignedで問題ないところはunsigned使えって話。」でも
同じだが。
730デフォルトの名無しさん:2012/07/22(日) 18:47:20.61
n分木みたいな構造のものを
端から順に返すイテレータってどうやって書けばいいか
どっかにサンプルとかある?
731デフォルトの名無しさん:2012/07/22(日) 18:57:53.91
>>729
> unsigned int i = foo.Length()-1; は、範囲を考えずにコーディングしているとしか思えないけど。
-1になるからここではunsigned使うわけがないってことか?
気付いてるかどうかわかんないけど、-1が無くてもバグってるからね。

> それなら、「値の範囲を考えた上で、unsignedで問題ないところはunsigned使えって話。」でも
> 同じだが。
どちらでも問題ないところでも、unsignedを使うと上でいろいろ挙げられてるようにデメリットが大きい。
だからなるべくsignedを使えって話。
732デフォルトの名無しさん:2012/07/22(日) 19:00:06.92
>>711
http://codepad.org/GoZTWEPM
ハードウェアのオプションしないと符号付きだろうが
符号なしだろうが反応しねぇなぁ
733デフォルトの名無しさん:2012/07/22(日) 19:03:24.24
gnu系だと-ftrapが使えないと使えんからな
734デフォルトの名無しさん:2012/07/22(日) 20:02:54.77
>>732-733
オプションさえつければシグナル発生するの?
735デフォルトの名無しさん:2012/07/22(日) 20:10:19.08
http://en.wikipedia.org/wiki/SIGFPE
> In C, SIGFPE (or any other signal) will never be issued for unsigned integer types. These are guaranteed by the C standard to wrap around silently.
ですよねー
736デフォルトの名無しさん:2012/07/22(日) 20:17:47.93
>>730
直接的ではないけどboost.graphの深さ優先探索かな。
visitorで実現できるけどiterator化するのは少し難しい。
できないことはないけどややこしいだけだよ。
737デフォルトの名無しさん:2012/07/22(日) 20:22:54.37
>>731
> -1になるからここではunsigned使うわけがないってことか?

というか、-1 になることを気づいていないんじゃないかと。
まあ、本当のところはコード書いた本人に聞くしかないけど。

> 気付いてるかどうかわかんないけど、-1が無くてもバグってるからね。

i >= 0 のことならわかるけど、これも unsigned の値の範囲を考えればわかる話しだろ。
それ以外にあるなら、具体的に書いてくれ。

>どちらでも問題ないところでも、unsignedを使うと上でいろいろ挙げられてるようにデメリットが大きい。
>だからなるべくsignedを使えって話。

問題ないのに、デメリット?
君の主張は、よく考えなくても問題ないケースが多いから signed の方がメリットあると言う風にしか
思えないけど。
よく考えても、unsigned の方がデメリットあると言うなら、具体例 plz
738デフォルトの名無しさん:2012/07/22(日) 20:41:58.61
>>737
値の範囲について signed, unsignged どちらでも問題ないところでも、 unsigned を使うと
暗黙変換の残念なルールにより間違いが起こったりコンパイラの警告を黙らせるための
汚い回避策を講じないといけなくなるなど、デメリットが多い。
739デフォルトの名無しさん:2012/07/22(日) 20:43:08.33
ゲームのタイトルメニューを作成しているのですが、
いくつかあるメニューの中で何か1つ選択したときそこだけを拡大して表示する方法のヒントをご教授願いたいです。
740デフォルトの名無しさん:2012/07/22(日) 20:59:59.11
>>734
したりしなかったりするよ。実装依存。Cの仕様が云々上で言ってたりするがCは関係ない。
そもそもハード依存でCの機能じゃないからCPUとコンパイラーが対応してるかどうか次第。
コンパイラーが対応してなくてもアセンブリでスイッチ入れられるものもあるらしいがそっちは知らん。
741デフォルトの名無しさん:2012/07/22(日) 21:00:24.67
>>736
ありがとう
iteratorの勉強をするときのネタとして自分への宿題とするわ
742デフォルトの名無しさん:2012/07/22(日) 21:12:46.07
>>740
ハード依存で整数オーバーフローに対してシグナルが発生するとしたら
C,C++コンパイラはunsignedについてそれを避けるようにコンパイルする義務が
あるように読めるのだが。 >726
743デフォルトの名無しさん:2012/07/22(日) 21:15:22.72
>>740
unsignedの演算結果について実装依存や未定義の部分は無いのだから、
そんな動作をすると規格準拠のコンパイラとして認められないだろう。

で、例えばどのコンパイラがどんなスイッチでそんな動作をするの?
744デフォルトの名無しさん:2012/07/22(日) 21:16:03.50
SPARCとかPOWER PCとか現実がそうなんだから知らんがな
745デフォルトの名無しさん:2012/07/22(日) 21:18:36.95
>>744 現実だと言うのならコンパイラとオプションとコードの組み合わせを示せよ。
746デフォルトの名無しさん:2012/07/22(日) 21:27:19.91
>>745
コンパイラ以外は既に出てるがな
gccでもftrapサポートしてるかfpu_flags関数使えると行けるぞ
fpu_flagsはgcc固有じゃなくOSとハードウェア固有だけど
747デフォルトの名無しさん:2012/07/22(日) 21:27:59.95
>>737 何でそんなにunsigned使いたいの?
748デフォルトの名無しさん:2012/07/22(日) 21:33:30.47
>>746
http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Option-Summary.html
http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Code-Gen-Options.html
> -ftrapv
> This option generates traps for signed overflow on addition, subtraction, multiplication operations.
これのこと?・・・じゃないよね?
"ftrap"って何?
749デフォルトの名無しさん:2012/07/22(日) 21:34:37.18
超下品ゲーム作ってたんですが、肛門からでてくるものでおならクラスとげりクラスとうんこクラス、うんこにはまきぐそクラスと垂れ流しうんこと太巻うんこがあります。
750デフォルトの名無しさん:2012/07/22(日) 21:37:39.40
>>746
http://www.google.co.jp/search?q=%22fpu_flags%22
"fpu_flags関数"とやらも検証できない。
751デフォルトの名無しさん:2012/07/22(日) 21:40:18.47
>>748
じゃないな。こっちもググったけどでてこないし。実機のmanぐらいにしか乗ってないんだろうな。
752デフォルトの名無しさん:2012/07/22(日) 21:44:49.64
まーそんな処理系があっても規格違反なんだろ?ここでは論外。
753デフォルトの名無しさん:2012/07/22(日) 21:47:57.54
>>746 なんでコンパイラは示されないの?
754デフォルトの名無しさん:2012/07/22(日) 22:03:37.35
>>748
-ftrapvって結構危険よ。今は知らないけど昔は加算とか取りこぼしてた。
755デフォルトの名無しさん:2012/07/22(日) 22:04:25.03
>>753
gccはコンパイラの名前じゃなかったのか・・・
756デフォルトの名無しさん:2012/07/22(日) 22:12:33.61
WindowsもってないんだけどEXCEPTION_INT_OVERFLOWって符号付きのみだっけ?
757デフォルトの名無しさん:2012/07/22(日) 22:30:34.15
>>752
んなこと言い出したらスレッドセーフとかって話も論外だろうし
環境依存しないオーバーフロー検知なんて無理だって

あと、オーバーフローが検知できりゃsignalじゃなかろうがなんでもいいんだろ
758デフォルトの名無しさん:2012/07/22(日) 22:52:01.65
>>757
C++03までの規格でスレッドセーフを語ることは確かにこのスレにとっては論外だ。
C++11により、規格に沿ってdata raceの有無を語ることができるようになった。
環境依存しないオーバーフロー検知なんて話は誰もしていない。
759デフォルトの名無しさん:2012/07/22(日) 22:57:48.54
>>738
> 暗黙変換の残念なルール

だから、具体的に書いてよって言ってるんだが。

>>747
考えなしに singed 使うのがおかしい、と言ってるだけだが。
760デフォルトの名無しさん:2012/07/22(日) 23:09:58.75
>>759
unsigned int ichi = 1;
assert(ichi > -1); // fails
assert(ichi - 2 == -1); // fails
761760:2012/07/22(日) 23:10:59.75
> assert(ichi - 2 == -1); // fails
ん?こっちは通るか。ごめん。
762760:2012/07/22(日) 23:17:43.65
これでいいか。
assert(ichi - 2 < 1); // fails
763デフォルトの名無しさん:2012/07/22(日) 23:18:04.41
unsigned 使ってて、-1 の値と比較しておかしくなるとか…

「値の範囲を良く考えて」も、そんなコード書いてるのか?
764デフォルトの名無しさん:2012/07/22(日) 23:22:21.11
>>760
普通こうじゃね?
int f(unsigned a, unsigned b)
{
 assert( a < a + b );
 return a + b;
}
765デフォルトの名無しさん:2012/07/22(日) 23:23:41.24
>>763
考えるべき「値の範囲」ってのが変数や関数の値域のことならまだわかるが、
その値を使った演算すべての値の範囲を考えろと言われても無理だろ。
766デフォルトの名無しさん:2012/07/22(日) 23:37:36.19
>>765
> その値を使った演算すべての値の範囲を考えろと言われても無理だろ。

「演算すべての値」というのが意味不明だが、演算結果と仮定して、
演算結果の範囲もわからんままコード書いてるということなのか?
767デフォルトの名無しさん:2012/07/23(月) 00:03:58.99
>>766
例えば何かのクラスで「サイズ」を返す関数を設計するとき、戻り値が負になることが無い
のはわかってるから unsigned にしたとする。

クラス利用者が「a のサイズから b のサイズを引いて N より小さくなるとき」という仕様に
対してこんなコードを書いたとする。
 if (a.size() - b.size() < N) ...
このコードは a.size() < b.size() の場合に正しく動かない。

最初の unsigned の選択を守ったまま正しく動くようにコードを変形することもできるけど、
仕様とコードは乖離するし、同様の問題が他の利用箇所にもあることは十分考えられるので
根本的な解決とは言い難い。

最初の設計時点でこのような利用をされることが「無い」と判断することは不可能なので、
別途特別な理由が無い限りは signed にしておいたほうが経済的。
768デフォルトの名無しさん:2012/07/23(月) 00:05:28.86
>>730
boostのxmlパーサあたりとか同じような感じじゃね。使い方とか調べるの面倒くさいけど。
769デフォルトの名無しさん:2012/07/23(月) 00:35:28.59
標準ライブラリがsize()でunsigned返す件について
770デフォルトの名無しさん:2012/07/23(月) 01:05:21.50
ぶっちゃけfor分のループカウンタがunsigned か signedかなんでどうでもいい。

これを考慮してナントカする必要を感じるのは、この程度の違いで大問題を引き起こす新人に
なにかさせる場合だけだな。
771デフォルトの名無しさん:2012/07/23(月) 01:39:09.31
>>769
そこは禿も設計ミスだと認めておる。
http://www.stroustrup.com/Programming/25_embedded.ppt
> - You can’t completely avoid unsigned arithmetic
> - Indexing into standard library containers uses unsigned
> (in my opinion, that’s a design error)
772デフォルトの名無しさん:2012/07/23(月) 07:07:36.32
ポインタに加算して使うインデックスをsigned整数で扱うと値が小さい負数になったときに実行時エラーが出ない可能性がある。
unsignedなら極度に大きい値になるので多分segmentation faultが出るだろう。
773デフォルトの名無しさん:2012/07/23(月) 08:21:02.36
>>772
(´Д`)ハァ…
774デフォルトの名無しさん:2012/07/23(月) 10:41:33.49
>>770
馬鹿だろ
この程度で大問題を引き起こす言語だからこそ
プロでも数年に1度はやっちゃうし、その上
見つけにくくて困るんだよ
775デフォルトの名無しさん:2012/07/23(月) 12:08:17.92
signedで扱える範囲なのに負は扱わないからunsignedでカウントしよう
なんて考えること自体が馬鹿
プロなのにこの程度の問題を数年に1度やっちゃう奴は…
776デフォルトの名無しさん:2012/07/23(月) 12:19:27.19
プロなら安全な整数クラスで置き換えるだろ
777デフォルトの名無しさん:2012/07/23(月) 12:36:52.94
size_t max = sizeof(hoge);
for(int i=0; i<max; i++)...
みたいなので警告でて
for(size_t i=0; i<max; i++)...
と書き直すときの敗北感
778デフォルトの名無しさん:2012/07/23(月) 13:07:26.11
size_t と ptrdiff_t の使い分けを真面目に考えるとややこしい
779デフォルトの名無しさん:2012/07/23(月) 13:24:22.12
int setOppai( int oppai, bool chinko )

oppaiをセットするとき、ついでにchinkoもセットするんだけど
引数でchinkoが省略されているときは なにもしないようにしたい
どうしたらいいかな
素直に別関数作った方がいいのかな
780デフォルトの名無しさん:2012/07/23(月) 13:27:10.45
ttp://ideone.com/Q5Iy9
こんな場合はsize_tにしづらいな
出来なくはないけど
781デフォルトの名無しさん:2012/07/23(月) 13:40:35.92
size_tはC/C++界最悪の発明
782デフォルトの名無しさん:2012/07/23(月) 13:47:57.93
ttp://ideone.com/T9EG5
あえてsize_tにするとこうなる
783デフォルトの名無しさん:2012/07/23(月) 15:47:03.36
ちょっとした再帰をしたいときに引数に関数定義したいんだけど
どうしたら簡潔に書ける?
784デフォルトの名無しさん:2012/07/23(月) 16:03:35.48
ん?
再帰関数に関数ポインタ食わせる話?
785デフォルトの名無しさん:2012/07/23(月) 16:04:22.98
テンプレート
786デフォルトの名無しさん:2012/07/23(月) 17:55:12.65
引数に関数定義ならラムダ的なものじゃね?
787675:2012/07/23(月) 18:00:39.81
size_tて結構初歩的な問題抱えてるのね。勉強になったthx
長さ系の引数はとりあえずsize_tで統一しとくわ
788デフォルトの名無しさん:2012/07/23(月) 19:16:33.94
暗銀は魔法もカット率100%だよ
789デフォルトの名無しさん:2012/07/23(月) 20:05:22.68
size_tはunsigned long long相当で大きくて遅いコードになったりするからなぁ。
790デフォルトの名無しさん:2012/07/23(月) 20:06:12.76
ちょっくらコンビニ行ってくる
.         △                  △
..----━━=≦[]≧=━━----  .----━━=≦[]≧=━━----
        〔  ]_. . п        п  _[  〕  
.         { ≡|-二二二/ ̄ ̄\二二二-|≡ }
.         [II/   ∪^|ロ□|□ロ|^∪   ヽII]
                lロ  ⌒ ロl
               (._。○。_)
791デフォルトの名無しさん:2012/07/23(月) 20:54:08.56
>>788です。誤爆しました。すみません。
792デフォルトの名無しさん:2012/07/23(月) 21:21:01.04
>>777
W3 ですねわかります
793デフォルトの名無しさん:2012/07/23(月) 21:40:03.89
for(int i=0; i<hoge.max(); i++)...
っていうのは遅くなるからhoge.max()は外に出せ、みたいな話あるけど
ループ外に出すと変数使ってうっとおしいんだけどいい方法ある?

って聞こうと思ったけど、やっぱりいいや。
794デフォルトの名無しさん:2012/07/23(月) 21:42:23.43
for( int i = 0, max = hoge.max(); i < max; ++i )
この程度でうっとおしいと思うならしらん
795デフォルトの名無しさん:2012/07/23(月) 21:45:38.74
for(int i=hoge.max(); --i>=0;)...
にする
796デフォルトの名無しさん:2012/07/23(月) 21:55:26.29
やっぱりいいっつってんだろ
797デフォルトの名無しさん:2012/07/23(月) 22:03:26.42
うっせハゲっ
なら最初から書き込むな
798デフォルトの名無しさん:2012/07/24(火) 02:06:54.21
覆水、盆に帰らず。

たまには正月に顔見せに帰ってやれよ。
799デフォルトの名無しさん:2012/07/24(火) 02:52:32.36
抜けた毛は二度と戻らないもんな・・・
800デフォルトの名無しさん:2012/07/24(火) 04:01:06.28
int→floatキャストってなんであんなに速いんでしょうか?
指数部を割り出すのに対数関数使ってるかと思うんですがlog(x)一回より何倍も速いし。
801デフォルトの名無しさん:2012/07/24(火) 04:13:05.04
>>800
スレ違い。
普通、実数演算ユニット周辺に変換ロジックも実装されている。
802デフォルトの名無しさん:2012/07/24(火) 07:18:11.51
iPhoneが規制されてるので自宅のノートパソコンを経由してにちゃんに書き込むプログラムを作りたいんですがいったいどうすればできるのか検討も付きません
なにかヒントを教えてください
803デフォルトの名無しさん:2012/07/24(火) 07:28:50.71
ノーパソに串鯖立てればいいだろ
804デフォルトの名無しさん:2012/07/24(火) 07:32:40.89
>>802
自宅のノートパソコンに認証付きプロキシ入れてルーターでポート開放
VPNかSSHポートフォワーディング使うとより安全

あとは該当板へ
805デフォルトの名無しさん:2012/07/24(火) 08:01:31.57
ありがとうございます
しかし自分はサーバーの事とかよくわからないので
Cとフリーのライブラリだけでできる方法を知りたいんです
よろしくお願いします
806デフォルトの名無しさん:2012/07/24(火) 08:13:07.93
鯖立ち上げれない人間が作れるとは思えんが
ライブラリ使えばいいってもんじゃないぞ
今はクッキーもハンドルしなきゃならんし
ttp://monazilla.org/index.php?c=6-20
どうしても自作したいならここに書いてる通りにすればいい
通信はC++の範囲外なのであとは適当なスレに行ってくれ
807デフォルトの名無しさん:2012/07/24(火) 09:32:57.16
ドキュメントが山ほどある既存のサーバープログラムのインストールすら出来ない奴が
サーバープログラムを作ろうとするとか茨の道すぎるだろww
808デフォルトの名無しさん:2012/07/24(火) 10:18:34.70
>>807
無線LANルータのプログラムなんて、そんなに文献無いだろ
809デフォルトの名無しさん:2012/07/24(火) 10:22:56.64
>>808
意味不明なんだけど何で無線LANルータが出てきた?
810デフォルトの名無しさん:2012/07/24(火) 10:32:37.73
>>808
丁寧な口調が剥がれてるぞ
知識ないんだったらあるやつの言葉に従っとけ
811デフォルトの名無しさん:2012/07/24(火) 10:34:10.98
みんなネットワークとかどこで勉強してんだ
プログラムの入門書はいっぱいあるのにそういう実践的な技術の本って本屋で見かけないんだけど
812デフォルトの名無しさん:2012/07/24(火) 10:36:51.27
ネットワークの入門書を嫁よ……
検索しろ
813デフォルトの名無しさん:2012/07/24(火) 11:30:08.92
メソッドチェーンってどう思う?

getChinko( index )->SetName("magnum")->SetSize("13cm");

みたいなやつ
例外を使いたくない環境下ではエラーを検知しづらくて
いやなんだけど
814デフォルトの名無しさん:2012/07/24(火) 11:54:17.96
SetSizeを"9cm"で呼び出すとうまく行くかも
815デフォルトの名無しさん:2012/07/24(火) 11:54:18.40
ちんこが見つからなかったときにヌルポインタではなく
自前のヌルちんこを返す ってのがポイントなんだな
816デフォルトの名無しさん:2012/07/24(火) 12:13:05.39
>>813
チェーンにする意味のあるメソッドならそうすればいい
無意味ならやらない方がいい
817デフォルトの名無しさん:2012/07/24(火) 12:25:10.32
ヌルヌルちんこっていいな
818デフォルトの名無しさん:2012/07/24(火) 14:16:40.19
もしかしてオーバーライドした関数って継承されない?
819デフォルトの名無しさん:2012/07/24(火) 14:17:41.08
オーバーライドじゃねいオーバーロードだ
820デフォルトの名無しさん:2012/07/24(火) 14:23:14.11
821デフォルトの名無しさん:2012/07/24(火) 14:25:07.27
オーバーロードの継承を簡潔に書く方法を知りたい
822デフォルトの名無しさん:2012/07/24(火) 16:39:17.84
using method;
823デフォルトの名無しさん:2012/07/24(火) 16:49:19.48
>>821
関数なら普通に継承されるけど
http://ideone.com/74iGM
何に困ってるかソース例書いてみたら?
824デフォルトの名無しさん:2012/07/24(火) 17:23:39.94
Cから移行するのにC++とObjective-Cどっちが難しい?
825デフォルトの名無しさん:2012/07/24(火) 17:25:59.61
cppが無ずいってかごちゃごちゃしててめんどい
826デフォルトの名無しさん:2012/07/24(火) 17:37:05.33
>>824
アップル製品と(Windows or Linux)のPCどっちが好き?
827デフォルトの名無しさん:2012/07/24(火) 17:40:14.91
別にどっちも難しくないよ。
問題は、作りたいものに必要なライブラリ次第だ。
828デフォルトの名無しさん:2012/07/24(火) 17:55:24.97
>>823
あっれー出来たわ
なんで出来ないと思ったんだろおれ
829デフォルトの名無しさん:2012/07/24(火) 18:10:04.67
コンストラクタにvirtualつけれんの?
830デフォルトの名無しさん:2012/07/24(火) 18:21:12.13
>>829
コンパイルエラー
831デフォルトの名無しさん:2012/07/24(火) 18:47:40.43
仮想コンストラクタというテクはあるよ
832デフォルトの名無しさん:2012/07/24(火) 19:17:21.85
>>828
派生クラスでもオーバーロードしたんじゃない?
833デフォルトの名無しさん:2012/07/24(火) 19:40:26.93
>>826
Objective-CもC++もOS関係無いだろ
834デフォルトの名無しさん:2012/07/24(火) 19:42:31.75
>>833
直接関係ないけど、宗教的にはある。
835デフォルトの名無しさん:2012/07/24(火) 19:45:39.71
GNUStepといい、Objective-CはNeXTがMacに移るまで
UNIX系で発展してる言語ではある
むしろAppleとの馴れ初めは短い
836デフォルトの名無しさん:2012/07/24(火) 19:46:51.54
馴れ初めじゃないな付き合いだな
837デフォルトの名無しさん:2012/07/24(火) 21:25:28.63
>>824
CからならObjective-Cのほうが楽

Objective-C++てのもあるぞ
838デフォルトの名無しさん:2012/07/24(火) 21:29:02.25
Objective-C++とか、改悪。。
なぜC++使わずにObjective-C使うのかがわからなくなる
839デフォルトの名無しさん:2012/07/24(火) 21:45:16.39
>>837
え、そうか?
見た目が違うからかもしれないがC++より手こずったぞ
840デフォルトの名無しさん:2012/07/24(火) 21:55:37.73
>Objective-C++

なにそのひし形継承みたいな
841デフォルトの名無しさん:2012/07/24(火) 22:00:09.22
>>838
改悪もクソも移植用のブリッジだろ
アレで本腰入れて開発するつもりか?
842デフォルトの名無しさん:2012/07/25(水) 03:44:29.12
クラスを配列で多数作ると、Array of Structureになってしまいますが、
そこのところをうまく、Structure of Arrayにする方法ってあるのでしょうか?
843デフォルトの名無しさん:2012/07/25(水) 04:01:54.22
>>842 C++でおk
844デフォルトの名無しさん:2012/07/25(水) 04:10:53.34
>>842
`SoAにしたいならすればいい。メンバとして配列を幾つか抱えればいいだけだから、
寧ろ書きやすいと思うが。一体、なにをどう「うまく」やりたいんだ?
845デフォルトの名無しさん:2012/07/25(水) 18:23:54.78
>>842
こういうこと?
ttp://ideone.com/Aypru
846デフォルトの名無しさん:2012/07/25(水) 18:52:08.33
それとも、こういうこと?
ttp://ideone.com/Kup5A

VCの実装だとstd::arrayはスタックに確保される。
初期化ができるのは、デフォルトのコンストラクタが一切定義されてないので、POD構造体の初期化的なことができる。
847デフォルトの名無しさん:2012/07/25(水) 19:11:42.56
>>846
何か警告が出る

..\Array2.cpp: In function 'int main()':
..\Array2.cpp:22:38: warning: missing braces around initializer for 'std::array<Vector<float>, 16u>' [-Wmissing-braces]
..\Array2.cpp:22:38: warning: missing braces around initializer for 'std::array<Vector<float>, 16u>::value_type [16] {aka Vector<float> [16]}' [-Wmissing-braces]
..\Array2.cpp:22:38: warning: missing braces around initializer for 'std::array<Vector<float>, 16u>::value_type {aka Vector<float>}' [-Wmissing-braces]

-std=c++0x付けてるんだが
848デフォルトの名無しさん:2012/07/25(水) 19:12:07.88
あ、コンパイラはgcc4.7.1です
849デフォルトの名無しさん:2012/07/25(水) 19:15:11.71
SoA<Vector<float>, 16> Data = {{{{0.f,}}}};

こうやったら警告なくなった
SoAのVectorのarray[16]で、さらにVectorは要素が4つあるから4重カッコになるのか
850デフォルトの名無しさん:2012/07/25(水) 20:03:36.96
>>849
GCCは使ったこと無いんで正直分からない。すまない。
VCも最近、規格追従度が微妙になってきたしなぁ。参った。
851デフォルトの名無しさん:2012/07/25(水) 21:40:24.41
privateとかpublicとかって、なんて名前?
なんとか識別子?
852デフォルトの名無しさん:2012/07/25(水) 21:49:36.68
しゅーしょくしじゃないの?
853デフォルトの名無しさん:2012/07/25(水) 22:49:19.90
よくわからんでし
854デフォルトの名無しさん:2012/07/25(水) 22:49:27.33
以下によると、アクセス指定子。
ttp://www.geocities.jp/ky_webid/cpp/language/006.html
855デフォルトの名無しさん:2012/07/25(水) 23:17:55.10
アクセス修飾子とアクセス指定子、正しいのはどっち?
856デフォルトの名無しさん:2012/07/25(水) 23:27:30.57
修飾子は修飾対象が必要。
C++の修飾対象とは宣言に伴うインスタンスの事。
だからそれらが当てはまらない指定子が正しい。
857デフォルトの名無しさん:2012/07/25(水) 23:31:11.14
インスタンスってなんぞえtemplateの実体か?
858デフォルトの名無しさん:2012/07/25(水) 23:36:42.94
JIS X3014に従うならアクセス指定子
859デフォルトの名無しさん:2012/07/26(木) 00:39:42.88
クラス宣言の中でだけnamespace使いたいときはどうするの?
860デフォルトの名無しさん:2012/07/26(木) 00:51:31.43
中でusing namespace
861デフォルトの名無しさん:2012/07/26(木) 08:08:27.44
複数のインタフェースを継承させて Observeに利用したいのですが、
メンバ変数の衝突を、どうやって回避しようか悩んでます。

命名規則には、セオリー的なものはあるのでしょうか?
---------------
class IHoge
{
virtual void up()=0;
};
class IHoge2
{
virtual void up()=0;
};
---------------
class A
:public IHoge
,public IHoge2
{
void up(){} //<- どっちかわからない
}

今は hoge_up()とhoge2_up() というメンバ名にすれば良いのかなぁと思ってるんですが、
もっと見栄えの良い方法はありますか?
862デフォルトの名無しさん:2012/07/26(木) 10:32:42.16
>>861
インターフェイス側を変えずに実装する方法の一例
http://ideone.com/xJyi4
863デフォルトの名無しさん:2012/07/26(木) 10:34:13.45
多重継承なんてバグの温床なのにねえ
864デフォルトの名無しさん:2012/07/26(木) 11:20:41.57
a->getChinko() で返ったポインタが使われる前と後を
自動で処理するいい方法ある?

a->getChinko()->lock()->polish()->shoot()->unlock();

a->getChinko()->polish()->shoot();
みたいな感じで済ます方法というか、うまくいえない
865デフォルトの名無しさん:2012/07/26(木) 11:28:18.55
ポインタでなく値を返す
866デフォルトの名無しさん:2012/07/26(木) 11:28:49.13
867デフォルトの名無しさん:2012/07/26(木) 11:32:28.61
>>861
コードまでありがとうございます。
ここまでやらないとダメなのか…。

ミスが起きそうなので、
衝突したらIF側を変える方向でやってみます。

>>863
数人で組むにあたり、ぶつかったらどうしよう・・という流れでした。
868デフォルトの名無しさん:2012/07/26(木) 11:44:35.71
>>864
値を返していいなら
http://ideone.com/sdbpO
869デフォルトの名無しさん:2012/07/26(木) 12:55:41.45
いわゆる循環参照がよくわからん

class A{
public: B unko;
};

class B :public A{
public: int chinko;
};

これってどうすればいいんだっけ
870デフォルトの名無しさん:2012/07/26(木) 13:01:13.46
>>869
諦める。
871デフォルトの名無しさん:2012/07/26(木) 13:07:25.18
やっぱクラスメンバへのアクセスって遅いの?
これマジなら、関数ごとに一時変数を作ってコピーする馬鹿っぽいソースになりそうで嫌なんだけど

http://www2.teu.ac.jp/aqua/GS/Wiki/?Program%20Memo#zcfe8c9f
872デフォルトの名無しさん:2012/07/26(木) 13:13:56.74
>>871
それ、一体何十年前の記事?
60fpsで数百回ってことは、高々秒間一万回前後でしょ。
そんなのんびりした関数で遅いの速いのなんてナンセンスでしょ。
つーか、本気で高速化を検討するなら、実測が基本よ。
873デフォルトの名無しさん:2012/07/26(木) 13:14:03.30
遅いといっても許容できる程度なら考える手間が無駄
それともどんなに手間をかけてでも 1 ナノ秒でも速くしたい?
874デフォルトの名無しさん:2012/07/26(木) 13:20:42.71
>>871
その関数内で大量にループ回してループ内でアクセスするならな
875デフォルトの名無しさん:2012/07/26(木) 13:37:40.95
>>869
ポインタで自己参照体を持つしかない

class B;

class A {
public:
A(B* bp = 0) : unko(bp) {}
B* unko;
};

class B : public A {
public:
B(int i = 0, B* bp = 0) : A(bp), chinko(i) {}
int chinko;
};

int main()
{
B b(123);
b.unko = &b;
A* ap = new A(&b);

std::cout << ap->unko->chinko << std::endl;
std::cout << b.unko->chinko << std::endl;
}
876デフォルトの名無しさん:2012/07/26(木) 13:43:38.50
>>871
件の記事のコードで試してみたけど、差が出ないわ。
つーか、アセンブリ出力見る限り全く同じコードになったよ。
877デフォルトの名無しさん:2012/07/26(木) 13:49:19.67
>>871
そんな事を言っていたら仮想関数の呼び出しはどうなる

それにthisがレジスタに持たれれば関係ないだろ?
x86のようなレジスタが少ないCPUなら少しはコストが掛かるだろうが
x64で最適化を掛けてコンパイルすれば高い確率でthisをレジスタに
してくれるのでは?
878デフォルトの名無しさん:2012/07/26(木) 13:51:27.39
>>877
件の記事の例くらい簡単な内容なら、それすら杞憂ですぜ。>876はx86ですから。
879デフォルトの名無しさん:2012/07/26(木) 14:11:18.67
http://msdn.microsoft.com/en-us/library/ek8tkfbw(v=vs.71).aspx
>with the this pointer being passed via register ECX on the x86 architecture.
ってthiscallのドキュメントにわざわざ明記されてるくらいだしね
880デフォルトの名無しさん:2012/07/26(木) 15:39:07.33
腐ったBCCでもthisをECXに入れたコードが生成された
だいたい>>871のコードは実数をフラグに使っていて、しかも実数の配列を
アクセスしてるんだろ?そしたらレジスタではなく必ずメモリ経由になり、まあ
L2キャッシュに乗る分もあるけど、メモリレイテンシが一番大きいのでthisなんて
コストはかき消されてしまうと思う

VC+SSE2ならこのフラグがXMMに乗ってしまう
で、配列は相変わらずメモリ or L1 or L2アクセス
thisのコストを引き合いに出したいのなら大容量の配列相手ではなく、double
も使わず、もっと整数のメンバ変数を多量に使ったプログラムにすべきだな
881デフォルトの名無しさん:2012/07/26(木) 15:44:29.20
>871のリンク先は学生さんかな?
teuって、パソコン通信の時代は一騎当千の奴が結構いたと思ったんだけどなぁ。
882デフォルトの名無しさん:2012/07/26(木) 16:08:33.82
int A = ( B < C ) ? 1 : 0;

って

int A = ( B < C );

と同じ結果になりますが、
条件判定の結果は1(true時)または0(false時)であることが保証されていますか?
883デフォルトの名無しさん:2012/07/26(木) 16:16:09.64
はい
884882:2012/07/26(木) 16:17:59.35
ありがとうございましたぁ!!!!
885 ◆VD2btbRbPs :2012/07/26(木) 18:43:46.20
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define NODE_NUM 10
#define RAND_SEED 0x1031000
必要な関数・構造体の定義をここに書く
int main(void){
struct BST_Node *T_root;
int i;
T_root=(struct BST_Node*)malloc(sizeof(struct BST_Node));
T_root->left=T_root->right=NULL; T_root->value=0;
srand(RAND_SEED);
for(i=0;i<NODE_NUM; i++){
insert_v(T_root,rand()/(double)RAND_MAX*NODE_NUM*10);
}

木の高さや木の形をここで表示

}
補足 プログラムを書いてくださいますようお願い申し上げます
[3] 環境
[3.1] OS:Windows7
[3.2] bcpad C++
[3.3] 言語:C
二分探索木の高さを調べる実験とその結果
提出期限:7月28日 12時まで
886デフォルトの名無しさん:2012/07/26(木) 18:46:14.75
宿題は宿題スレへ
887デフォルトの名無しさん:2012/07/26(木) 19:02:53.92
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define NODE_NUM 10
#define RAND_SEED 0x1031000
typedef struct BST_Node {
  int value;
  struct BST_Node *left, *right;
} _BST_Node, *P_BST_Node;
void insert_v(P_BST_Node n, int v){
  二分探索木の生育方法をここに書く
}
int main(void){
  P_BST_Node T_root = (P_BST_Node)malloc(sizeof(_BST_Node));
  T_root->left = T_root->right = NULL; T_root->value = 0;
  srand(RAND_SEED);
  for(int i = 0; i < NODE_NUM; i++){
    insert_v(T_root, 10 * NODE_NUM * rand() / (double)RAND_MAX);
  }
  木の高さや木の形をここで表示
}

続きは >>888 さんどうぞ
888デフォルトの名無しさん:2012/07/26(木) 19:06:57.12
馬鹿には無理
889デフォルトの名無しさん:2012/07/26(木) 19:07:51.47
は?しねよ
890デフォルトの名無しさん:2012/07/26(木) 19:09:04.84
宿題は宿題スレへ
891デフォルトの名無しさん:2012/07/26(木) 19:31:46.47
糞コード晒してんじゃねぇよ
892デフォルトの名無しさん:2012/07/26(木) 19:33:13.54

                                             ,r'^''=ァ-
                                        , -、  , -''´_,,r ''"
                      _______.. 、、-ァr|   i´_ ,r'_´__ _ _
                               ̄¨``…=''|-─ヒ!--−… '' "゛´
            il「~lii                        r亠、  |
            ''rへ,、                        |・._    |
 __.. 、、---‐─…!  ├^ー‐_: =====━…         , -| `´   |
  ̄  ̄ ̄  ̄二ニ! ̄ |`¨ ̄                 _,. -1  |¨¨i   |        _
            | 。  ⌒L、         _ , 、-_''´‐''" _,ゝ._|    /7        / `l
          | rz─=,ニ=-─===z二 ̄ _< _,. - ''"   _」  = 「´        /  .|
   .        | ( ' ̄//  ̄`l¨`i  ``T'F ̄    ̄丶. -<´  l凹   |        /   |
            | /´ ̄rュ`'ー┘ ° L0!_    r‐、 ` ''┴==-┴−-、__/   |
        …==i=(_  o  。 °    ロ      ̄ ‐┴-⊥., -‐- 、     _≦'、_   |
             |┘゙コド"−-、- -         _   /F、-、    )イ ̄        ̄´
           ̄ (O  ̄ ̄"``ー- 二 _    ̄  __王ニ-‐ ´ ̄´
                          r !!、 ̄ ¨¨ ̄(.○゙
                          ゙‐'-'
                      //Λ_Λ  | |
                      | |( ´Д`)// <うるせぇ、オスプレイぶつけんぞ
                      \      |
893デフォルトの名無しさん:2012/07/26(木) 19:34:45.65
                ___
               /     \
             / ─    ─ \
            /  (●)  (●) \
              |     (__人__)     | <こいよオラ!!オラ!!
           ,.゙-‐- 、  `⌒´   ,/
        ┌、. /     ヽ ー‐  <.
         ヽ.X、- 、   ,ノi      ハ
      ⊂>'">┐ヽノ〃     / ヘ
       入 ´// ノ        } ,..,.._',.-ァ
      /   `ー''"´      ,'  c〈〈〈っ<
     /          __,,..ノ ,ノヽー'"ノ
      {          ´    /  ``¨´
    /´¨`'''‐、._        ,'\
     ∨´     `ヽ、     ノ   ゙ヽ
      ∨      ヽ _,,..-'"    `ヽ
     ∨       〈-=、.__       }
      ヽ、     }   ``7‐-.  /
          ヽ     リ    /′  ノ
          /′  , {     /   /
        {     !   ,ノ  ,/′
          !    /  /   `‐-、
        !   ,/   ゙ー''' ー---'
          ',  /
        {   }
           ゙Y `ヽ、
            ゙ー--‐'
894デフォルトの名無しさん:2012/07/26(木) 20:19:46.10
あなたが投げたオスプレイは、CVですか?MVですか?
895デフォルトの名無しさん:2012/07/26(木) 21:22:11.15
>>863
多重継承由来のバグって、たとえばどんなの?
インターフェースの多重実装なんてザラだと思うんだけど。
896デフォルトの名無しさん:2012/07/26(木) 21:39:24.16
bool operator==( const char* a ) const;

最後のconstってつけたらダメなの?
897デフォルトの名無しさん:2012/07/26(木) 21:43:13.39
>>895
バグ以前にコンパイルエラーで気づくだろうにな
898デフォルトの名無しさん:2012/07/26(木) 21:46:11.67
>>896
クラス定義内のメンバ関数宣言なら、いいよ。
899デフォルトの名無しさん:2012/07/26(木) 21:55:00.51
>>898
なんかねー、constつけるとエラーになる
900デフォルトの名無しさん:2012/07/26(木) 21:57:55.42
operator内でメンバ書き換えてんだろ
901デフォルトの名無しさん:2012/07/26(木) 22:02:07.68
>>900
書き換えてないんだけどなぁ
まあいいや
constなんていらん
902デフォルトの名無しさん:2012/07/26(木) 22:03:21.83
const付けないプログラマはクソ以下の存在
903デフォルトの名無しさん:2012/07/26(木) 22:03:44.69
C++がキャストを試す順番って規定あるの?
904デフォルトの名無しさん:2012/07/26(木) 22:04:29.85
>>899
相談に乗って欲しいならコードとエラーメッセージを出せ。
905デフォルトの名無しさん:2012/07/26(木) 22:06:20.99
>>903
どんな状況での話?
906デフォルトの名無しさん:2012/07/26(木) 22:22:02.96
c++でOfficeファイルのバージョンを取得する方法知りませんか?
907デフォルトの名無しさん:2012/07/26(木) 22:27:05.03
バイナリ解析してなんとかがんばる
908デフォルトの名無しさん:2012/07/26(木) 22:49:11.44
どこで聞けばいいか分からないからここで聞きます

「Microsoft Visual C++ 2010」を使っているんですが
デバッグ開始ボタンをしてHello worldを出力したら
ちゃんと表示されているかを確認する前にウィンドウが自動で閉じてしまいます
何か設定がおかしいのでしょうか
909デフォルトの名無しさん:2012/07/26(木) 22:49:52.38
Ctrl+F5
910デフォルトの名無しさん:2012/07/26(木) 22:51:35.15
>>908
最後にゲットチャーを書くといいよ
911デフォルトの名無しさん:2012/07/26(木) 22:51:35.49
>>909
ありがとうございます
912デフォルトの名無しさん:2012/07/26(木) 22:54:50.25
おー毎回getchar()かいてたけどcntrl f5、そういうのもあるのか・・・
913デフォルトの名無しさん:2012/07/26(木) 22:55:31.67
ブレークポイントを使うナリよ
ソースコードの左端の灰色になってる所クリックすると赤くなる
914デフォルトの名無しさん:2012/07/26(木) 22:56:32.11
Releaseじゃ動かないナリー
915デフォルトの名無しさん:2012/07/26(木) 22:58:25.58
男は黙ってlog出力
916デフォルトの名無しさん:2012/07/26(木) 23:00:46.45
>>915
でもhelloworldのメッセージを見たいって話だからな
917デフォルトの名無しさん:2012/07/26(木) 23:03:44.71
リダイレクトでファイルに出せばいい
918デフォルトの名無しさん:2012/07/26(木) 23:04:05.64
>>916
それぐらいならパチスロやってれば余裕で見えるだろ
919デフォルトの名無しさん:2012/07/27(金) 00:41:16.22
パチスロとか半島に金が流れるものに金使ってるイケヌマンがいるのはこのスレですか?
920デフォルトの名無しさん:2012/07/27(金) 00:41:54.75
>>918
2chで質問する奴はジャグラーがペカった時に店員を呼んで目押しさせるのと同じ。
921デフォルトの名無しさん:2012/07/27(金) 04:10:30.92
922デフォルトの名無しさん:2012/07/27(金) 09:44:13.82
PrintScreenの動画キャプチャー版を使えば
HelloWorldも捕獲出来るかも知れないぬ
923デフォルトの名無しさん:2012/07/27(金) 16:59:06.10
2つのキーを持つmap がほしいです
2つのキーのうち片方で検索してリストを作るとか
そういうことができるようにしたい
924デフォルトの名無しさん:2012/07/27(金) 17:07:15.26
map<pair<key1, key2>, value>
925デフォルトの名無しさん:2012/07/27(金) 17:11:42.80
>>924
key1で検索した結果のイテレータって、どう書く?
926デフォルトの名無しさん:2012/07/27(金) 18:54:07.65
文字列の配列を作って、そこに検索追加削除をするようなとき
普通は文字列の配列を作るけど
mapみたいに
927デフォルトの名無しさん:2012/07/27(金) 19:15:18.97
>>923
主キーは?
928デフォルトの名無しさん:2012/07/27(金) 19:27:42.71
map<key1, map<key2, value> >にしました。
929デフォルトの名無しさん:2012/07/27(金) 22:29:50.50
ユーティリティクラスって、インスタンスを作られないようにした方がいい?
930デフォルトの名無しさん:2012/07/27(金) 22:31:46.32
>>929
なんでそんなふうに思うの?「ユーティリティクラス」って言われてもよくわからんし。
931デフォルトの名無しさん:2012/07/27(金) 22:34:20.48
>>929
用途によるだろうけど、
複数作ってマズイものはシングルトンにすればいいし、
そうでないものは過度の制限はしなくてもいいんじゃね?
用途はコメントに書いてもらえば多少マシかと・・・。
932デフォルトの名無しさん:2012/07/27(金) 22:38:39.08
シングルトン死ね
933デフォルトの名無しさん:2012/07/27(金) 22:42:29.29
で、でた〜シングルトン全否定やつwww
934デフォルトの名無しさん:2012/07/27(金) 22:50:53.93
まー、シングルトンはグローバル変数とほぼ同じだと思うけど、複数作れないものはしょうがない。
935デフォルトの名無しさん:2012/07/27(金) 22:51:04.31
>>930
Java生まれの用語かと思ったら、Java(Sun)は
コンテナーや簡単なアルゴリズムを提供するクラス群を
ユーティリティと呼んでた。
多分コボラーがクラスで関数を書くために考えた言い訳じゃね?
936デフォルトの名無しさん:2012/07/27(金) 22:59:33.16
>>929
OoWeenies(オブジェクト狂)から言わせればアンチパターンだとよ
http://c2.com/cgi/wiki?UtilityClasses
937デフォルトの名無しさん:2012/07/27(金) 23:06:22.48
>>929
作らない設計の方がいいと思う
938デフォルトの名無しさん:2012/07/27(金) 23:08:00.39
クラスにしないほうがいいと思う
939デフォルトの名無しさん:2012/07/27(金) 23:08:50.62
>>934
中身が不定なI/O用や、中身が変わらないものだとだいぶ違うだろ。
関数の呼び出し先と、呼び出し元の相互で理解が必要な単なるグローバル変数は危険だが、
stdinとか、stdoutは、まず問題にならないからね。

個人的には、Singleton使うぐらいならMono State使うべきだと思う。
SingletonのInstance関数はC++の初期化順序云々の問題を
解決するためのものだけど実際初期化順で困る事ないし。
940デフォルトの名無しさん:2012/07/27(金) 23:08:54.31
C++だと普通に関数提供すればいいわけで、まず要らないな。
941デフォルトの名無しさん:2012/07/27(金) 23:09:39.76
つかJava専用だろ
942デフォルトの名無しさん:2012/07/27(金) 23:11:18.17
わざわざクラス公開しといてインスタンス作れませんとかひとつしか作れませんとか、アホな話だよな。
ならはじめっからクラス公開すんじゃねーよ、と。
943デフォルトの名無しさん:2012/07/27(金) 23:21:38.47
広域関数書けないくせに 10.Log( 10 ); とか書けない
欠陥言語の尻拭いだから・・・
944929:2012/07/28(土) 00:16:24.40
ありがとう
ファクトリメソッドが必要だったんだけど、そうか、普通の関数でいいのか
すっきりした
945デフォルトの名無しさん:2012/07/28(土) 00:21:37.82
ホモですか?
946デフォルトの名無しさん:2012/07/28(土) 01:06:49.31
人間は全員ホモだよ
947デフォルトの名無しさん:2012/07/28(土) 01:08:21.28
シングルトンをshared_ptrで管理して不要になったら削除するようにすると
メモリ効率がいいよ!
948デフォルトの名無しさん:2012/07/28(土) 01:20:10.90
アホか?
949デフォルトの名無しさん:2012/07/28(土) 02:07:36.58
shared_ptrである必要はないっちゃないけどね。

C++あんがい使いこなしてるやついないのはマジで驚くわー。
950デフォルトの名無しさん:2012/07/28(土) 02:23:41.88
シングルトンはまだいいんだけど、
shared_ptr使って、インスタンス生成クラスがインスタンス管理を放棄するようになると、
可読性が落ちない?

集中管理前提で、安全なポインタを分けるってイメージならまだいいんだが。
といいつつ、boostを使ってると使わざるを得ないケースが多々ある・・
951デフォルトの名無しさん:2012/07/28(土) 02:32:24.09
>>950
うちはもう生ポインタ使用禁止になったよ
952デフォルトの名無しさん:2012/07/28(土) 02:43:46.49
ナマポ禁止か・・・
953デフォルトの名無しさん:2012/07/28(土) 10:28:00.45
ゴム必須か・・・
954デフォルトの名無しさん:2012/07/28(土) 10:32:27.44
循環参照にだけは気をつけろよー
955デフォルトの名無しさん:2012/07/28(土) 10:38:26.99
>>953
そこは、もう働くしかないな・・・だろw
956デフォルトの名無しさん:2012/07/28(土) 13:09:10.67
入れ子集合モデルのデータを、テキストに図にして表したいです。
コマンドプロンプトでtreeって入力した時に表示されるフォルダ構成の図が理想です。
お願いします。ご教示ください。
957デフォルトの名無しさん:2012/07/28(土) 13:19:23.81
わざわざC++専用スレで聞かんでもいいがな
勢いがある初心者スレの方が丁寧に教えてくれるぞ
958デフォルトの名無しさん:2012/07/28(土) 13:32:57.06
>>956
入れ子をデーター構造で表現しろよ
959デフォルトの名無しさん:2012/07/28(土) 13:59:45.85
>>956
再帰で書くといいよ
960デフォルトの名無しさん:2012/07/28(土) 14:12:54.18
スタックオーバーフロー

日本語にすると再起不能
961デフォルトの名無しさん:2012/07/28(土) 14:13:59.37
ED=勃起不能
962デフォルトの名無しさん:2012/07/28(土) 14:24:24.29
>>960
たしかにスタックオーバーフローは
再帰不能になるな
963956:2012/07/28(土) 16:13:18.75
自力解決しました。
とても綺麗なソースで自分でも感動。
964デフォルトの名無しさん:2012/07/28(土) 16:44:08.32
multimap のfindで、最初にキーがマッチしたもののイテレータが
返ってくるけど、it++したら次のはマッチするの?
965デフォルトの名無しさん:2012/07/28(土) 16:50:50.89
そういう風にラップしたらそうでしょうね
966デフォルトの名無しさん:2012/07/28(土) 17:04:36.80
>>960
釣りですよね
967デフォルトの名無しさん:2012/07/28(土) 17:11:02.37
基底クラスのコンストラクタを継承したときも必ず呼ばせるように
基底で工夫できることはありますか?
968デフォルトの名無しさん:2012/07/28(土) 17:16:12.26
デフォルトにアサートでもしこんどけば?
969デフォルトの名無しさん:2012/07/28(土) 17:30:41.05
>>967
基底のすべてで共通する処理は関数に書き出しておいてすべてのコンストラクタに呼ばせる。とか??
万能解ってあるんかな??
970デフォルトの名無しさん:2012/07/28(土) 17:35:02.40
>>964
30秒しらべてみたが、
お前が望んでるのはequal_rangeじゃね?
971デフォルトの名無しさん:2012/07/28(土) 17:38:07.92
>>928
遅レスになるけど実際書いてみた
何かすっきりしないな

http://ideone.com/J4KF0
972967:2012/07/28(土) 18:03:11.75
コンストラクタはなんか全部呼ばれますね。

すみませんコンストラクタじゃなくて普通の関数の場合の質問でした。
973デフォルトの名無しさん:2012/07/28(土) 19:54:02.51
基底のコンストラクタに呼び出すように書いておけば
974デフォルトの名無しさん:2012/07/28(土) 20:13:25.99
975967:2012/07/28(土) 20:38:53.65
>>974
ありがとうございました
976デフォルトの名無しさん:2012/07/28(土) 20:39:31.30
クラス名と関数名を両方表示してくれる定義済みマクロって
なんだっけか
977デフォルトの名無しさん:2012/07/28(土) 21:00:03.48
__function__だっけ
gcc拡張だろ
978デフォルトの名無しさん:2012/07/28(土) 21:11:36.93
けんさくぅ〜!けんさくぅ〜〜!!
ttp://wikiwiki.jp/redstrange/?%C4%EA%B5%C1%BA%D1%A4%DF%A5%DE%A5%AF%A5%ED
979デフォルトの名無しさん:2012/07/28(土) 21:11:40.47
ブーストのやつはどうやって実装してんだろう
980デフォルトの名無しさん:2012/07/28(土) 23:02:33.68
ideone.com/huV2b

void* から インターフェースを継承していたら、
インターフェイスのf()を呼び出したいんだけど、どうすればいいでしょうか?

TYPE_Aを作るしかないのかな
981デフォルトの名無しさん:2012/07/28(土) 23:04:50.73
ttp://ideone.com/huV2b
すいません。http抜けてた
982デフォルトの名無しさん:2012/07/28(土) 23:08:11.33
>>978
クラス名がないよ
983デフォルトの名無しさん:2012/07/28(土) 23:08:22.63
それよりqueryInterfaceした方が綺麗だよ
984デフォルトの名無しさん:2012/07/28(土) 23:12:06.95
けんさくぅ〜!けんさくぅ〜〜!!
ttp://stackoverflow.com/questions/1666802/class-macro-in-c

定義済みマクロはC由来だからC++では無いような気がする。
985デフォルトの名無しさん:2012/07/28(土) 23:30:47.25
>>984
typeidはデマングル面倒くさいじゃないですかー! やだー!
986デフォルトの名無しさん:2012/07/29(日) 12:58:10.81
XMLをきれいに整形して出力する出力ストリーム
ってどこかにある?
なんか構文解析とセットになってるのしか見当たらない
987デフォルトの名無しさん:2012/07/29(日) 13:29:45.36
シリアライズ
988デフォルトの名無しさん:2012/07/29(日) 14:41:40.42
コンテナの走査中に追加するのってどうやればいいんだろ
今見てるのを削除するってのはよく見かけるけど
989デフォルトの名無しさん:2012/07/29(日) 14:55:03.45
コンテナの種類や追加削除の仕方によるがなるべくしないようにプログラムを設計するべき
削除はすぐにしないで削除フラグをつけるだけで
追加分はtempコンテナに貯めて置いて
走査が終わったら一気に削除追加するとかね
990デフォルトの名無しさん:2012/07/29(日) 18:59:10.56
元コンテナとと別のコンテナ用意して削除不要な
項目だけコピーすりゃいいだろ。
線形探索で削除していくなら速度面じゃコストは無い。
むしろ早い場合もある位だ(特にベクター)
よっぽどメモリーを消費するような場合じゃなきゃ
別コンテナでいい。
991デフォルトの名無しさん:2012/07/29(日) 19:14:58.86
>>990
次スレよろ
992デフォルトの名無しさん:2012/07/29(日) 19:16:44.79
const static int な変数を継承したいんだけどどうしたらいいかな
993デフォルトの名無しさん:2012/07/29(日) 19:17:42.31
整数ラッパーの継承で我慢しなさい
994デフォルトの名無しさん:2012/07/29(日) 19:18:30.63
CRTPとか
995デフォルトの名無しさん:2012/07/29(日) 19:26:07.99
>>992
もう1つの別な「継承」がテンプレート
996デフォルトの名無しさん:2012/07/29(日) 19:32:00.74
>>992
日本語でいいよ
997デフォルトの名無しさん:2012/07/29(日) 19:32:19.34
なんか問題有る?
ttp://ideone.com/eySV5
998デフォルトの名無しさん:2012/07/29(日) 19:50:37.68
>>997
ありがとう
何も問題なかった
999デフォルトの名無しさん:2012/07/29(日) 19:57:30.81
const static char* はダメか
1000デフォルトの名無しさん:2012/07/29(日) 20:00:36.24
個人でiphoneアプリ、Windowsアプリをマーケットに売って生き残れ

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

派遣屋 IT経営者はその方が喜ぶ 大規模分割開発では使い捨てても独立はできまい 代わりはいくらでもいる 嫌なら辞めろ
若い派遣営業は舐めた態度をとってくる ひどいピンハネ
オープン言語、日本独自開発の言語・フレームワーク ガラパコ携帯 javascript html5 android java linux python rubyやnode.jsとかやめとけ
メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る
コンパイルできないからパクられ  直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ

ここから抜け出すにはiPhone一択 またはWindow 8 Metro App Store(未確) C#
Objective-CやC#を覚えるとサーバーサイドからクライアントサイドまでカバーでき人の多い場所でソフトを売る権利を得られる
仕事や趣味でこれらの言語をやっておけば派遣切りされても会社辞めることになってもソフトを売って生きていける それはセーフティーネットになる
WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみ C#は自分用業務支援ツールとして使える 
例えばPHPでWEBアプリを作っていて管理者画面はC#(EXEアプリ)で作るとかなり早く作れる(Smartyなんか使うよりもかなり早くだ)
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。