トップページ⇒tech
1001コメント276KB

C++相談室 part96

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2012/06/30(土) 13:07:47.91
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/
0002デフォルトの名無しさん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)に対応。
0003デフォルトの名無しさん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
0004デフォルトの名無しさん2012/06/30(土) 13:09:34.44
■Books■
amazon C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
 http://www.amazon.co.jp/b/?node=754384

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714833/ (翻訳)
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
0005デフォルトの名無しさん2012/06/30(土) 13:10:09.27
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/
0006デフォルトの名無しさん2012/06/30(土) 13:14:54.79
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル'
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0007デフォルトの名無しさん2012/06/30(土) 13:34:52.46
>>1++
0008デフォルトの名無しさん2012/06/30(土) 13:40:29.80
>>1++
0009デフォルトの名無しさん2012/06/30(土) 13:52:22.49
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

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

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

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

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

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

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

クラスHogeにはメンバ int kazu と string moji がいて
Hoge a = 1; のときは new Hoge(1) が
Hoge a = "unko"; のときは new Hoge("unko");
が呼ばれるような感じがいいんだけど
0034デフォルトの名無しさん2012/07/01(日) 18:07:21.06
つ[変換コンストラクタ]
0035デフォルトの名無しさん2012/07/01(日) 18:11:59.11
>>33
http://ideone.com/IYrm4
0036デフォルトの名無しさん2012/07/01(日) 19:25:04.37
>>35
ありがとう
なんとなくわかりました
0037デフォルトの名無しさん2012/07/01(日) 19:25:49.03
cout << a << endl;
ってやるとき、 a は何にキャストされようとしているの?
0038デフォルトの名無しさん2012/07/01(日) 19:32:50.14
>>37
cout自体がoperator <<(int Value)とかのオーバーロードを持ってるから、オーバーロード検索でマッチする型を使う。
0039デフォルトの名無しさん2012/07/01(日) 19:59:28.71
STLにバリアント型ってあるってマジ?
0040デフォルトの名無しさん2012/07/01(日) 20:18:13.94
>>39
まだないんじゃね?
BoostにあるAnyっていうライブラリがそれだと思う。
0041デフォルトの名無しさん2012/07/01(日) 20:43:59.20
あるよ
0042デフォルトの名無しさん2012/07/01(日) 21:13:40.61
>>41
え、あるの?どれどれ??
0043デフォルトの名無しさん2012/07/01(日) 21:14:04.22
ないあるよ
0044デフォルトの名無しさん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; }
};

みたいなことをやりたいのですが、メンバ関数テンプレートで定数による特殊化はできないのでしょうか?
0045デフォルトの名無しさん2012/07/01(日) 21:24:34.48
Template ClassだったらDmyのTemplateパラ入れてむりやり突っ込めるけど
C++11より前だと関数の部分特殊化は無理だからねぇ
0046デフォルトの名無しさん2012/07/01(日) 21:28:38.11
>>44
http://ideone.com/CZqo9
「テンプレート メンバ関数 特殊化」でググッたら方法出てきたよ
宣言ごとクラス外に書けってさ
0047デフォルトの名無しさん2012/07/01(日) 22:20:23.95
>>46
ありがとう、できました
0048デフォルトの名無しさん2012/07/01(日) 23:41:33.73
アルファベット禁止な
0049デフォルトの名無しさん2012/07/02(月) 00:51:07.05
下げれないじゃないか。
0050デフォルトの名無しさん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>();} };
だな。
0051デフォルトの名無しさん2012/07/02(月) 08:47:31.52
>>50
変換関数を使う手もあるな
型が曖昧だと無視されたりするから素直じゃない所があるけど
0052デフォルトの名無しさん2012/07/02(月) 10:41:39.05
>>38
もう少し正確に頼むわ
0053デフォルトの名無しさん2012/07/02(月) 11:14:45.67
>>52
http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/
0054デフォルトの名無しさん2012/07/02(月) 12:53:50.79
typedefは別の名前を与えるそうです。
例) typedef void v;
これでvと書けばvoidの意味になります。
それではこれはどうでしょう?
typedef void (*SIG_TYPE) (int);
何に対してどういう名前を与えたのですか?
0055デフォルトの名無しさん2012/07/02(月) 12:55:27.63
intを引き数に取る戻り値のない関数へのポインタであるSIG_TYPE型の宣言。
0056デフォルトの名無しさん2012/07/02(月) 13:00:59.57
>>55
ありがごうございます。
じゃぁ voidに(*SIG_TYPE)(int)という名前を付ける事は出来ないんですね。
そもそも名前に()が入っちゃダメだからそういう心配は要らなさそうですね。
0057デフォルトの名無しさん2012/07/02(月) 13:33:16.90
>>56
形としては、変数宣言と同じだと思っていいよ。
0058デフォルトの名無しさん2012/07/02(月) 13:38:21.69
>>57
ですよね。ありがとうございます。
なんかトークンを置き換えるみたいなイメージがありました…。
0059デフォルトの名無しさん2012/07/02(月) 15:23:11.85
それはマクロで。
0060デフォルトの名無しさん2012/07/02(月) 22:35:54.13
インターフェースクラスって、コンストラクタどうすんの?
書かなくてもいいの?
書いてもすること無いけどさ
0061デフォルトの名無しさん2012/07/02(月) 22:45:13.42
いらないだろ
0062デフォルトの名無しさん2012/07/03(火) 00:45:13.09
書いたところで、どうせ他に純粋仮想関数があるだろうからインスタンスは作れない
0063デフォルトの名無しさん2012/07/03(火) 00:58:20.89
HogeAやHogeBはクラスHogeのサブクラスです。
ストリームを読んで、Aって文字列が来たらクラスHogeAの
Bって文字列が来たらクラスHogeBのオブジェクトをnewして
配列hogelistにどんどん追加していく処理をするとき、
0064デフォルトの名無しさん2012/07/03(火) 01:01:11.31
(続き)
鼻から悪魔を出すにはどうしたら良いでしょうか
0065632012/07/03(火) 01:05:46.85
(続き)
普通はファクトリークラスHogeFactoryとかを作ると思うんですが、
ユーザがHogeの派生がどんどん増やしたときにHogeFactoryを
直接いじらせず、継承させて生産ラインを追加させたいときは
どうしたらかっこういいでしょうか
0066デフォルトの名無しさん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();
}
0067デフォルトの名無しさん2012/07/03(火) 10:24:25.53
>>66
あー、なるほど
これいいかもですね
ありがとうございます
0068デフォルトの名無しさん2012/07/03(火) 13:06:11.88
AndroidNDKでSJISの文書をUTF8に変換する処理を書いているのですが、
環境が違うせいでNDKで動く処理が作れません。
ICU、iconvはコンパイルがうまくいかない。
babelは変換処理が正しく動かない。
マルチバイト確認や変換する関数はNDKでは使えないという感じで、
文字コードをうまく変換するいい手段は無いでしょうか?
0069デフォルトの名無しさん2012/07/03(火) 13:33:09.94
>>68
Android OS&アプリは個人情報ダダ漏れ★9
http://anago.2ch.net/test/read.cgi/smartphone/1335343114/
0070デフォルトの名無しさん2012/07/03(火) 13:37:35.69
>>68
ICU使えって書いてあるらしいからコンパイル頑張れ
https://groups.google.com/forum/#!msg/android-group-japan/kEutty0IWjA/8T4YhZXFqawJ
0071デフォルトの名無しさん2012/07/03(火) 21:05:05.67
vector<Unko> unkolist;
を削除するとき、全要素についてdeleteしたいとき
どうしたらいいの?
0072デフォルトの名無しさん2012/07/03(火) 21:11:15.93
unkolist.clear();
0073デフォルトの名無しさん2012/07/03(火) 21:17:55.34
>>72
clear() を呼ぶと、ついでにUnkoのデストラクタも呼ばれるの?
0074デフォルトの名無しさん2012/07/03(火) 21:19:19.79
当たり前だろ
0075デフォルトの名無しさん2012/07/03(火) 21:32:33.31
下品なネーミングはやめてください。
0076デフォルトの名無しさん2012/07/03(火) 21:37:04.61
>>74
ありがとう
0077デフォルトの名無しさん2012/07/03(火) 23:07:26.09
そしてポインターを格納してメモリーリーク
0078デフォルトの名無しさん2012/07/03(火) 23:08:43.28
>>71
コテを付け忘れてるぞuy
0079デフォルトの名無しさん2012/07/03(火) 23:49:58.74
unkolist.swap(vector<Unko>());
0080デフォルトの名無しさん2012/07/04(水) 00:40:24.15
std::vector<manko> mankoList
0081デフォルトの名無しさん2012/07/04(水) 11:26:16.00
Javaから来たものです。

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

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

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

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

やっぱ飛ばして継承出来るハズだよね
おれのバグとわかってスッキリしたわ直す
0112デフォルトの名無しさん2012/07/05(木) 19:03:03.59
Google C++スタイルガイド 日本語訳
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
0113デフォルトの名無しさん2012/07/05(木) 20:00:00.37
純粋仮想関数なら何か書かないとBのインスタンスは作れない
また継承するのならいいが
0114デフォルトの名無しさん2012/07/05(木) 20:06:16.70
継承したとき、自動的に規定クラスの同じメソッドも
呼ばれるようにしたいときは どうすればいいのかね
呼ばせるのを義務付ける方法とかでもいいや
0115デフォルトの名無しさん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 */ }
};
0116デフォルトの名無しさん2012/07/05(木) 20:22:58.56
>>115
ごめんよくわかんね
0117デフォルトの名無しさん2012/07/05(木) 20:34:10.84
わかれ
0118デフォルトの名無しさん2012/07/05(木) 20:36:39.63
わかめ
0119デフォルトの名無しさん2012/07/05(木) 20:44:46.76
継承先ではfooの代わりにfoo_implをオーバーライドしろてこと?
呼ぶときはfoo()でいいの?
どんどん継承したときはどうなるんだこれ
0120デフォルトの名無しさん2012/07/05(木) 20:46:42.90
こんな感じ??
http://ideone.com/B1tY7

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

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

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

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

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

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

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

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

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

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

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

arc.Archiving( this->member1 );
arc.Archiving( this->member2, 100 );
// 読み込みの際はarcを読み込みオブジェクトに
// 書き込みの際はarcを書き込みオブジェクトにしてやる
0157デフォルトの名無しさん2012/07/06(金) 00:32:21.06
お前は何をいっておるのだ
0158デフォルトの名無しさん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
とエラーが出て、特殊化部分が標準テンプレートとマッチせずおそらくポインタへのポインタの扱いだと思うのですが
どう直せばプログラムが動くでしょうか?
01591582012/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)でしょうかね
0160デフォルトの名無しさん2012/07/06(金) 09:17:32.54
>>159
3じゃなく、sizeof()を使った方が良くない?
0161デフォルトの名無しさん2012/07/06(金) 10:19:42.52
>>160
関数呼び出し部は確かにそうしたほうが良いですね
忠告ありがとうございます
0162デフォルトの名無しさん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;
}
0163デフォルトの名無しさん2012/07/06(金) 21:36:06.85
こんばんは。 私は19歳の女子大生です。

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

class A{
private:
B b;

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

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


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

ラノベのタイトルみたいだな
0171デフォルトの名無しさん2012/07/06(金) 22:53:45.35
女はウンコしない的発想だな
0172デフォルトの名無しさん2012/07/06(金) 23:04:19.93
工学部だが9割男子だっぺよ
0173デフォルトの名無しさん2012/07/06(金) 23:16:07.12
女子だって半田付けするもん
0174デフォルトの名無しさん2012/07/06(金) 23:17:20.88
工学部にくる女子は男好きだっぺよ
0175デフォルトの名無しさん2012/07/06(金) 23:30:48.56
クラス型の関数を作成したとき、関数内で生成したオブジェクトをそのまま返して大丈夫でしょうか。
調べたところ、オブジェクトのコピーが返されて関数にあったオブジェクトは破棄されるらしいのですが、パフォーマンス的にもっと優れた方法はないでしょうか
0176デフォルトの名無しさん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();
}
0177デフォルトの名無しさん2012/07/06(金) 23:33:57.10
>>175
Factoryとかで生成したオブジェクトのポインタならいいっぺよ
ただしスマポに包んでおかないとdeleteする責任の所在があやふやになるっぺ
0178デフォルトの名無しさん2012/07/06(金) 23:50:04.91
>>177
なるほど、そのようにするとパフォーマンスに優れますね。
ありがとうございます!
0179デフォルトの名無しさん2012/07/07(土) 03:14:31.30
>>176
gdbでお願いします
0180デフォルトの名無しさん2012/07/07(土) 09:22:21.44
gdbってtypeinfoに対応してたっけ?
0181デフォルトの名無しさん2012/07/07(土) 09:54:21.87
>>180
してる
0182デフォルトの名無しさん2012/07/07(土) 09:55:14.04
え、してたっけ?昔使って期待通りの結果が得られなかったから使い物にならなかった記憶が。
0183デフォルトの名無しさん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に変わった時に
初めて表示されるようだ
0184デフォルトの名無しさん2012/07/07(土) 11:50:18.47
大学でプログラミングやってる女なんて
大概商業高校出身だろ
0185デフォルトの名無しさん2012/07/07(土) 14:10:01.92
時代は農学部だからな
0186デフォルトの名無しさん2012/07/07(土) 14:31:29.19
のうりん!
0187デフォルトの名無しさん2012/07/07(土) 15:29:25.24
もやしもん!
0188デフォルトの名無しさん2012/07/07(土) 15:33:34.45
>>163
Aが仮想関数を持っているなら
(gdb) set print object on
して
(gdb) whatis a
や
(gdb) ptype a
でわかる
0189デフォルトの名無しさん2012/07/07(土) 15:50:09.84
リテラル文字列の文字コードはソースコードを保存したときの文字コードですか?

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

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

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

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

間接参照 ⊇ { ポインター, ハンドル, ディスクリプター, リンク, 他・・・ }
0271デフォルトの名無しさん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);
プログラムの中にこんなソース仕込んだら、プログラムがエラー無しでストップするようなエラーが出るようになったんだけど、
これってやっぱりダメなのかな?
それともこれとは全く別の所にミスがあってプログラム止まってるのかな?
02722712012/07/09(月) 23:36:11.99
すまん。2回目のmalloc後にcSize = size;を入れてくれ
0273デフォルトの名無しさん2012/07/09(月) 23:58:44.12
ステップ実行とかさ、ログ吐くとかさ、なんかしようよ
0274デフォルトの名無しさん2012/07/10(火) 00:00:10.82
ステップ実行てなんですか?
0275デフォルトの名無しさん2012/07/10(火) 00:10:36.78
VC++でデバックモードならブレークポイントでとめたあとF10を押すと1行ずつ実行できる
0276デフォルトの名無しさん2012/07/10(火) 00:13:08.40
>>271
お前のようなゴミカスには無理
0277デフォルトの名無しさん2012/07/10(火) 00:54:04.11
>プログラムがエラー無しでストップするようなエラーが出る
なんだこれ。
0278デフォルトの名無しさん2012/07/10(火) 00:56:55.40
>>271
それ、どう考えてもcSize < sizeじゃないのか?
sizeがcSizeを上回ると確実に破綻するぞ。
0279デフォルトの名無しさん2012/07/10(火) 00:57:33.27
>>277
スタックオーバーフローとかでよく見るけど、メモリースマッシュかも知れないし、0割かも知れない。
0280デフォルトの名無しさん2012/07/10(火) 00:59:30.00
エラーなしでエラーが出るってのが意味わかんね。
0281デフォルトの名無しさん2012/07/10(火) 01:00:33.27
エラーがないのがエラー、それがゴールデンエラーレクイエム
0282デフォルトの名無しさん2012/07/10(火) 01:05:48.86
なんだその鎮魂歌。

要は、メッセージを伴わないエラーと言いたいのかそうでないのかはっきりしろと。
0283デフォルトの名無しさん2012/07/10(火) 01:16:31.61
SIGたんだろ
0284デフォルトの名無しさん2012/07/10(火) 04:30:52.33
挽歌
0285デフォルトの名無しさん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)

お手数ですがよろしくお願いします。
0286デフォルトの名無しさん2012/07/10(火) 08:24:18.86
>>285
どうみても言語スレ向けのネタじゃないだろ。
アルゴリズムスレ辺りじゃねぇの。
0287デフォルトの名無しさん2012/07/10(火) 09:29:06.69
>>269
iostreamに限定してねぇよ
リソース一般の話だ
0288デフォルトの名無しさん2012/07/10(火) 10:10:35.41
>>269
「close()の後に失敗したエラー」って何?
0289デフォルトの名無しさん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.
0290デフォルトの名無しさん2012/07/10(火) 10:30:05.52
エラー処理まで含めた安全なファイル書き込みのサンプル下さい
0291デフォルトの名無しさん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 するなり各操作の戻り値見るなりしろ。
0292デフォルトの名無しさん2012/07/10(火) 11:13:53.15
書き込むデータをメモリに蓄えて
書き込み先のファイルをバックアップして
書き込み成功するまで書き込みを繰り返す
失敗したらユーザーに指示を仰ぐ
といった方法で書いてるんだが巨大なデータを生成しながら書き込む場合にメモリに乗り切らなくて困る
どうしたらいい?
0293デフォルトの名無しさん2012/07/10(火) 11:20:15.31
>>292 ユーザーに指示を仰ぐといいよ
0294デフォルトの名無しさん2012/07/10(火) 11:23:25.36
>>292
メモリに蓄えずに書き込めばいいんじゃね
変更が必要ならファイル使うとか
0295デフォルトの名無しさん2012/07/10(火) 11:26:49.15
>>292
最初から別名ファイルに書き出していって、最後にリネームすればいいよ。
0296デフォルトの名無しさん2012/07/10(火) 12:09:00.34
>>292
何か矛盾してないか
もしそのOSが仮想記憶を使ってるとしたら、スワップファイルもまともに動作しないのか
スワップファイルを安心して置けるドライブに書き込むデータを書いておいて
トランザクション処理しろよ
0297デフォルトの名無しさん2012/07/10(火) 12:11:01.39
すいません自己解決しました
分割して書き込んでマージすることにしました
0298デフォルトの名無しさん2012/07/10(火) 12:35:35.72
C++スレに書き込む事じゃないな
初心者スレにでも書け
0299デフォルトの名無しさん2012/07/10(火) 12:43:29.89
^∈^
0300デフォルトの名無しさん2012/07/10(火) 17:53:36.60
class templateClassInt;

templateClassInt* p;

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

typedef A<int> templateClassInt;

これ出来ないの?ぐぬぬ
0301デフォルトの名無しさん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;
};
0302デフォルトの名無しさん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
0303デフォルトの名無しさん2012/07/10(火) 19:01:17.22
めちゃくちゃじゃないか
0304デフォルトの名無しさん2012/07/10(火) 19:09:17.76
まったくです。わけわからん
もう素直にインクルードするわ
extern templateとか見つけて使ったがよくわからんwww

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


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



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

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

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

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

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

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

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

fflush()の繰り返しで OS からエラーを拾ってきてくれる実装を
どれかひとつ教えてもらえないかね?
0315デフォルトの名無しさん2012/07/11(水) 22:54:41.34
検索すんじゃなくて自分でやってみたら?
SDカードに限界までデータ書き込むとか
仮想マシン上で容量のすっくないディスク作って書き込んで見たり。
Windowsのランタイムライブラリーとかそうだからやってみ。
gccもVC用のランタイムライブラリー使ってるだけだから
コンパイラーは何使っても構わん。
0316デフォルトの名無しさん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'となってエラーになります
どこに問題があるのでしょうか?
0317デフォルトの名無しさん2012/07/11(水) 23:25:04.24
>>315
なんだ。またVC++が標準を逸脱してる(してた?)ってだけの話か。
http://support.microsoft.com/kb/66052

「〜実装が多い」といってるけど、他にそんな挙動をする実装あるの?
0318デフォルトの名無しさん2012/07/11(水) 23:39:03.80
標準を逸脱してんじゃなくて、実装依存の範疇。
標準の要件を超えてなきゃ標準無視とは言わん。
0319デフォルトの名無しさん2012/07/11(水) 23:47:09.01
そっか。ライブラリ内のバッファぶんは掃きだすみたいだから、これで問題ないのか。
0320デフォルトの名無しさん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って何が違うんですか
0321デフォルトの名無しさん2012/07/11(水) 23:58:14.25
>>316
別に問題なさそう。
http://codepad.org/lerTWOih
0322デフォルトの名無しさん2012/07/12(木) 00:00:51.32
>>320
記憶域が違う。前者は自動変数。後者は静的変数。

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

その例のままならたいして違わない。
0323デフォルトの名無しさん2012/07/12(木) 00:03:19.23
>>317
OracleやらSunのUNIX向けコンパイラー、BorlandのKylix。
ジャーナリングを確実にしたいためだろうが真意はしらん。
0324デフォルトの名無しさん2012/07/12(木) 00:05:23.22
>>320
後者は、戻り値で返すことができる。
前者は、戻り値で返すと異常を起こすので普通コンパイルエラーになる。
0325デフォルトの名無しさん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;
で通りました
0326デフォルトの名無しさん2012/07/12(木) 00:24:23.48
>static union{int a;};
その名前なしの共用体に使い道があるのけ
0327デフォルトの名無しさん2012/07/12(木) 00:35:40.01
>>326
それそのものは
もともとの使い道のサンプルから、問題となっている箇所を探すためのテストにすぎないですよ?
0328デフォルトの名無しさん2012/07/12(木) 00:37:12.36
>>325
codepad は g++ 4.1.2 なわけだが。
エラーが出るバージョンは?
0329デフォルトの名無しさん2012/07/12(木) 00:38:12.77
>>324
コンパイルエラーにはならんだろ。
0330デフォルトの名無しさん2012/07/12(木) 00:42:45.44
>>328
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3ですね・・・
コンパイル通らないのは自分の環境が特殊なんですかね
0331デフォルトの名無しさん2012/07/12(木) 00:45:19.93
javaのプログラムをC++に移植したらとんでもなくJavaの方が速いです
0332デフォルトの名無しさん2012/07/12(木) 01:10:43.03
>>330
どうせ実際に問題が起こってるコードと>>316のコードが違ってるんだろ。
0333デフォルトの名無しさん2012/07/12(木) 01:17:29.61
>>332
そこまでしてくれとは言えないですが、よかったら実際にコンパイルしてみてください
codepadではエラーを吐かないコードをマルコピして実際にコンパイルしたら問題のエラーが出ます
マニピュレータがstd::付けないと実際のコンパイラで通らないはずですが
codepad上では通ったりしてるので実際のg++の制約を遵守しているようには思えないんですけどね
0334デフォルトの名無しさん2012/07/12(木) 01:17:58.93
やりたいことはわかるが
共用体の使い方が下手すぎるのがなんとも 316
0335デフォルトの名無しさん2012/07/12(木) 01:24:37.19
>>333
コンパイルしてみろというのならコンパイルできるソースを出せよ。
0336デフォルトの名無しさん2012/07/12(木) 01:29:47.62
>>333
codepadで通ってあんたの環境で通らないソースがあるんなら、
そのコードのcodepadのURL貼ってみればいいんじゃないの。
0337デフォルトの名無しさん2012/07/12(木) 01:45:19.04
やりゃわかるけどideoneではエラーになるよ
0338デフォルトの名無しさん2012/07/12(木) 01:45:20.40
C++には、無名共用体という特殊な共用体があります
ワケワカで使おうとしてハマりまくってます状態?
0339デフォルトの名無しさん2012/07/12(木) 01:51:40.20
ん〜、問題はグローバル域中の無名共用体に対する、グローバル領域でのその無名共用体メンバへの参照変数の宣言なので
>>325でも構わないですし、include から全部そーす書けというなら
>>316の最後に}つけたものをコンパイルしてみてください

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

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

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

0344デフォルトの名無しさん2012/07/12(木) 02:08:51.52
prog.cpp:13: error: ‘hex’ was not declared in this scope
ideoneではエラーになるよ
エラーが英語だから?
0345デフォルトの名無しさん2012/07/12(木) 02:12:52.32
>>342
あ、そうです!
正確に言うと最初から全部リンカエラーですね
0346デフォルトの名無しさん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
0347デフォルトの名無しさん2012/07/12(木) 02:21:47.15
unsigned char& AL = Hreg[0];

へー、こういう書き方すると初期化コードが必要になるんだ
0348デフォルトの名無しさん2012/07/12(木) 02:29:46.51
初期化コードってなぁに?
0349デフォルトの名無しさん2012/07/12(木) 02:31:18.12
汗のソース吐かせて見てみたら
C++流の言い方は知らん
0350デフォルトの名無しさん2012/07/12(木) 02:32:35.51
汚ねえな
0351デフォルトの名無しさん2012/07/12(木) 03:07:56.95
>>331
移植した奴の腕が悪過ぎる。
0352デフォルトの名無しさん2012/07/12(木) 08:45:57.55
フリーで超高速に最適化してくれるコンパイラ教えてください
0353デフォルトの名無しさん2012/07/12(木) 08:51:15.62
gcc, clang, vc++ee
っていうかいまどき最適化してくれないコンパイラのほうがめずらしいわ。
0354デフォルトの名無しさん2012/07/12(木) 09:14:15.64
「超高速に最適化」って最適化を超高速に行うってこと?
それとも超高速に動作するように最適化するってこと?
どっちにしても「超高速」は無理かと
0355デフォルトの名無しさん2012/07/12(木) 12:12:03.92
グローバルに無名unionを書いたら、unionにならなかった気がする。
0356デフォルトの名無しさん2012/07/12(木) 12:36:40.97
横着しないで構造体に包めよ
0357デフォルトの名無しさん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]     ?             ?

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

(*ptr)[num]

ポインタのアクセス

ptr[index]

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

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

のようになる

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

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

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

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

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

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

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

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

「分かりやすく」云々以前に間違ったことを教えるなっつーの
0366デフォルトの名無しさん2012/07/12(木) 14:50:10.89
しかし正解は言わない365であった
0367デフォルトの名無しさん2012/07/12(木) 14:59:55.30
>>365
ならそれを訂正しつつ君が説明すればいいじゃんって話なんだけど伝わってる?
別に厳密な言語仕様の話をしてわけじゃないし
0368デフォルトの名無しさん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 のような記述は出来ない

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

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

「配列は入れ物があるけどポインタは無い 」
自分は
「配列は入れ物がある」
「しかし配列にポインタは無い」
と言ったのかと思ってた
0374デフォルトの名無しさん2012/07/12(木) 16:04:04.49
>>372
無いので、先にアローケートして自前でプールするしか無いと思うんだが・・・。
書き方しだいではmallocよりもはやくなるよ。
0375デフォルトの名無しさん2012/07/12(木) 16:12:59.49
組み込み方面的の書き方?
http://ideone.com/md53X
0376デフォルトの名無しさん2012/07/12(木) 17:03:13.02
>>374
ならそういうライブラリでもいい
boostにならあるかな
0377デフォルトの名無しさん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
0378デフォルトの名無しさん2012/07/12(木) 22:26:40.95
>>361
配列って実際はアドレス定数だよな。
スタックポインタによって変わるから厳密な定数じゃないけど。
0379デフォルトの名無しさん2012/07/13(金) 00:12:34.04
>>378 なんでわざわざ違うものを混同しようとするの?
0380デフォルトの名無しさん2012/07/13(金) 05:35:14.97
テンプレート引数や、const値に使えない以外は特性がほぼ同じだから。
更に言えば、グローバルで宣言した配列の場合は、static領域をさした
定数そのものだから。
0381デフォルトの名無しさん2012/07/13(金) 06:09:17.33
>>379
・OOやテンプレートの様に演繹的に理解する事で、新たに理解する知識量を減らせるから
 (他の機能と共通する特性を新たに覚える必要がなく、固有特性だけ考えればいい)
・教えるとき説明しやすいから

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

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

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

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

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

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

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

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

clone()の戻り値をスマポにしても良いかも
DerivedのコピーコンストラクタにClonable<Derived>()が無いと明示的な初期化が無いという警告が出たんだけど何でなんだろうか
0409デフォルトの名無しさん2012/07/14(土) 00:11:50.02
>>402
生ポインタに比べて例えば std::auto_ptr のパフォーマンスがどう劣ると思ってるの?
0410デフォルトの名無しさん2012/07/14(土) 00:12:30.18
>>405
つまり標準化されたからガンガン使えってことだね
0411デフォルトの名無しさん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;
0412デフォルトの名無しさん2012/07/14(土) 02:42:54.70
auto_ptrがdeprecatedになったのは
unique_ptrが入ったからか
0413デフォルトの名無しさん2012/07/14(土) 03:32:50.11
コピーで所有権の移動とか直観的じゃなさ過ぎたよな
0414デフォルトの名無しさん2012/07/14(土) 09:00:33.89
ptr プトゥル
ioctl アイオークトゥル
fcntl エフクントゥル
ctrl クタール
0415デフォルトの名無しさん2012/07/14(土) 09:10:51.63
clsXXX 来るすXXX
calcXXX 軽くXXX
0416デフォルトの名無しさん2012/07/14(土) 09:37:55.88
>>412
auto_ptr を deprecated にするために
unique_ptr その他を入れたってとこだな

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

問題はboostがどうやってそれを実装するかだ
0422デフォルトの名無しさん2012/07/14(土) 12:40:09.38
簡単だろ
bstsp<y> p(new y);
stdsp<x> q(p.get(), [p](y*){});
0423デフォルトの名無しさん2012/07/14(土) 12:57:20.18
速度最適化してるのにJavaより処理が遅いとかどんだけ・・・
0424デフォルトの名無しさん2012/07/14(土) 13:02:23.04
スマポ間の変換を何万回する気だよ
0425デフォルトの名無しさん2012/07/14(土) 13:06:48.10
>>424
ありがとうございます すごい早くなりましたw
0426デフォルトの名無しさん2012/07/14(土) 13:07:57.28
てかなんかスマポ使ってるってわかったんですかねw
0427デフォルトの名無しさん2012/07/14(土) 13:09:25.24
監視されてるよ
0428デフォルトの名無しさん2012/07/14(土) 13:14:36.71
こわwでもこれで速度の壁超えたのでとある計画ができる!
マジでありがたいw
0429デフォルトの名無しさん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つも書くのメンドイんですが、どうにかなりませんか?
0430デフォルトの名無しさん2012/07/15(日) 21:24:18.25
右辺値参照は各クラスにキックできないの?
んで、右辺値参照なかったら普通のコピコン動くんじゃなかったっけ?
C++11はよく知らないんだけど。
0431デフォルトの名無しさん2012/07/15(日) 21:54:51.52
>>429
テンプレートと完全転送使え
ttp://ideone.com/rsNRE
0432デフォルトの名無しさん2012/07/15(日) 22:10:16.26
イデオンって0x出来たのか
0433デフォルトの名無しさん2012/07/15(日) 23:00:57.63
>>431
それだと受け付けてほしくないもの受理しちゃう。
ttp://ideone.com/wybTH
0434デフォルトの名無しさん2012/07/15(日) 23:09:23.03
受け付けたく無い型を特殊化して削除
0435デフォルトの名無しさん2012/07/15(日) 23:11:02.33
is_barとか作ってディ酢パッチ
0436デフォルトの名無しさん2012/07/15(日) 23:12:53.81
int,bar
bar,int
int,intの三つ?
"4つも書くのメンドイ"の解決にならんじゃん…
0437デフォルトの名無しさん2012/07/15(日) 23:34:15.84
>>433
元の>>429でもvecに暗黙変換可能な型は受け入れてるからいいんじゃないの
ttp://ideone.com/i3Gzi

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

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

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

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

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

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




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

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

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

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










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

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

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

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

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

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

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

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

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

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

意味が分かってない日本のお偉いさんは、例外処理せずログだけ残すことだと思ってんだろうが、
この方式は、例外の代わりに問題の起きない値を返す方式で、例外事象が起きたら例外の起きた
関数の中でちゃんと問題のない値を返せるよう処理しなきゃならん。
Cでも例外処理さぼってるような奴が使えるシロモノでもない。
0534デフォルトの名無しさん2012/07/17(火) 07:39:09.20
要するにエラー復帰か
0535デフォルトの名無しさん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がつくれません。
どうしたら直せますか?
0536デフォルトの名無しさん2012/07/17(火) 10:18:51.45
PのところYに訂正します。
0537デフォルトの名無しさん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 ...);
}


};
ソースコードを日本語で翻訳すると可変長のテンプレート引数の
総和の長さを持つ配列を作りたいけれど。
定数になる関数を使ってもコンパイルできませんということです。
ちなみに配列を初期化する前には関数はないのかもとおもって静的関数にしてみてもできませんでした。
0538デフォルトの名無しさん2012/07/17(火) 12:23:05.11
>>537
sizeの宣言と定義2つをEの定義の外に出す。メンバ関数を作りたいわけじゃないだろう
0539デフォルトの名無しさん2012/07/17(火) 12:50:30.53
>>538
それもやったけど出来ませんでした。
0540デフォルトの名無しさん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;
}
0541デフォルトの名無しさん2012/07/17(火) 13:02:09.88
有難うございます。
GCC4.7じゃないので出来ませんでした。
GCC4.7に変えたいです。
0542デフォルトの名無しさん2012/07/17(火) 20:44:08.25
>>533
PDF読んでみりゃ解るが、これって単なる例外じゃなく
バッファーオーバーランとかセキュリティ的に極めて致命的な
場合に限った話で、他の例外は今までどおり例外処理が必要なんだよな。
そもそも、エラー忘却型って訳語自体がおかしいし。
0543デフォルトの名無しさん2012/07/17(火) 21:48:07.20
こういう論文って何処から拾って来るの?
0544デフォルトの名無しさん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));のように変えると
コンパイルは通りますが今度は例外を出して落ちます
質問の一つ目はコンパイルエラーの理由で二つ目はランタイムエラーの原因と対処です
お願いします
0545デフォルトの名無しさん2012/07/17(火) 22:51:31.83
なんで無名関数の戻り値型書いてないんだ?
0546デフォルトの名無しさん2012/07/18(水) 00:32:01.14
cはf.compose(g)のthisをキャプチャしているがc(3.0)の時点では既に寿命が尽きている
0547デフォルトの名無しさん2012/07/18(水) 01:01:20.22
>>443をファビョらせちゃったかな?

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

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

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

当然テンプレートを使って楽していいぞ
0550デフォルトの名無しさん2012/07/18(水) 02:38:13.12
常識だよな
普通に考えて「スマポを生成する」なんて機能は論理的に考えて元々のクラスに不必要な機能なんだよ
だから当然スマポを生成する機能は分離するのが正しい設計だ
0551デフォルトの名無しさん2012/07/18(水) 05:59:32.63
>>549
オーバーライドが不便すぎる
所有権の無くなるスマポを返したい時、手の込んだ事せにゃならん
逆も言えた話ではあるがいくぶんかマシだわ
0552デフォルトの名無しさん2012/07/18(水) 07:22:23.00
shared_ptrの場合はスマポ返さないと全く意味がない
0553デフォルトの名無しさん2012/07/18(水) 08:34:30.18
auto_ptr 返せば現状での十分な移植性に加えて shared_ptr も unique_ptr も
使う側の入れ物は好きに選べるんだぜ。最強じゃね?
0554デフォルトの名無しさん2012/07/18(水) 09:24:51.17
ヘッダで#include <memory>するとallocatorやらなんやら、auto_ptrやunique_ptrが使いたいだけにしては重すぎるんだよな。
0555デフォルトの名無しさん2012/07/18(水) 09:35:48.47
>>551
何が言いたいのかよくわからない
0556デフォルトの名無しさん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
0557デフォルトの名無しさん2012/07/18(水) 10:02:50.79
ユニポは削除子がイマイチ使いにくい
テンプレートで指定だからムーブする時に型を合わせないとダメだし
動的にしたるかと思ってfunction使うと例外安全じゃ無くなるし
0558デフォルトの名無しさん2012/07/18(水) 10:19:54.90
shared_ptrみたいにするとサイズが増えるんじゃないの
0559デフォルトの名無しさん2012/07/18(水) 12:20:04.53
>>556だとサイズが2倍で生成/破棄時間もほぼ2倍になってるね。
処理時間≒メモリアクセス時間という俺の持論通りだ。
0560デフォルトの名無しさん2012/07/18(水) 12:55:49.82
わろた
0561デフォルトの名無しさん2012/07/18(水) 17:52:43.76
共用体がよくわからん(´・ω・)
0562デフォルトの名無しさん2012/07/18(水) 18:11:06.86
共用することを強いられているんだ
0563デフォルトの名無しさん2012/07/18(水) 18:23:11.91
混浴風呂を思い浮かべてごらん
a)入り口に男湯と書いてあるところに入る
b)入り口に女湯と書いてあるところに入る
あら不思議
どっちも同じ風呂釜に
0564デフォルトの名無しさん2012/07/18(水) 18:25:44.27
ただし女湯側から見た時には仕切りがあって
1の湯、2の湯と分かれている
男湯側から見ると3の湯がひとつしかない
0565デフォルトの名無しさん2012/07/18(水) 18:49:11.17
風呂に入ってるひとにアクセスする方法が

男湯.3の湯

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

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

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

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

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

家族でパンツを共有することを思い浮かべてごらん
0577デフォルトの名無しさん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的に配列の参照が取り出せないので困っています)
0578デフォルトの名無しさん2012/07/19(木) 08:32:26.54
アレイクラスでオーバーロード
0579デフォルトの名無しさん2012/07/19(木) 09:21:46.65
あー疲れた
0580デフォルトの名無しさん2012/07/19(木) 09:23:56.36
>>577
func((double const(&)[10])xs.data());
0581デフォルトの名無しさん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; }

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

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

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

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

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

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

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

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

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

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

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

見た目がダサいのは慣れで済むけど、APPのクラッシュはそうはいかない。
0663デフォルトの名無しさん2012/07/21(土) 21:50:31.60
>>661
それたまに聞くけどよくわからん
0664デフォルトの名無しさん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自体の実装は一切変更しなくて済む。
0665デフォルトの名無しさん2012/07/21(土) 22:06:46.98
具体的にどうすれば?
0666デフォルトの名無しさん2012/07/21(土) 22:12:27.21
それぐらいはまともな入門書読めば判るだろ
streambufのサブクラス作るだけだが、
長くなるから個々には書かん
0667デフォルトの名無しさん2012/07/22(日) 02:45:17.64
ソケットに対するストリームならBoost.Asioに実装がある。
Boost.InterproessのvectorstreamとbufferstreamはなぜInterprocessにあるのか分からない。
0668デフォルトの名無しさん2012/07/22(日) 02:47:17.47
>>657
自分や誰かが作ったクラスや構造体などをprintf/scanfで入出力できるようにするのは無理だけど、
iostreamの<<と>>ならできるってのは便利と言えば便利。
0669デフォルトの名無しさん2012/07/22(日) 06:14:09.05
まあ boost::format がないと不便だけどねえ
0670デフォルトの名無しさん2012/07/22(日) 10:02:58.64
>>666
参考書のタイトル頼む
0671デフォルトの名無しさん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の新しい参考書は控えてるような印象
0672デフォルトの名無しさん2012/07/22(日) 12:51:08.28
boostのvariantって四則演算できないのか
0673デフォルトの名無しさん2012/07/22(日) 13:50:58.50
中身が空の関数であっても、関数本体は cppソース側に書いたほうが
いいのかな
0674デフォルトの名無しさん2012/07/22(日) 13:53:16.24
>>673
ヘッダに書く方がいい
0675デフォルトの名無しさん2012/07/22(日) 14:56:36.46
STL使ってるとインデクサなんかにsize_tが使われてるみたいだけど、実装する時はintとかじゃなくてsize_tに統一するべきなの?
VS使ってると警告がウザいん。因みにsize_t型が32/64bitで長さが変わることは心得てる
0676デフォルトの名無しさん2012/07/22(日) 15:11:54.45
>>675
まあこの例に限らず警告がゼロになるようにした方がとにかく無難
0677デフォルトの名無しさん2012/07/22(日) 15:31:15.88
>>675
面倒でもstatic_cast<int>してるわいつも
0678デフォルトの名無しさん2012/07/22(日) 15:34:38.96
>>677
そっちにあわせんなよ
0679デフォルトの名無しさん2012/07/22(日) 15:47:49.79
参照な引数を省略する方法ってある?
int hoge( int &unko=0 );
みたいな感じで省略されたときは返さないみたいな感じで
0680デフォルトの名無しさん2012/07/22(日) 15:50:00.99
const int& unkoならいける
0681デフォルトの名無しさん2012/07/22(日) 15:51:14.44
なんでインデクスは符号無しなんだろうな
計算でインデクス出して負になったときに
符号ありなら簡単にチェック出来るのに
符号なしだと単に大きなインデクスを指定したのと区別がつかないから欠点だろ
0682デフォルトの名無しさん2012/07/22(日) 15:55:55.89
>>680
const かぁ・・・
思い切り下の方ではいじる気満々なんだよな
あきらめるわ。 ありがとう。
0683デフォルトの名無しさん2012/07/22(日) 15:57:29.02
>>678
size_t残してたらキャストしないといけないところが他にも出てきたりしてウザイだろ
0684デフォルトの名無しさん2012/07/22(日) 15:57:35.67
>>681
unsignedじゃないとメモリを全部指せなくない?
メモリアドレスより大きい型使えればいいんだけど・・・。
0685デフォルトの名無しさん2012/07/22(日) 15:59:09.80
>>679
int hoge() { int unused; return hoge(unused); }
0686デフォルトの名無しさん2012/07/22(日) 16:00:53.65
>>684
63bitもあれば十分だろ
0687デフォルトの名無しさん2012/07/22(日) 16:02:35.17
>>684
そんな状況は value_type が (signed/unsigned) char の vector か vector<bool> でしか
ありえないわけで、あんまり強い根拠だとは思えないなぁ。
0688デフォルトの名無しさん2012/07/22(日) 16:04:50.82
まー、言語仕様っちゅうもんは今だけ良ければイイっていう観念で作ってるわけでは無いからね。
0689デフォルトの名無しさん2012/07/22(日) 16:33:06.24
>>681
そもそも負の値があっちゃいかんから、
負の値を渡すなという意味合いでもある。
明示的なキャストが無い場合警告を出すことで凡ミスを検知できる。
負の値を使いたい計算なら計算結果にoff_tなんか使えばいい。
0690デフォルトの名無しさん2012/07/22(日) 16:38:46.41
大き過ぎる値渡したらチェック出来ない(結局メモリ循環して負の位置にアクセス)から意味ない
という主張は昔は正しかったかも知れないが今はCPU側に保護機能あるから大丈夫っしょ
0691デフォルトの名無しさん2012/07/22(日) 16:47:07.76
初期化子って継承できないの?
0692デフォルトの名無しさん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.
0693デフォルトの名無しさん2012/07/22(日) 16:47:51.98
>>691 C++でおk
0694デフォルトの名無しさん2012/07/22(日) 16:49:01.93
>大き過ぎる値渡したらチェック出来ない
そもそもこれに意味があるのか判らんな。
負だろうが正だろうが、範囲チェックするならするし、
しないならしないだろうから結局変わらんだろ。
あと、unsignedならsignedと違って0下回った時シグナルとかで検知できるぞ。
0695デフォルトの名無しさん2012/07/22(日) 16:50:40.91
>>681
計算結果が負になった時だけチェックできても中途半端だよ。
ちゃんと上限もチェックしようよ。
06966952012/07/22(日) 16:53:44.12
かぶった...

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

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

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

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

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

なんて言ってる奴は、自分からアホ公言してるのと同じだし。
0710デフォルトの名無しさん2012/07/22(日) 17:27:04.07
>>704
そうね間違えたFPE_INTOVFLOW。
>FPE_INTOVFLOW も signed だけでしょう。
試してみたら?
0711デフォルトの名無しさん2012/07/22(日) 17:32:45.90
>>710
まずは unsigned 整数に負の値を入れてシグナルの発生を確認したコードを貼ってくれ。
0712デフォルトの名無しさん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 型を使ってはいけません。
0713デフォルトの名無しさん2012/07/22(日) 17:36:11.77
712 は http://www.textdrop.net/google-styleguide-ja/cppguide.xml#%E6%95%B4%E6%95%B0%E5%9E%8B
0714デフォルトの名無しさん2012/07/22(日) 17:45:31.36
>>699
解説もとぬ
0715デフォルトの名無しさん2012/07/22(日) 17:48:19.19
>>714
(お前の日本語では何を相談しようとしてるのかさっぱりわからんから問題の)C++(ソースコードとコンパイラからのエラーメッセージ)で(問題を示せば)おk
0716デフォルトの名無しさん2012/07/22(日) 17:51:12.42
>>710
unsignedでシグナル飛んだら規格違反じゃないの?
0717デフォルトの名無しさん2012/07/22(日) 17:52:37.37
>>712
foo.Length( ) が 0 になるかも知れないのに

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

なんていうコードを書く人は、どうせ他のところでもバグるので unsinged 云々の話じゃないと思う。
0718デフォルトの名無しさん2012/07/22(日) 17:57:57.00
>>717 signedならfoo.Length()が0だろうが何の問題も無いコードなのに、何言ってるの?
0719デフォルトの名無しさん2012/07/22(日) 17:59:06.61
つっこんだ順序がなんとなく保持されるような連想配列mapってある?
0720デフォルトの名無しさん2012/07/22(日) 18:01:39.63
Cはその辺きちんと理解できてその手の下らないバグを入れることが無い人のための言語。
それが出来ないならBASICでも使ってろカス
0721デフォルトの名無しさん2012/07/22(日) 18:03:45.90
>>705
え?オーバーフローとアンダーフローって未定義じゃないの?
0722デフォルトの名無しさん2012/07/22(日) 18:03:53.01
>>719
直接そのものは無いけどmap<Key,list<Value>>でいいんじゃないの?
0723デフォルトの名無しさん2012/07/22(日) 18:04:05.95
unsignedって使わないようにしてる
0724デフォルトの名無しさん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にすればよかろ。
07257242012/07/22(日) 18:07:14.34
>>724訂正:
×取り出すところはit->secondを*it->second.secondにすれば
→取り出すところはit->secondを*it->second.firtにすれば
0726デフォルトの名無しさん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.
0727デフォルトの名無しさん2012/07/22(日) 18:23:19.42
>>718
>>>717 signedならfoo.Length()が0だろうが何の問題も無いコードなのに、何言ってるの?

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

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

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

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

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

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

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

> それなら、「値の範囲を考えた上で、unsignedで問題ないところはunsigned使えって話。」でも
> 同じだが。
どちらでも問題ないところでも、unsignedを使うと上でいろいろ挙げられてるようにデメリットが大きい。
だからなるべくsignedを使えって話。
0732デフォルトの名無しさん2012/07/22(日) 19:00:06.92
>>711
http://codepad.org/GoZTWEPM
ハードウェアのオプションしないと符号付きだろうが
符号なしだろうが反応しねぇなぁ
0733デフォルトの名無しさん2012/07/22(日) 19:03:24.24
gnu系だと-ftrapが使えないと使えんからな
0734デフォルトの名無しさん2012/07/22(日) 20:02:54.77
>>732-733
オプションさえつければシグナル発生するの?
0735デフォルトの名無しさん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.
ですよねー
0736デフォルトの名無しさん2012/07/22(日) 20:17:47.93
>>730
直接的ではないけどboost.graphの深さ優先探索かな。
visitorで実現できるけどiterator化するのは少し難しい。
できないことはないけどややこしいだけだよ。
0737デフォルトの名無しさん2012/07/22(日) 20:22:54.37
>>731
> -1になるからここではunsigned使うわけがないってことか?

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

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

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

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

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

で、例えばどのコンパイラがどんなスイッチでそんな動作をするの?
0744デフォルトの名無しさん2012/07/22(日) 21:16:03.50
SPARCとかPOWER PCとか現実がそうなんだから知らんがな
0745デフォルトの名無しさん2012/07/22(日) 21:18:36.95
>>744 現実だと言うのならコンパイラとオプションとコードの組み合わせを示せよ。
0746デフォルトの名無しさん2012/07/22(日) 21:27:19.91
>>745
コンパイラ以外は既に出てるがな
gccでもftrapサポートしてるかfpu_flags関数使えると行けるぞ
fpu_flagsはgcc固有じゃなくOSとハードウェア固有だけど
0747デフォルトの名無しさん2012/07/22(日) 21:27:59.95
>>737 何でそんなにunsigned使いたいの?
0748デフォルトの名無しさん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"って何?
0749デフォルトの名無しさん2012/07/22(日) 21:34:37.18
超下品ゲーム作ってたんですが、肛門からでてくるものでおならクラスとげりクラスとうんこクラス、うんこにはまきぐそクラスと垂れ流しうんこと太巻うんこがあります。
0750デフォルトの名無しさん2012/07/22(日) 21:37:39.40
>>746
http://www.google.co.jp/search?q=%22fpu_flags%22
"fpu_flags関数"とやらも検証できない。
0751デフォルトの名無しさん2012/07/22(日) 21:40:18.47
>>748
じゃないな。こっちもググったけどでてこないし。実機のmanぐらいにしか乗ってないんだろうな。
0752デフォルトの名無しさん2012/07/22(日) 21:44:49.64
まーそんな処理系があっても規格違反なんだろ?ここでは論外。
0753デフォルトの名無しさん2012/07/22(日) 21:47:57.54
>>746 なんでコンパイラは示されないの?
0754デフォルトの名無しさん2012/07/22(日) 22:03:37.35
>>748
-ftrapvって結構危険よ。今は知らないけど昔は加算とか取りこぼしてた。
0755デフォルトの名無しさん2012/07/22(日) 22:04:25.03
>>753
gccはコンパイラの名前じゃなかったのか・・・
0756デフォルトの名無しさん2012/07/22(日) 22:12:33.61
WindowsもってないんだけどEXCEPTION_INT_OVERFLOWって符号付きのみだっけ?
0757デフォルトの名無しさん2012/07/22(日) 22:30:34.15
>>752
んなこと言い出したらスレッドセーフとかって話も論外だろうし
環境依存しないオーバーフロー検知なんて無理だって

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

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

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

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

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

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

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

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

これを考慮してナントカする必要を感じるのは、この程度の違いで大問題を引き起こす新人に
なにかさせる場合だけだな。
0771デフォルトの名無しさん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)
0772デフォルトの名無しさん2012/07/23(月) 07:07:36.32
ポインタに加算して使うインデックスをsigned整数で扱うと値が小さい負数になったときに実行時エラーが出ない可能性がある。
unsignedなら極度に大きい値になるので多分segmentation faultが出るだろう。
0773デフォルトの名無しさん2012/07/23(月) 08:21:02.36
>>772
(´Д`)ハァ…
0774デフォルトの名無しさん2012/07/23(月) 10:41:33.49
>>770
馬鹿だろ
この程度で大問題を引き起こす言語だからこそ
プロでも数年に1度はやっちゃうし、その上
見つけにくくて困るんだよ
0775デフォルトの名無しさん2012/07/23(月) 12:08:17.92
signedで扱える範囲なのに負は扱わないからunsignedでカウントしよう
なんて考えること自体が馬鹿
プロなのにこの程度の問題を数年に1度やっちゃう奴は…
0776デフォルトの名無しさん2012/07/23(月) 12:19:27.19
プロなら安全な整数クラスで置き換えるだろ
0777デフォルトの名無しさん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++)...
と書き直すときの敗北感
0778デフォルトの名無しさん2012/07/23(月) 13:07:26.11
size_t と ptrdiff_t の使い分けを真面目に考えるとややこしい
0779デフォルトの名無しさん2012/07/23(月) 13:24:22.12
int setOppai( int oppai, bool chinko )

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

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

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

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

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

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

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

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

VCの実装だとstd::arrayはスタックに確保される。
初期化ができるのは、デフォルトのコンストラクタが一切定義されてないので、POD構造体の初期化的なことができる。
0847デフォルトの名無しさん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付けてるんだが
0848デフォルトの名無しさん2012/07/25(水) 19:12:07.88
あ、コンパイラはgcc4.7.1です
0849デフォルトの名無しさん2012/07/25(水) 19:15:11.71
SoA<Vector<float>, 16> Data = {{{{0.f,}}}};

こうやったら警告なくなった
SoAのVectorのarray[16]で、さらにVectorは要素が4つあるから4重カッコになるのか
0850デフォルトの名無しさん2012/07/25(水) 20:03:36.96
>>849
GCCは使ったこと無いんで正直分からない。すまない。
VCも最近、規格追従度が微妙になってきたしなぁ。参った。
0851デフォルトの名無しさん2012/07/25(水) 21:40:24.41
privateとかpublicとかって、なんて名前?
なんとか識別子?
0852デフォルトの名無しさん2012/07/25(水) 21:49:36.68
しゅーしょくしじゃないの?
0853デフォルトの名無しさん2012/07/25(水) 22:49:19.90
よくわからんでし
0854デフォルトの名無しさん2012/07/25(水) 22:49:27.33
以下によると、アクセス指定子。
ttp://www.geocities.jp/ky_webid/cpp/language/006.html
0855デフォルトの名無しさん2012/07/25(水) 23:17:55.10
アクセス修飾子とアクセス指定子、正しいのはどっち?
0856デフォルトの名無しさん2012/07/25(水) 23:27:30.57
修飾子は修飾対象が必要。
C++の修飾対象とは宣言に伴うインスタンスの事。
だからそれらが当てはまらない指定子が正しい。
0857デフォルトの名無しさん2012/07/25(水) 23:31:11.14
インスタンスってなんぞえtemplateの実体か?
0858デフォルトの名無しさん2012/07/25(水) 23:36:42.94
JIS X3014に従うならアクセス指定子
0859デフォルトの名無しさん2012/07/26(木) 00:39:42.88
クラス宣言の中でだけnamespace使いたいときはどうするの?
0860デフォルトの名無しさん2012/07/26(木) 00:51:31.43
中でusing namespace
0861デフォルトの名無しさん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() というメンバ名にすれば良いのかなぁと思ってるんですが、
もっと見栄えの良い方法はありますか?
0862デフォルトの名無しさん2012/07/26(木) 10:32:42.16
>>861
インターフェイス側を変えずに実装する方法の一例
http://ideone.com/xJyi4
0863デフォルトの名無しさん2012/07/26(木) 10:34:13.45
多重継承なんてバグの温床なのにねえ
0864デフォルトの名無しさん2012/07/26(木) 11:20:41.57
a->getChinko() で返ったポインタが使われる前と後を
自動で処理するいい方法ある?

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

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

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

class A{
public: B unko;
};

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

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

http://www2.teu.ac.jp/aqua/GS/Wiki/?Program%20Memo#zcfe8c9f
0872デフォルトの名無しさん2012/07/26(木) 13:13:56.74
>>871
それ、一体何十年前の記事?
60fpsで数百回ってことは、高々秒間一万回前後でしょ。
そんなのんびりした関数で遅いの速いのなんてナンセンスでしょ。
つーか、本気で高速化を検討するなら、実測が基本よ。
0873デフォルトの名無しさん2012/07/26(木) 13:14:03.30
遅いといっても許容できる程度なら考える手間が無駄
それともどんなに手間をかけてでも 1 ナノ秒でも速くしたい?
0874デフォルトの名無しさん2012/07/26(木) 13:20:42.71
>>871
その関数内で大量にループ回してループ内でアクセスするならな
0875デフォルトの名無しさん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;
}
0876デフォルトの名無しさん2012/07/26(木) 13:43:38.50
>>871
件の記事のコードで試してみたけど、差が出ないわ。
つーか、アセンブリ出力見る限り全く同じコードになったよ。
0877デフォルトの名無しさん2012/07/26(木) 13:49:19.67
>>871
そんな事を言っていたら仮想関数の呼び出しはどうなる

それにthisがレジスタに持たれれば関係ないだろ?
x86のようなレジスタが少ないCPUなら少しはコストが掛かるだろうが
x64で最適化を掛けてコンパイルすれば高い確率でthisをレジスタに
してくれるのでは?
0878デフォルトの名無しさん2012/07/26(木) 13:51:27.39
>>877
件の記事の例くらい簡単な内容なら、それすら杞憂ですぜ。>876はx86ですから。
0879デフォルトの名無しさん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のドキュメントにわざわざ明記されてるくらいだしね
0880デフォルトの名無しさん2012/07/26(木) 15:39:07.33
腐ったBCCでもthisをECXに入れたコードが生成された
だいたい>>871のコードは実数をフラグに使っていて、しかも実数の配列を
アクセスしてるんだろ?そしたらレジスタではなく必ずメモリ経由になり、まあ
L2キャッシュに乗る分もあるけど、メモリレイテンシが一番大きいのでthisなんて
コストはかき消されてしまうと思う

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

って

int A = ( B < C );

と同じ結果になりますが、
条件判定の結果は1(true時)または0(false時)であることが保証されていますか?
0883デフォルトの名無しさん2012/07/26(木) 16:16:09.64
はい
08848822012/07/26(木) 16:17:59.35
ありがとうございましたぁ!!!!
0885 ◆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時まで
0886デフォルトの名無しさん2012/07/26(木) 18:46:14.75
宿題は宿題スレへ
0887デフォルトの名無しさん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 さんどうぞ
0888デフォルトの名無しさん2012/07/26(木) 19:06:57.12
馬鹿には無理
0889デフォルトの名無しさん2012/07/26(木) 19:07:51.47
は?しねよ
0890デフォルトの名無しさん2012/07/26(木) 19:09:04.84
宿題は宿題スレへ
0891デフォルトの名無しさん2012/07/26(木) 19:31:46.47
糞コード晒してんじゃねぇよ
0892デフォルトの名無しさん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 !!、 ̄ ¨¨ ̄(.○゙
                          ゙‐'-'
                      //Λ_Λ  | |
                      | |( ´Д`)// <うるせぇ、オスプレイぶつけんぞ
                      \      |
0893デフォルトの名無しさん2012/07/26(木) 19:34:45.65
                ___
               /     \
             / ─    ─ \
            /  (●)  (●) \
              |     (__人__)     | <こいよオラ!!オラ!!
           ,.゙-‐- 、  `⌒´   ,/
        ┌、. /     ヽ ー‐  <.
         ヽ.X、- 、   ,ノi      ハ
      ⊂>'">┐ヽノ〃     / ヘ
       入 ´// ノ        } ,..,.._',.-ァ
      /   `ー''"´      ,'  c〈〈〈っ<
     /          __,,..ノ ,ノヽー'"ノ
      {          ´    /  ``¨´
    /´¨`'''‐、._        ,'\
     ∨´     `ヽ、     ノ   ゙ヽ
      ∨      ヽ _,,..-'"    `ヽ
     ∨       〈-=、.__       }
      ヽ、     }   ``7‐-.  /
          ヽ     リ    /′  ノ
          /′  , {     /   /
        {     !   ,ノ  ,/′
          !    /  /   `‐-、
        !   ,/   ゙ー''' ー---'
          ',  /
        {   }
           ゙Y `ヽ、
            ゙ー--‐'
0894デフォルトの名無しさん2012/07/26(木) 20:19:46.10
あなたが投げたオスプレイは、CVですか?MVですか?
0895デフォルトの名無しさん2012/07/26(木) 21:22:11.15
>>863
多重継承由来のバグって、たとえばどんなの?
インターフェースの多重実装なんてザラだと思うんだけど。
0896デフォルトの名無しさん2012/07/26(木) 21:39:24.16
bool operator==( const char* a ) const;

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

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

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

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

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

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

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

すみませんコンストラクタじゃなくて普通の関数の場合の質問でした。
0973デフォルトの名無しさん2012/07/28(土) 19:54:02.51
基底のコンストラクタに呼び出すように書いておけば
0974デフォルトの名無しさん2012/07/28(土) 20:13:25.99
>>972
>>114
09759672012/07/28(土) 20:38:53.65
>>974
ありがとうございました
0976デフォルトの名無しさん2012/07/28(土) 20:39:31.30
クラス名と関数名を両方表示してくれる定義済みマクロって
なんだっけか
0977デフォルトの名無しさん2012/07/28(土) 21:00:03.48
__function__だっけ
gcc拡張だろ
0978デフォルトの名無しさん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
0979デフォルトの名無しさん2012/07/28(土) 21:11:40.47
ブーストのやつはどうやって実装してんだろう
0980デフォルトの名無しさん2012/07/28(土) 23:02:33.68
ideone.com/huV2b

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

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

定義済みマクロはC由来だからC++では無いような気がする。
0985デフォルトの名無しさん2012/07/28(土) 23:30:47.25
>>984
typeidはデマングル面倒くさいじゃないですかー! やだー!
0986デフォルトの名無しさん2012/07/29(日) 12:58:10.81
XMLをきれいに整形して出力する出力ストリーム
ってどこかにある?
なんか構文解析とセットになってるのしか見当たらない
0987デフォルトの名無しさん2012/07/29(日) 13:29:45.36
シリアライズ
0988デフォルトの名無しさん2012/07/29(日) 14:41:40.42
コンテナの走査中に追加するのってどうやればいいんだろ
今見てるのを削除するってのはよく見かけるけど
0989デフォルトの名無しさん2012/07/29(日) 14:55:03.45
コンテナの種類や追加削除の仕方によるがなるべくしないようにプログラムを設計するべき
削除はすぐにしないで削除フラグをつけるだけで
追加分はtempコンテナに貯めて置いて
走査が終わったら一気に削除追加するとかね
0990デフォルトの名無しさん2012/07/29(日) 18:59:10.56
元コンテナとと別のコンテナ用意して削除不要な
項目だけコピーすりゃいいだろ。
線形探索で削除していくなら速度面じゃコストは無い。
むしろ早い場合もある位だ(特にベクター)
よっぽどメモリーを消費するような場合じゃなきゃ
別コンテナでいい。
0991デフォルトの名無しさん2012/07/29(日) 19:14:58.86
>>990
次スレよろ
0992デフォルトの名無しさん2012/07/29(日) 19:16:44.79
const static int な変数を継承したいんだけどどうしたらいいかな
0993デフォルトの名無しさん2012/07/29(日) 19:17:42.31
整数ラッパーの継承で我慢しなさい
0994デフォルトの名無しさん2012/07/29(日) 19:18:30.63
CRTPとか
0995デフォルトの名無しさん2012/07/29(日) 19:26:07.99
>>992
もう1つの別な「継承」がテンプレート
0996デフォルトの名無しさん2012/07/29(日) 19:32:00.74
>>992
日本語でいいよ
0997デフォルトの名無しさん2012/07/29(日) 19:32:19.34
なんか問題有る?
ttp://ideone.com/eySV5
0998デフォルトの名無しさん2012/07/29(日) 19:50:37.68
>>997
ありがとう
何も問題なかった
0999デフォルトの名無しさん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なんか使うよりもかなり早くだ)
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。