C++相談室 part98at TECH
C++相談室 part98 - 暇つぶし2ch1:デフォルトの名無しさん
12/09/18 19:42:02.09
最近勉強始めた超初心者なんだが
参考書のプログラム書いてコンパイル時に
エラーE2316 seftはostreamのメンバーではない関数ってエラーが出てしまった。
原因が自分で調べてもわからなかったんで
分かる人が居たら教えて欲しい。
以下ソース↓

//seft02.cpp
#include <iostream>
using namespace std;

int main()
{

int a = 10, b = 100;

cout << "16進数表示" << endl;
cout.seft(ios::hex, ios::basefield);
cout << "a = " << a << endl;
cout << "b = " << b << endl << endl;

return 0;
}

2:デフォルトの名無しさん
12/09/18 22:37:42.68
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

3:デフォルトの名無しさん
12/09/20 01:14:50.74
柵(しがらみ)

4:デフォルトの名無しさん
12/09/20 07:40:38.24
なんでスレ立ててんだよ
こっちでやれ そしてここは削除依頼しろ

C++相談室 part98
スレリンク(tech板)

5:デフォルトの名無しさん
12/10/02 12:43:40.65
で?

6:片山博文MZボット ◆0lBZNi.Q7evd
12/10/05 17:11:21.25
>>1 setfの間違い。

7:デフォルトの名無しさん
12/10/09 15:17:04.62
このスレはpart99という事にして再利用するか?

8:デフォルトの名無しさん
12/10/09 17:55:54.85
えっと、次ここでいいのか?
======
初期化リストを返す関数って許されていますか?
下に貼るコードの動作がおかしくて困っています。
また、forward_listにすれば解決はしますが、
何度も呼ばれる場合、パフォーマンスは初期化リストの方がいいですよね?

#include <iostream>
#include <utility>
#include <initializer_list>

std::initializer_list<int> test(const std::pair<int,int>& e) {
//return {1,2,3}; //ok!
return {e.first,e.second,e.first}; //undefined?
}

int main()
{
for (auto i: test(std::make_pair(1,2))) {
std::cout << i << std::endl;
}
}


9:デフォルトの名無しさん
12/10/09 17:58:26.82
ムリポ

10:デフォルトの名無しさん
12/10/09 18:02:40.44
コンパイルは普通に通っちゃうんだけど・・・

11:デフォルトの名無しさん
12/10/09 19:19:31.39
うん

12:デフォルトの名無しさん
12/10/09 19:59:56.90
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part98
スレリンク(tech板)
(従ってこのスレは実質part99となります)

姉妹スレ
【初心者歓迎】C/C++室 Ver.80【環境依存OK】
スレリンク(tech板)

■長いソースを貼るときはここへ。■
 URLリンク(codepad.org)
 URLリンク(ideone.com)

13:デフォルトの名無しさん
12/10/09 20:00:23.94
■基本■
[C++ FAQ]
 URLリンク(www.parashift.com)
 URLリンク(www.bohyoh.com) (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 URLリンク(en.cppreference.com) (英語)
 URLリンク(ja.cppreference.com) (↑の日本語訳だけどまだ未完)
[Stroustrup]
 URLリンク(www.stroustrup.com)
[C++ International Standard]
 URLリンク(www.iso.org)
[JTC1/SC22/WG21 - C++]
 URLリンク(www.open-std.org)
  ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
 URLリンク(www.jisc.go.jp)
  ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。

14:デフォルトの名無しさん
12/10/09 20:00:40.96
■Books■
amazon C,C++関連書籍
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp)

The C++ Programming Language
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
C++ Primer (3rd Edition)
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
The C++ Standard Library
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Effective C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
More Effective C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Exceptional C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
More Exceptional C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Exceptional C++ Style
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)

15:デフォルトの名無しさん
12/10/09 20:00:57.50
■Books(Templateまわり)■
Effective STL
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Modern C++ Design
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
C++ Templates
 URLリンク(www.amazon.com)
C++ Template Metaprogramming
 URLリンク(www.amazon.com)

16:デフォルトの名無しさん
12/10/09 20:01:45.65
■Libraries■
[Boost]
 Boost URLリンク(www.boost.org)
 (日本語) URLリンク(www.kmonos.net)
 (日本語) URLリンク(shinh.skr.jp)
[標準ライブラリ]
 SGI-STL URLリンク(www.sgi.com)
 STLport URLリンク(stlport.sourceforge.net)
 GNU libstdc++ URLリンク(gcc.gnu.org)
 Apache C++ Standard Library (STDCXX) URLリンク(stdcxx.apache.org)
 STLFilt URLリンク(www.bdsoft.com)
 (日本語) URLリンク(episteme.wankuma.com) (※1999年発行注意)
[Loki]
 URLリンク(sourceforge.net)
 LokiPort-MSVC6sp5 URLリンク(fara.cs.uni-potsdam.de)

17:デフォルトの名無しさん
12/10/09 20:02:14.68

STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

------------------------------------------------------------------

一応テンプラ書きました

18:デフォルトの名無しさん
12/10/09 20:05:43.99
>>8
URLリンク(cpplover.blogspot.jp)

こんなのがあるからだめだろうね
規格票にはどう書いてあるか探してみるけど

19:デフォルトの名無しさん
12/10/09 20:23:51.86
>>18
ありがとうございます。
しっかし委員会の人たちは本当に偉いな・・・。
何年も前から知ってるけどこれからも頑張ってほしい。

20:デフォルトの名無しさん
12/10/10 10:57:08.46
Pimplイディオムの意義がよく分かりません

コンパイル時間を縮めるとあるのですが、どうにも理解出来なくて・・・

21:デフォルトの名無しさん
12/10/10 12:30:55.50
パンプル

22:デフォルトの名無しさん
12/10/10 12:32:19.98
インターフェースさえ決まっていれば中身を何度変更しようがコンパイルされるのは1つのcppだけで済む

23:デフォルトの名無しさん
12/10/10 13:03:35.50
PImplで作ったオブジェクトをコピーすると普通の方法ではポインタが指す実体が一つしかないため
Deep Copyにならない

インターフェース内に代入演算子関数やコピーコンストラクタを書くと正常に動作するがそうすると
中身を変更する度に代入演算子やコピーコンストラクタも変更しなければならないため
PImplの意味が失われてしまう

コピーしない場合に限りPImplを使うか、コピーするための特別なスマポを作る必要がある

24:デフォルトの名無しさん
12/10/10 15:01:13.98
pimpl_ptrとか一回作ればその問題は終わりだろ
素人でも1時間あればそれなりのものは作れる

25:デフォルトの名無しさん
12/10/10 16:28:50.17
クラスでnewを使って
動的にインスタンス生成することの
メリットが分かりません
教えて下さい


26:デフォルトの名無しさん
12/10/10 16:31:22.54
>>25
ばーか^^

27:デフォルトの名無しさん
12/10/10 16:33:15.75
あっはっは

28:デフォルトの名無しさん
12/10/10 18:44:15.40
>>25
メリットなんなない。
止めたほうがいい。

29:デフォルトの名無しさん
12/10/10 21:09:39.72
>>20
1. コンパイル時間を縮める
2. private メンバをヘッダから隠せる

これが pimpl の意義

通常は private メンバを変更しただけで
そのヘッダをインクルードしている全ての .cpp が再コンパイルされる
private メンバなんて外部から見えないのだから、これは非常に不合理だと言える

pimpl を使えば private な実装が全て1つの .cpp 内に収まるので
private な実装を変更する限りにおいては1つの .cpp が再コンパイルされるだけで済む

また、private な実装を他から隠匿出来るという点が
商業的に役に立つ場合がある


ただ、pimpl 以外にも似たような事を行う方法はある
まずインタフェースだけのクラスを作って、
そのクラスを継承して実装し、その派生クラスの生成関数だけを外部に公開する、というもの


両者は1, 2の目的を満たしているという点でよく似ているけど、
生成したメモリを管理する責任の所在が異なるというのと、
あとはここから更に継承したいという場合に違いが出てくる

30:デフォルトの名無しさん
12/10/10 22:47:52.39
>>29
> 通常は private メンバを変更しただけで
> そのヘッダをインクルードしている全ての .cpp が再コンパイルされる

private関係ねえぞ。
お前の書くソースは汚そうだ。

31:デフォルトの名無しさん
12/10/10 22:50:08.83
pimplって何て発音するの?

32:デフォルトの名無しさん
12/10/10 22:50:59.05
>>29
> 通常は private メンバを変更しただけで
> そのヘッダをインクルードしている全ての .cpp が再コンパイルされる

「再コンパイルされる」じゃねえぞ。
「しなければ問題が起きる」もしくは「実害の有無に関わらず、すべきである」のいずれかの問題だ。馬鹿が。

33:デフォルトの名無しさん
12/10/10 22:51:39.57
>>31
ぽいんぽる

34:デフォルトの名無しさん
12/10/10 23:15:12.62
今日はウソツキ村からの観光客がやけに多かったですね

35:デフォルトの名無しさん
12/10/10 23:18:56.62
>>31
URLリンク(www.nicovideo.jp)

36:デフォルトの名無しさん
12/10/10 23:20:44.61
>>31
URLリンク(translate.google.co.jp)

左の窓の下のスピーカーのアイコンクリックしてみ

37:デフォルトの名無しさん
12/10/10 23:29:03.82
>>32
まともなプログラマなら「通常は」依存関係を元に
自動的に再コンパイルされるような環境でプログラムするので
「通常は」再コンパイルされる

理論的に再コンパイルしなくても実害がない場合もそりゃあるが(メンバ関数だけ増やした時とか)、
それでもまともな環境でプログラムしてりゃ通常は再コンパイルされる

38:デフォルトの名無しさん
12/10/10 23:30:37.25
cppファイルあるのにprivateメンバなんて書くか普通?
普通に匿名名前空間に関数おけばいいだろ


39:デフォルトの名無しさん
12/10/10 23:54:08.10
publicメンバにしか触れないじゃん

40:デフォルトの名無しさん
12/10/11 00:05:14.51
>>39
こいつ最高にアホ

41:デフォルトの名無しさん
12/10/11 00:06:51.78
メンバ変数への参照を渡すって事か
正直プログラムが読み辛くなるだけだぞ

42:デフォルトの名無しさん
12/10/11 00:13:16.08
>>41
いっぺんやってみればわかるけど関数にしたほうがわかりやすい
引数で副作用を絞れるからバグも減るから良いことしかない


43:デフォルトの名無しさん
12/10/11 00:38:45.61
>>37
再コンパイルされるなら何も問題ないんじゃない?

44:デフォルトの名無しさん
12/10/11 01:49:11.69
>>25
・生成するインスタンスの数を実行時に決定できる
・インスタンスの寿命をより自由に制御できる

45:デフォルトの名無しさん
12/10/11 06:49:02.39
全コンパイルに数時間かかるシステムの構築に関わればpimplのありがたみがわかるよ


46:デフォルトの名無しさん
12/10/11 06:51:22.72
>>32
それは確かに問題だろうが、
今の論点とは関係ないだろ

47:デフォルトの名無しさん
12/10/11 07:31:15.33
>>43
時間がかかる

48:デフォルトの名無しさん
12/10/11 07:31:55.62
>>42
そんな変なプログラムは他の人が保守し辛い

49:デフォルトの名無しさん
12/10/11 08:44:31.29
>>48
そういう実装を好む会社と仕事をしたことがあるが、
完全に C の思想になっていると感じた

50:デフォルトの名無しさん
12/10/11 09:50:35.03
なんでもかんでも自分でやりたい奴って思考がCだよな

51:デフォルトの名無しさん
12/10/11 09:52:55.22
>>50
確かに
Cはもう時代遅れになりかけている
それにもかかわらず高いシェアを未だに誇っているというのはCOBOLと同じで
老害が多いって事

52:デフォルトの名無しさん
12/10/11 10:59:55.01
COBOLは保守が主なんだから老害なんていったらバチが当たるぞ

53:デフォルトの名無しさん
12/10/11 11:04:36.12
保守してる奴は老害だろ

54:デフォルトの名無しさん
12/10/11 12:05:59.72
なんじゃそりゃ。アホかいな。

55:デフォルトの名無しさん
12/10/11 12:40:29.28
>>51
Cでなきゃ何でファームウエアやドライバを書くんだ
方言は当然ありとして
おまえら結局ファームエアもドライバも作りたくないって
仕事をえり好みしてるだけだろ

若いのがそんなていたらくであることが
今の製造業のピンチを招いたんだよ

56:デフォルトの名無しさん
12/10/11 12:41:42.58
>>55
典型的な老害思考
C++で書いてもCと同じように書けば問題ない

57:デフォルトの名無しさん
12/10/11 12:46:16.41
C++でかいたらでかくなるでしょ

58:デフォルトの名無しさん
12/10/11 12:47:31.06
小さくて速いのがいいのだ

59:デフォルトの名無しさん
12/10/11 12:49:38.71
>>57
Cの機能だけを使えばならねーよアホ
使った事ねーんだな

60:デフォルトの名無しさん
12/10/11 12:51:40.95
>>58
かぶりものは?

61:デフォルトの名無しさん
12/10/11 13:32:56.35
>>56
方言はありだと言っただろう
Cの流れを汲む言語をすべて含むという意味だ
おまえせいぜい片手できくくらいしか知らねえだろ

それから C++ の C にない機能をふんだんに使っても
ヘボがバカやらない限り問題なんか起きねえよ
要注意は例外と RTTI くらいだがコンパイラのマニュアルをよく読むこった

62:デフォルトの名無しさん
12/10/11 13:34:57.28
>>61
それ論理的におかしなことになってるだろ

63:デフォルトの名無しさん
12/10/11 13:39:10.13
>>50 「なんでもかんでも自分でやりたい奴って思考が(C++ではなく)Cだよな」
>>51 「確かに (C++と違って)Cはもう時代遅れになりかけている」「それにもかかわらず高いシェアを未だに誇っているというのはCOBOLと同じで老害が多いって事」
>>55 「Cでなきゃ何でファームウエアやドライバを書くんだ 方言は当然ありとして 」
>>56 「典型的な老害思考 C++で書いてもCと同じように書けば問題ない 」
>>61 「方言はありだと言っただろう Cの流れを汲む言語をすべて含むという意味だ (ゆえにC++はCに含む)」

64:デフォルトの名無しさん
12/10/11 13:40:15.17
61は頭悪そう

65:デフォルトの名無しさん
12/10/11 13:54:37.24
>>63
つまりアレか
C++ 独自の機能が C の何に相当するか見通せてないんだな
クロージャや intializer_list がおまえにとっては魔法の箱か

66:デフォルトの名無しさん
12/10/11 14:03:46.17
>>65
何そのちぐはぐな反応は

67:デフォルトの名無しさん
12/10/11 14:10:56.72
>>66
何だその荒唐無稽な反応は

68:デフォルトの名無しさん
12/10/11 18:45:59.59
>>66
何だその焼肉定食な反応は

69:デフォルトの名無しさん
12/10/11 20:14:59.88
>>57
C++で書くと大きくなる妄想乙

70:デフォルトの名無しさん
12/10/11 20:55:56.43
実際でかくなるでしょ

71:デフォルトの名無しさん
12/10/11 20:56:27.98
C++じゃだめだ

72:デフォルトの名無しさん
12/10/11 20:57:45.95
おなじ機能で、C版とC++版をつくってるよ。いつもC++のほうがでかい

73:デフォルトの名無しさん
12/10/11 21:00:51.40
コンパイラによるだろ
VCやgccはiostreamや例外を使わないとほとんど同じになっちゃうぞ

74:デフォルトの名無しさん
12/10/11 21:08:36.00
増加分の具体的な明細に立ち入ったことないやつがテキトーほざいてるだけだよな

75:デフォルトの名無しさん
12/10/11 22:24:39.39
例外処理は仕方ないとしても
IOstreamはライブラリとかじゃなく
別言語に移管し改めてitegrateすべき時期に来たと思うんだ

76:デフォルトの名無しさん
12/10/11 22:27:23.16
自分一人で勝手にしてれば?

77:デフォルトの名無しさん
12/10/12 00:00:08.10
>>72
そりゃSTLをたっぷり使うとか、大きくなるような書き方をしてるだけだ

78:デフォルトの名無しさん
12/10/12 01:20:31.64
>>48
その程度で保守できなくなるなんてよほどの低脳なんだなぁ

class Type {
OtherType m;
void PrivateFunc();
public:
void Method();
};

void Type::PrivateFunc() { m.DoSomething(); }
void Type::Method() { PrivateFunc(); }

これを

class Type {
OtherType m;
public: void Method();
};

static void PrivateFunc(OtherType & m) { m.DoSomething(); }
void Type::Method() { PrivateFunc(m); }

こうすればコンパイルコストの削減、不要なメンバアクセスによる副作用の予防といった明らかなメリットがデメリットなしに見込める
たったそれだけの話なのに何がそんなに難しいんだろうか?
低IQの脳みそって本当にかわいそうだわ



79:デフォルトの名無しさん
12/10/12 01:44:36.84
>>78
コンパイルコストごときを理由にそういう設計が振り回されるか

80:デフォルトの名無しさん
12/10/12 01:46:46.23
>>79
逆に聞くがこれを否定する論理的な理由は?

81:デフォルトの名無しさん
12/10/12 01:47:18.00
class Type {
OtherType m;
public: void Method() { m.DoSomething(); }
};

これでいい

82:デフォルトの名無しさん
12/10/12 01:48:53.40
>>80
privateメソッドの仕様はクラスの仕様と不可分
クラス外で定義するのは危ないよな

83:デフォルトの名無しさん
12/10/12 01:50:30.01
>>78
あなたの言ってるメリットは、実装以降どころかコンパイル以降の話。
それらの都合のためにオブジェクト指向を否定するかのごとく設計に犠牲を強いているようだ。

84:デフォルトの名無しさん
12/10/12 01:56:45.12
>>82
危ないって?
匿名関数のどこが危ないの?


85:デフォルトの名無しさん
12/10/12 01:58:13.95
>>83
C++はもともと純粋なオブジェクト指向言語じゃないですよ?
あなたのほうこそ自分の勝手な都合でC++の能力を犠牲にしていませんか?


86:デフォルトの名無しさん
12/10/12 02:17:04.10
>>78
> static void PrivateFunc(OtherType & m) { m.DoSomething(); }

これが綺麗に見えるのは幻覚。
使っているprivateメンバー変数がたった一個だから。
このメンバーも使おう。さらにこれも、と追加していったとき、
privateの範囲内で当該クラスに閉じた世界の話になるはずなのに、
そのやり方していたら、そのクラスとクラス外の様々なstatic関数に広く影響を与えることになる。
そんな作り方してると内部仕様の変更に対する隠れた抵抗勢力になる。
そういうのでがんじがらめにしておくと、悪い方への変化はしやすいけど、良い方への変化はしにくくなる。
それは誰かを陥れるために使う戦略で、日常は使うな。

87:デフォルトの名無しさん
12/10/12 02:19:03.43
>>78
君はその道を突き進めばいいと思うよ
俺はついていかないけど
でもそっちの世界の人達も頑張って欲しい

88:デフォルトの名無しさん
12/10/12 03:59:30.89
>>86
ねえ君はアホなの?
短いレスでサンプルを示すためにあえて十分小さい例を出しただけなのに、それに噛み付いてくるなんて言葉遊び覚えたばかりの中学生みたいな反応で笑えるね
メンバーが増えれば増えるほど匿名関数のほうが有利になるんだけど?
増えたメンバーのうちその処理にひつようなメンバのみにアクセスを絞ることができるから
メンバ関数を直接書くより遥かに信頼性、安全性が高い
馬鹿はメンバ関数そのまま書いて無秩序にメンバにアクセスし整合性を保つ難易度を上げている

というかそもそも君はなにか勘違いしてるだろ
この匿名関数はそのクラスのプライベートメンバとして作られるのだから
クラスの内部仕様の変更でこの匿名関数に変更があってもクラスの外部には1バイトも影響しないんだが?
まずそこから理解することからはじめよう
なにごとも最初の一歩が肝心だよ
君は初心者かもしれないけどそこはちゃんと押さえておこう。いいね?

89:デフォルトの名無しさん
12/10/12 05:57:25.74
>>88
ひとまとめにしてなんかの意味を持たせようというところにクラスの意義があり、それはprivateなメソッド(メンバ関数)とて同じことなのだが、
それをわざわざstaticな関数にばらし、クラスのメンバ変数の形にばらし、と要素にくだり細部フォーカスとするのは、それではなんのためのクラスか首をかしげるのだが?
privateなメソッドであっても、そのクラスがクラスの形を保っていることに意味があるんでは?

それともprivateな処理は、クラスというまとまりをばらしてしまうことの方がおおいのか?
static な関数の引数に、クラスのメンバ関数がずらずら並ぶのは、アクセスを明示する意味ではいいのだが、他にメリットがみえてこない
むしろ「まとまり」を欠いた散漫なコードにみえる

90:デフォルトの名無しさん
12/10/12 14:27:48.59
コンパイルを速くするためだけにクラスをばらばらにする奴とは一緒に仕事したくないな

91:デフォルトの名無しさん
12/10/12 14:32:17.15
>>78
それでコンパイルコスト削減になってると思うのがチャンチャラおかしい

92:デフォルトの名無しさん
12/10/12 20:14:50.53
>>78
もう大人しくCでプログラム組んでろ

93:デフォルトの名無しさん
12/10/12 20:44:04.42
今日もC++に助けられました。感謝。
コンパイラの性能、強い型、程よい暗黙の変換などがなければ、困難なデバッグを諦めていたことでしょう。
Javascriptのデバッグとか考えただけで身の毛もよだつ・・・


94:デフォルトの名無しさん
12/10/12 20:52:14.91
プロファイラでお薦めありませんか?
struct A {
void func1();
void func2();
};
みたいなのがあったときに、単純にそれぞれにかかった合計時間が計測できればいいのですが・・・

95:デフォルトの名無しさん
12/10/12 20:53:55.17
URLリンク(p11.chip.jp)

96:デフォルトの名無しさん
12/10/12 22:12:35.95
>>78
典型的なCに染まった老害だろ
たまに現場にいるけどここ十数年ほどは干され傾向だろ

97:デフォルトの名無しさん
12/10/13 00:13:31.87
>>89
教科書を開いてクラスをもういちど勉強したほうがいいよ
クラスの重要チェックポイントをいくつかあげるとすると
・公開されたプロパティと処理の一箇所への集中
・カプセル化による詳細の隠蔽
・継承とポリモーフィズム
なんだよね
要するに非公開であるべきクラスの実装の詳細がどうなってるのかなんてものはクラスの概念にはまったく必要ない話なんだよ
privateなメンバ関数であろうが外部の匿名関数だろうがその選択によってクラスとして正しいか正しくないかなんてのは変わらないんだ
だとしたらこの部分は純粋にその機能としての優位性で選ぶのが正しいIT技術者のあるべき姿だろう
君もここで、またひとつ勉強になったね

第二段落の質問への答えだが、プライベートな処理はまとまりをばらすことが非常に多いよ
それは当然だろう。クラスの公開機能を実装するためのサブ処理をメンバ関数や匿名関数で行うのだから
それがクラスの一部分だけを処理するのは当然の話だ
それと、君は『むしろ「まとまり」を欠いた散漫なコード』にみえるというが
目に見えないだけで不要な変数にも平気でアクセスでき、副作用を生み出しかねない状況のほうが
遥かにまとまりの無い不安定な状況であるということを自覚しようね
おそらくだが、君はいまだに、コードの「見た目」が気に入らないだけでその機能的な部分に美意識を持っていないように見受けられる
それは識別子を並べたときに不ぞろいだ、汚い、と感じ無駄なスペースやタブでこぎれいに並べようとする無意味で低俗な美意識と同じことだよ
そういうのは素人から中級者にありがちなことなのだが、しっかりと勉強し成長すればコードの見た目より機能的な合理性と美しさというものを理解し優先するようになる
君は今はまだその段階に無いが君もいずれ理解できるだろうから心配しなくてもいい

>>91
君のプロジェクトにある適当な良く使われているクラスをピックアップし
①新しいプライベートメンバ関数をヘッダに追加し、cppに実装を書く
②新しい匿名関数をcppに書く
場合に分けてリビルドしたときのコンパイルコストを実測してみなさい
それで判らないなら君は時計を見る能力を持っていないことになるので病院で診断を受けることをお勧めする

98:デフォルトの名無しさん
12/10/13 00:28:49.55
>>97
だらだらと長くて美しくない文章を書く人ですね

99:デフォルトの名無しさん
12/10/13 00:31:02.54
URLリンク(toro.open2ch.net)
みんなこっち行こうず
IDあるほうがまだマシ

100:デフォルトの名無しさん
12/10/13 00:34:45.81
>>99
ここにコードやアイデア書くと運営にパクられるよ

101:デフォルトの名無しさん
12/10/13 00:37:58.72
ちょっと質問だけど、その cpp に記述する匿名関数には、
参照する可能性のあるすべての private なメンバ変数を引数として渡すの?

ちょうど最近、private な関数をヘッダに書かなくてもいい方法ないかなーって思ってたところなんで参考にしたい
メンバ変数が多くなったら大変そうに見える

また、その匿名関数から見ると、
渡された引数がメンバ変数かどうかが分からないから見難くなりそう。どのあたりどうなんだろう。
public なメンバ変数は this を渡してアクセス、private なメンバ変数は個別で引数として…
それならもう全部引数で渡すことにして、this を渡す必要なくね?ってなってまた迷いそう

102:デフォルトの名無しさん
12/10/13 00:41:19.79
実はオブジェクト指向ってしっくりこないんです!

103:デフォルトの名無しさん
12/10/13 01:30:43.65
>>101
なんか難しく考えすぎてないか?
普通にいつも通りに関数を書くだけだぞ?
違いは匿名か否かってだけ


104:デフォルトの名無しさん
12/10/13 03:27:48.70
まあそこまで隠したいなら
COMインターフェイス的な
抽象クラス使った方がいいんじゃないの?


105:デフォルトの名無しさん
12/10/13 08:31:40.73
>>103
その関数の中でprotectedメンバは呼べないがな

106:89
12/10/13 10:38:41.06
>>97
すでに手元に一定のクラスライブラリがあって、それを上位クラスに組み込むとき、もともとあったクラスを全部書き直すの?
すべてのアプリケーションを一からフルスクラッチで書き起こすやりかたなの?

107:デフォルトの名無しさん
12/10/13 10:49:42.62
匿名関数が必要だと思う時点でクラスが肥大化してる

108:デフォルトの名無しさん
12/10/13 11:25:10.64
map<K,V>::insert

map<K,V>::emplace
の違いが分かりません。
後者はどういうときに優位性を発揮するのでしょうか?

109:デフォルトの名無しさん
12/10/13 11:39:22.57
hoge

110:デフォルトの名無しさん
12/10/13 11:44:48.70
>>108
文字通りemplaceしたいときに優位性を発揮するんだよ
emplaceの意味わかる?辞書で調べた?話はそこからだよ


111:デフォルトの名無しさん
12/10/13 11:52:50.51
>>110
emplace=設置する
insert=挿入する

・・・違いがわからん(汗

112:デフォルトの名無しさん
12/10/13 12:00:38.64
だから設置するってんなら設置するんだよ
設置したいときに挿入したら違うことしてることになるだろ
お前は尻コキしたいときに膣に入れるのか?
ちんちんを尻の上に設置するのとちんちんを挿入することの区別もつかないのか?
いやはやまったく、最近の若者の言語感覚の欠落はまことに嘆かわしいことだな

113:デフォルトの名無しさん
12/10/13 12:08:57.16
insertはすでに要素があったら何もしない仕様じゃなかったっけ?
だからinsertしか使ったことなかった。
emplaceで要素があったらどうなるのですか?
要素がないときに効率良くなるのですか?

114:デフォルトの名無しさん
12/10/13 12:21:34.45
合ってるか分からないけど、

std::map<std::string, int> m;

m.insert(std::make_pair("1", 2)); // pairの作成/コピー(ムーブ)/破棄が発生
m.emplace("1", 2); // emplaceの中で直接mapが保持するオブジェクトを作る

簡潔でパフォーマンス的にもよろしい?

115:デフォルトの名無しさん
12/10/13 12:25:22.81
>>114
C++11ならinsertでもムーブが呼ばれて、パフォーマンスにほとんど違いがなさそうなんだけど・・・


116:デフォルトの名無しさん
12/10/13 12:45:04.48
じゃあ簡潔なんだ。

117:デフォルトの名無しさん
12/10/13 13:38:49.02
std::make_pairって書かなくて済む

118:デフォルトの名無しさん
12/10/13 13:47:40.02
ムーブないクラスでもムーブと同等のパフォーマンスを出せるしコピーできなくても入れれる

119:デフォルトの名無しさん
12/10/13 13:48:07.56
計ったら、ムーブコンストラクタにかかる時間がそのままinsertとemplaceの差になった。
メンバが多いと、それなりに差は出た。

120:デフォルトの名無しさん
12/10/13 13:50:18.59
ムーブはmovableなクラスにしか機能しないしコピー・ムーブ共に不可のクラスをコンテナに入れられるとかあるんよ

121:デフォルトの名無しさん
12/10/13 13:52:13.90
emplaceイケメン

122:デフォルトの名無しさん
12/10/13 13:59:17.17
C#みたいにプロパティも仮想化できないの?
struct Interface { virtual int & Value() = 0; };
こういうことはできないこともないんだけどC#でブイブイ言わせてる身としては
どうしてもobj.Value() = 100;の()が美的感覚にかなわなくて許せないわけ

123:デフォルトの名無しさん
12/10/13 14:13:02.82
C++的にはobj.Value(100);にすべき

124:デフォルトの名無しさん
12/10/13 14:42:17.71
郷に入りては郷に従え
URLリンク(www.pro.or.jp) にあげられているのと同じところを目指すのかい?

125:デフォルトの名無しさん
12/10/13 14:51:18.38
emplaceに関する議論ありがとうございました。
特に計測して下さった方、助かりました。

126:デフォルトの名無しさん
12/10/13 14:57:55.11
>>122
>>97

127:デフォルトの名無しさん
12/10/13 15:13:19.31
>>122
美的感覚以前に
参照を返せる場合しか使えないぞそれ
setter を呼ぶクラスを返す手もあるけど

128:デフォルトの名無しさん
12/10/13 15:42:52.28
std::chronoについて質問させてください。
duration_cast<seconds>(sec).count()
が返す型がドキュメントを見ると
constexpr rep count() const;
となっているのですが、これがstd::chrono::repというわけではないようです。
どういう意味ですか?

また、上のコードでdurationのcount()をするとただの整数になってしまうのですが、
"6.532 sec elapsed"みたいに結果を小数で表示したいとき
「millisecondsで取得してcountして1000.0で割る」みたいなことを手でやる必要があるのでしょうか?

129:デフォルトの名無しさん
12/10/13 15:58:58.76
前半わかりにくいので簡単に書きます。
auto s = duration_cast<seconds>(sec).count();
をauto使わず明示的に型を書きたいです。どう書くのが正解ですか?

130:デフォルトの名無しさん
12/10/13 16:11:23.84
int

131:デフォルトの名無しさん
12/10/13 16:18:23.27
>>130
なるほど。考える前にやってみるべきでした。
しかしrepってどういう意味だったんだ・・・?

132:デフォルトの名無しさん
12/10/13 17:35:01.19
>>131
> しかしrepってどういう意味だったんだ・・・?
representation(表現)、durationクラスの中で値を保持する型(値をrep型で表現する)。
durationの中の話だからstd::chrono::seconds::repとかで取得する。
repが実数型だったら1.5秒とか表現できるようになる。

133:デフォルトの名無しさん
12/10/14 10:54:22.50
class ABC;
list<ABC*> ABCList;
ABC abc;
ABCList.push_back(abc);
ってあったときに
ABCList.erase(abc);
ってすれば消えてくれるし、詰めてくれる??

134:デフォルトの名無しさん
12/10/14 10:57:15.57
>>133
コンパイルしてみ
多分エラー出るから

135:デフォルトの名無しさん
12/10/14 10:57:44.64
消えてくれるしつめてくれるよ

136:デフォルトの名無しさん
12/10/14 11:01:16.95
>>133
あ、些細なタイポなら気にしないよ
ただ、そのコードだと何が聞きたいのかポイントが判断できないんだ



137:デフォルトの名無しさん
12/10/14 11:02:50.80
erase じゃなくて removeだった

138:デフォルトの名無しさん
12/10/14 11:04:23.96
>>133
せめて

ABCList.push_back(&abc);

だろ

こういう用途にはboost::ptr_listを使わないとデストラクタ呼んでくれないぞ
既存のオブジェクトを渡した時はいいのかもしれないけどどちらにしろ後始末は
自分でしなければならない

ABCList.push_back(new ABC);

みたいな場合は確実にメモリリークを起こす

それかshared_ptrで包めばいいな

139:デフォルトの名無しさん
12/10/14 11:04:33.24
>>136
えーと、listの中間の要素を削除したい
あとポインタだったからこうでした
ABCList.push_back(&abc);

140:デフォルトの名無しさん
12/10/14 11:05:34.34
すいません、removeでした。要素は削除したいですが、ポインタ先は削除したくありません。

141:デフォルトの名無しさん
12/10/14 11:06:58.37
>>140
であれば、問題ないよ

142:デフォルトの名無しさん
12/10/14 11:08:03.91
>>140
ポインタ先を保持してるコンテナやポインタ変数が他に存在しないのなら、メモリリーク起こしてるぞ
よく考えてみ

143:デフォルトの名無しさん
12/10/14 11:10:34.62
メモリリークを起こすかどうかはいま問題にしてない
今はリストから削除されるかどうかを聞いてるだけ


144:デフォルトの名無しさん
12/10/14 11:11:13.82
>>142
大丈夫そうです。
ありがとうございました。

145:デフォルトの名無しさん
12/10/14 11:12:11.66
std::remove自体は削除したい要素を後ろに集めるだけだからその時点ではメモリリークは
していない

しかしその後erase()したらメモリリークしてる
eraseする前に自分でデストラクタを呼び出してその後deleteするのなら分かるけど
悪い事は言わないからboost::ptr_list使っとけ

146:デフォルトの名無しさん
12/10/14 11:14:45.97
std::listの話してるのにboost::ptr_listの話を始める馬鹿

147:デフォルトの名無しさん
12/10/14 11:15:58.54
>std::remove自体は削除したい要素を後ろに集める
std::list::remove?

148:デフォルトの名無しさん
12/10/14 11:20:59.05
ここまでメモリリークに対して無関心な奴が多いとは思わなかった

149:デフォルトの名無しさん
12/10/14 11:22:21.46
所有じゃなくて利用したいだけなんだからいいんじゃね?

150:デフォルトの名無しさん
12/10/14 11:22:31.12
いまどきリークしたらアウトなんてダサいつくりでやってんの?

151:デフォルトの名無しさん
12/10/14 11:23:40.98
std::listはメンバ関数にlist::remove()を持っているな

これは多分splice()何かを内部的に使ってstd::remove()より効率的に削除するメンバ関数だろう
しかしポインタをコンテナに入れる時はいつも気をつけろよ

152:デフォルトの名無しさん
12/10/14 11:24:23.47
>>148
お前の理解レベルが低いだけ
そこは論点じゃない

153:デフォルトの名無しさん
12/10/14 11:25:25.03
小さいサンプルでリークが起きてる!とかアホかよ

154:デフォルトの名無しさん
12/10/14 11:26:35.86
>>153
小さいサンプルでリークを起こす奴はそのまま大きなプログラムでもリークを起こす

155:デフォルトの名無しさん
12/10/14 11:27:06.75
PGってこういう融通利かないって言うか空気読めないって言うか文脈読めないっていうかそういう頭固い人多いよね


156:デフォルトの名無しさん
12/10/14 11:28:24.32
人格攻撃する前にバグ出すなよ

157:デフォルトの名無しさん
12/10/14 11:29:41.42
悪いけど回りと意思疎通・協調できない屑はリーク起こすやつより危険なんで今すぐ消えてくれないかな?

158:デフォルトの名無しさん
12/10/14 11:30:32.14
どうもスレ乱立荒らしが起きる前からこういうおかしな粘着がいるなあ

159:デフォルトの名無しさん
12/10/14 11:31:21.58
>>157
意思疎通・協調すればバグ出してもいいってか?アホかお前

160:デフォルトの名無しさん
12/10/14 11:31:36.42
別に多くはないよ、頭固い奴はそこらじゅうにいるし。

>>148 は、単にメモリリークしか突っ込めない奴がそこは議論の対象外と指摘されて、
ムキーってなってるだけでしょ。

161:デフォルトの名無しさん
12/10/14 11:33:15.13
>>159
意思疎通・協調できるやつは、指摘すればバグ直してくれるし、
そのうちバグも出さなくなるから。

162:デフォルトの名無しさん
12/10/14 11:33:19.60
>>159
そうだよ
意思疎通できるやつなら先輩が指導して修正できる
お前みたいな屑は修正効かないから使い物にならない
だから最近の企業は面接でそういうカスをはじいてるんだけど知らなかった?
就職するときは苦労するよお前さんいまから覚悟したほうがいい

163:デフォルトの名無しさん
12/10/14 11:33:23.13
133なんですけど、
一応newは別の場所でやって別の場所で保管して、その場所からlistにポインタだけpush_backしてます。
これをremoveするとメモリリークになりますか?

164:デフォルトの名無しさん
12/10/14 11:33:30.60
ああいうコードを見てすぐに「危険」を感じない奴はそのうち大きな失敗をしでかす

165:デフォルトの名無しさん
12/10/14 11:34:27.66
>>163
newしたオブジェクトを指すポインタを他の場所で保存していればおk

166:デフォルトの名無しさん
12/10/14 11:35:25.56
>>162
こういう「屑」とか「カス」って言葉を多用する奴は自分自身が「屑」であり「カス」だと
全く気づいてないんだよなあ

167:デフォルトの名無しさん
12/10/14 11:36:40.43
>>164
そこからすでにズレてんだよなお前
リークしてるのなんてみんなわかってるけど、質問者の意図・論点に集中してしゃべってんの
お前はこんな簡単なことも判らないからコミュ障の屑って呼ばれてるんだけど自覚したほうがいいよ

168:デフォルトの名無しさん
12/10/14 11:37:01.13
なにか、自分のコードが原因で荒れたのか・・・
>>165
ありがとうございます。

169:デフォルトの名無しさん
12/10/14 11:37:29.78
>>167
お前もクズだな
よくわかった

170:デフォルトの名無しさん
12/10/14 11:37:34.84
>>167
え!?

171:デフォルトの名無しさん
12/10/14 11:39:40.68
人格攻撃する奴はこの板にいなかったろ
どうも最近この板おかしい

172:デフォルトの名無しさん
12/10/14 11:40:09.71
これではっきりしたな
shared_ptrを使わないやつは最底辺のゴミ

173:デフォルトの名無しさん
12/10/14 11:41:13.90
>>168
気にしない、気にしない
いつもの事だから

174:デフォルトの名無しさん
12/10/14 11:41:43.01
>>162
そうやって人の手を煩わしているわけですね
分かりやすいなあ
お前多分会社の重荷になってるよ
リストラ候補に入れられてるな

175:デフォルトの名無しさん
12/10/14 11:43:38.79
>>174
煩わせる?
笑わせんな教育は仕事していくうちでもっとも重要なファクターだ
そこをわずらわしいとかめんどくさがってる会社に未来は無いよ
ようするにおまえの未来もないってことな


176:デフォルトの名無しさん
12/10/14 11:53:34.11
この馬鹿(>>150)、何言ってんだ?

177:デフォルトの名無しさん
12/10/14 11:54:06.47
リークリークってアホか
オブジェクトの管理は別の場所でやってて
そこへの参照をstd::listに適宜入れて使いたいって話なのに
なんでstd::listでメモリ管理するという話になってんだよ

178:デフォルトの名無しさん
12/10/14 11:55:11.14
「そもそもメモリーリーク起こすんじゃねこのコード」派と
「素直に質問に答えるだけでいいんだよハゲ」派が対立してるな……

179:デフォルトの名無しさん
12/10/14 11:55:16.31
>>175
おまえさあ、ニートの癖によく言うよ
何が最も重要なファクターだよ

>>177
それは後出しじゃんけんで出てきた情報だろうが
最初は書いてなかったぞ

180:デフォルトの名無しさん
12/10/14 11:56:01.73
>>179
要素の追加にnew使ってなかっただろwww
何見てんだよ

181:デフォルトの名無しさん
12/10/14 11:56:41.75
>>178
簡単にまとめるとそういう事だな
「質問に答えるだけでいいんだよ」派が「おいそれリーク起こしてるぞ」派を
必要以上の汚い言葉で罵倒してるだけ
こいつらの方がよほどコミュ障なのに気づいてない構図

182:デフォルトの名無しさん
12/10/14 11:58:14.36
>>181
>>133はそもそもリークなんて起こしてないだろ
newしてないんだから
>>138が勝手にnewしてリーク起こすって騒いでるだけ

183:デフォルトの名無しさん
12/10/14 11:58:18.76
>>180
ああいうコードが単なるサンプルである事にも気付けないのか?
実際後からnewしてる情報が出てきただろ

184:デフォルトの名無しさん
12/10/14 11:58:21.61
>>179
最初はnewしてメモリ確保してないけど…

185:デフォルトの名無しさん
12/10/14 11:58:48.14
>>183
その情報と同時に別な所でメモリ管理してるって言ってるじゃんw

186:デフォルトの名無しさん
12/10/14 11:59:02.72
頭が固いのは果たしてどちらでしょうねー

187:デフォルトの名無しさん
12/10/14 11:59:39.95
>>185
お前頭悪すぎる
何を話してもワンテンポずれて遅れてる

188:デフォルトの名無しさん
12/10/14 12:00:40.85
両派の会話に加わらないことがクールであると思ってる奴もいるよな

189:デフォルトの名無しさん
12/10/14 12:01:52.90
>>188
俺はいつもそうだが
突然噛み付かれたので応酬しただけだ
なんなのこいつら
絶対社会人じゃないだろ

190:デフォルトの名無しさん
12/10/14 12:04:31.75
>>187
スタックかメンバ変数で確保した形のサンプルに対して
boost::ptr_listを使わないとデストラクタ呼んでくれないぞと言っちゃう人は
さぞかし頭がいいんでちゅね

191:デフォルトの名無しさん
12/10/14 12:06:05.41
>>190
おいいい加減に話の流れに付いてこいよ
粘着

192:デフォルトの名無しさん
12/10/14 12:06:53.25
>>187
>何を話してもワンテンポずれて遅れてる

初めからあさっての方向の奴よりマシ (w

>>189
底辺ドカタだろ

193:デフォルトの名無しさん
12/10/14 12:08:46.66
>>192
あさってじゃないんだが
いつもこういう場面でリークを後から起こすのを経験で知ってんだよ
後からポインタを保存してるって話が出てきたからそれは解決したけどな

ドカタ?お前スレ乱立荒らししてたap.seikyou.ne.jpの大学生だろ?
就職決まらなくて他人に当たり散らすな

194:デフォルトの名無しさん
12/10/14 12:10:10.65
>>188
ポイントポイントで燃料投下派もいるけど、何か?

195:デフォルトの名無しさん
12/10/14 12:11:03.72
ム板って柔軟性ないやつばっかで簡単に荒せるから楽しいわ

196:デフォルトの名無しさん
12/10/14 12:11:54.92
あーやっぱり
こいつが荒らしてた犯人か

197:デフォルトの名無しさん
12/10/14 12:13:20.31
早速荒らしスレ一つ立ってるしww
分かりやす過ぎる
ワンパターンなんだよお前

198:デフォルトの名無しさん
12/10/14 12:14:27.27
ちっ、バレたか

199:デフォルトの名無しさん
12/10/14 12:15:23.93
悔しいからと言って

スレ立てるまでもない質問はここで 121匹目
スレリンク(tech板)

643 名前:デフォルトの名無しさん[sage] 投稿日:2012/10/14(日) 12:10:09.68
馬鹿には無理

こんな所まで当たり散らすなよ
お前社会に出れないわ
確信した
どうせそのうち凶悪犯罪でも起こすんだろうな

200:デフォルトの名無しさん
12/10/14 12:20:29.70
沸点ひくいねぇ
プログラマってそんなストレスたまんの?


201:デフォルトの名無しさん
12/10/14 12:39:22.77
>>193
> いつもこういう場面でリークを後から起こすのを経験で知ってんだよ

それを自分しか知らないと思い込んでるところが、あさってなんだよ (w

202:デフォルトの名無しさん
12/10/14 12:40:39.32
そこそこ知識はあるようだけど就職決まらないでしょ?
その原因のすべてはお前自身にあるんで

203:デフォルトの名無しさん
12/10/14 12:44:20.38
>>133
ま、shared_ptrを使う(ABCListの要素もABCのshared_ptrにする)のが一般的にbetter
ただしもちろんナマポよりは速度性能とかメモリ消費とかが劣化するから、
(特にマルチスレッド対応版shared_ptrは遅い恐れが大きい
それがボトルネックになるようなら、>133のコードでありかつ
オブジェクトの生成破棄を別のコンテナで管理する、とするのは十分有り得る


204:デフォルトの名無しさん
12/10/14 12:52:57.31
ちゅーか、個々の要素ごとに(デストラ+領域開放)を繰り返し呼ぶとか場合によっては遅すぎて話にならないから
デストラだけ呼んだ後領域全体を一気に開放するとか、
そもそもデストラが要らない型にしていきなり領域全体を一気に開放するとか、
そういうアロケータ/デアロケータを設けることも分野によってはわりと普通


205:デフォルトの名無しさん
12/10/14 12:55:20.57
分野とか関係なしに入門書レベルの基本テクニックだろ

206:デフォルトの名無しさん
12/10/14 13:07:02.03
>>193, >>202
誰も言っていない就職をいきなり持ち出すところ見ると、相当苦労したんだな、可愛そうに。
同情してやるよ (w

207:デフォルトの名無しさん
12/10/14 13:10:04.75
おれ13卒だけど今年はぬるゲーだったよ?
半月ぐらいで大手メーカー決まったしさすがにNNTはもういないでしょ

208:デフォルトの名無しさん
12/10/14 19:05:29.02
×開放
○解放

209:デフォルトの名無しさん
12/10/14 20:57:48.47
生協ネットって大学生しか入れないだろ
なんで大学生が荒らす必要あんの?

210:デフォルトの名無しさん
12/10/14 21:51:39.80
>>209
そこにコミュニティがあるからだ

211:デフォルトの名無しさん
12/10/14 21:59:19.48
荒らしには物を言う権利なし

212:デフォルトの名無しさん
12/10/14 22:00:28.00
大学生という生き物は社会人が考えているより遥かに暇で狂気に満ちた生き物なのだ
彼らに社会人の常識は通用しない。そもそも休日が週3日以上あってもおかしく無い生き物と職業プログラマが理解しあえるはずが無い

213:デフォルトの名無しさん
12/10/14 22:41:36.12
逆の意味でもまた然り。
深夜も灯りの絶えない、労働基準法が適用されない世界。

214:デフォルトの名無しさん
12/10/14 22:44:50.56
だからと言って荒らしていい道理はどこにもない
人に迷惑を掛ける大学生は生きてる価値ないよ

215:デフォルトの名無しさん
12/10/14 22:46:03.54
本当にそうだろうか
大学生はまだ未来があり価値がある可能性を持っている
だがプログラマに未来は無くあるのは暗闇だけだ
本当に生きている価値がないのはどちらだ


216:デフォルトの名無しさん
12/10/14 22:48:41.41
ま、どちらにせよ、荒らしはイクナイ

217:デフォルトの名無しさん
12/10/14 23:17:53.52
荒らす大学生に未来www価値wwww

犯罪者になって牢屋に入る未来だろが

218:デフォルトの名無しさん
12/10/14 23:22:07.37
性格が悪いやつは案外出世する
この現実を君たちは幾度と無く見てきたはずだ
私も同じ立場の人間として君たちの悔しさは理解できる
だが世の中というものは不条理と理不尽の巨大な塊なのだ

219:デフォルトの名無しさん
12/10/14 23:24:16.32
そうだな
実際、いいヤツは苦労するし、早死にしそうだよな

220:デフォルトの名無しさん
12/10/14 23:30:40.28
反社会性人格障害の奴は早死するよ

URLリンク(merckmanual.jp)

>反社会性人格の人は、アルコール依存、薬物依存、性的に逸脱した行動、乱交、投獄
>といった問題を起こしやすい傾向があります。仕事に失敗しがちで、住居を転々と変える
>ケースもよくみられます。多くの場合、反社会的な行動、薬物などの乱用、離婚、肉体的
>虐待などの家族歴があり、小児期に情操面での養育放棄(ネグレクト)や虐待を経験して
>いることもあります。反社会性人格の人は一般の人に比べて寿命が短い傾向があります。

こういうわけだ

221:デフォルトの名無しさん
12/10/14 23:59:11.29
それは性格が悪いのとは違う

222:デフォルトの名無しさん
12/10/15 00:02:46.66
>>221
激しく同意

223:デフォルトの名無しさん
12/10/15 00:24:08.29
反社会性パーソナリティ障害は性格悪いぞ

宅間守とか酒鬼薔薇聖斗とか加藤智大が性格良いとでも?

224:デフォルトの名無しさん
12/10/15 00:59:51.65
必要条件と十分条件て知ってるか?

225:デフォルトの名無しさん
12/10/15 01:04:06.05
反社会性パーソナリティ障害が性格悪いのは十分条件

226:デフォルトの名無しさん
12/10/15 01:04:25.89
いや必要十分条件だな

227:デフォルトの名無しさん
12/10/15 01:07:20.94
>>226
お前は社会を知らなすぎ

228:デフォルトの名無しさん
12/10/15 01:22:11.55
>>226
失格

229:デフォルトの名無しさん
12/10/15 01:35:54.93
>>227>>228
自分の事が分かってないようだなuy

230:デフォルトの名無しさん
12/10/15 04:43:17.74
>>229
評価者の「自分がどうであるか」が関係するのか?

231:デフォルトの名無しさん
12/10/15 04:44:18.68
>>226
本当に「性格が悪い人は全て反社会性パーソナリティ障害である」と思ってるの?

232:デフォルトの名無しさん
12/10/15 05:11:27.38
>>230
狂ってる奴の評価はデタラメであてにならない

>>231
それを書いたのは俺じゃないな

反社会性パーソナリティ障害→性格が悪い→犯罪者

は間違いないが

性格が悪い→反社会性パーソナリティ障害

とは限らない

他にも

自己愛性パーソナリティ障害
境界性パーソナリティ障害
妄想性パーソナリティ障害
精神病質パーソナリティ障害
といろいろある

233:デフォルトの名無しさん
12/10/15 05:57:58.89
>>232
> それを書いたのは俺じゃないな

じゃあお前は関係ない。
「必要十分条件」などとほざく馬鹿に質問している。

234:デフォルトの名無しさん
12/10/15 06:01:28.91
まとめると

性格悪い=反社会性パーソナリティ障害=狂っている=そいつの評論はデタラメ

235:デフォルトの名無しさん
12/10/15 07:30:46.68
QZが変な奴を連れてきた‥‥
邪魔だかどっちももどっかいけ

236:デフォルトの名無しさん
12/10/15 08:38:25.60
何、またQが来てるのか

237:デフォルトの名無しさん
12/10/15 09:03:50.82
>>234
全然まとまってないなw

Qは自己愛性パーソナリティ障害で、Qが嫌われ者という事実は変わらない

238: ◆QZaw55cn4c
12/10/15 12:34:08.45
>>236
>>221

239:デフォルトの名無しさん
12/10/15 14:12:24.66
>>226
必要十分条件ということは
反社会性パーソナリティ障害→性格が悪い
性格が悪い→反社会性パーソナリティ障害
の両方が成り立つということか

240:デフォルトの名無しさん
12/10/16 11:28:56.17
いやいや、例外が1つでも合ったら必要十分条件は成り立たない。
そういうときは確率的必要十分条件が成り立つ。

241:デフォルトの名無しさん
12/10/16 11:55:14.37
お前らC++の話をしろ
クズの戯言に付き合うな

242:デフォルトの名無しさん
12/10/16 22:54:18.84
おいQ、そこに居るのは分かっている。
アールグレイ、ホットで。

243:デフォルトの名無しさん
12/10/17 20:58:24.82
G++ 4.3.4 です

struct B {
vector<int> vec;
vector<int>::iterator f() { return vec.begin(); }
};
はコンパイル通るのに
template <class T>
struct A {
vector<T> vec;
vector<T>::iterator f() { return vec.begin(); }
};
は以下のエラーメッセージでコンパイルが通りません
error: type 'std::vector<_Tp, std::allocator<_CharT> >' is not deriv ed from type 'A<T>'

対処法をお教えください。よろしくお願いします。

244:デフォルトの名無しさん
12/10/17 21:03:28.63
typename vector<T>::iterator f() { return vec.begin(); }
はどう?


245:デフォルトの名無しさん
12/10/17 21:03:42.97
typenameつけろ

246:デフォルトの名無しさん
12/10/17 21:07:36.91
まずエラーメッセージでぐぐれ

247:デフォルトの名無しさん
12/10/17 21:13:20.35
>>244-246
ありがとうございます >>244 で通りました
型名であることをコンパイラに教えないといけなかったのですね

248:デフォルトの名無しさん
12/10/18 02:22:14.69
URLリンク(book.mycom.co.jp)
このページの三目並べのプログラムを実行しようと、Mingwでfltkを導入し、Mingwでコンパイルして、exeファイルを製作したのですが、
出来たexeファイルを実行しようとしても、Visual C++ Runtime Library「This application has requested
the Runtime to terminate it an unusual way~」というエラーメッセージが出てきて、ファイルが実行出来なくなってしまいます。

簡単なFltkのライブラリを含んだものをコンパイルしたexe.ファイルは実行出来たので、Fltkには原因はないみたいです。
Visual c++の再頒布パッケージをダウンロードしたり、管理者権限で実行しても同じ結果になりました。
一体、何が足りないんでしょうか?
書籍に書かれたコードなので、コードが間違っているとも思えません。

249:デフォルトの名無しさん
12/10/18 06:42:10.88
>>248
つ 正誤表

250:デフォルトの名無しさん
12/10/18 08:16:24.49
>>243
コンパイラを新しくしろ。
最近のエラーメッセージはずっとまとも。

251:デフォルトの名無しさん
12/10/18 18:04:32.93
オーバーライドをしないように指定する継承ってできますか?

class IFoo {
public:
virtual void Func() = 0;
};

class FooBase : IFoo {
public:
void Func() { } // オーバーライドしたい
};

class FooEx : FooBase {
public:
void Func() { } // オーバーライドさせたくない
};


252:デフォルトの名無しさん
12/10/18 18:31:34.96
関数名変えろよ

253:デフォルトの名無しさん
12/10/18 18:47:33.81
>>251
11ならできる

254:デフォルトの名無しさん
12/10/18 22:28:20.33
C++で質問なんですが。
最近プログラムの高速化について調べているのですが
最近のCPUはどんどん高速化していって、キャッシュサイズ等も増えてきているが
メモリはパスの互換性の問題等から速度は昔とあまり変わっていないので
速いプログラムを書くにはメモリとあまりやりとりせずにCPUのキャッシュに乗せるのが
有効とあったのですが、プログラムでCPUのキャッシュに乗せるというのがイメージできません。
コードで明示的にキャッシュに乗せる事は出来るのでしょうか?それとも、キャッシュにのるサイズのデータなら
自動的にキャッシュを使われるようになっているのでしょうか?

255:デフォルトの名無しさん
12/10/18 22:31:36.73
>>254
コードとデータをキャッシュサイズより小さいものだけで回すように

256:デフォルトの名無しさん
12/10/18 22:34:54.29
最も多く回るループを小さくして、コードが全部キャッシュに入りますように

257:デフォルトの名無しさん
12/10/18 22:39:51.39
質問なんだけど詳しい人おしえて
ドライバの関数って普通はカーネル経由で呼ばれて、レジスタは気にする必要無いんじゃないの?
__interrupt__ってそのカーネルを書くときに使うやつじゃないの?
I/O用の関数をカーネルが持ってる場合はアセンブリ無くてもドライバ書けるんじゃないの?

258:デフォルトの名無しさん
12/10/18 22:58:23.05
全部コンパイラさんがよきにはからってくれる

259:デフォルトの名無しさん
12/10/18 23:13:48.22
こんな感じのconstついたり、つかなかったりを型で条件分けしたパターンがいくつも続く場合って
1つにまとめれないのでしょうか

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

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

260:デフォルトの名無しさん
12/10/19 01:30:51.11
内容による

261:デフォルトの名無しさん
12/10/19 12:37:22.76
>>254
キャッシュ自体は原則的にCPUが勝手に制御するから意識する必要はない。
ターゲットCPUが決まっていて、それのインストラクションを使える開発環境ならば、
幾つかの関数呼び出しでキャッシュの制御ができる場合もあるが。

先ずは実測してみて欲しい。食わせるデータによってランダムアクセスになるか
シーケンシャルアクセスになるか切り替わるようなプログラムを用意し、
そのプログラムの処理時間を記録するとキャッシュの効果が見えるだろう。

で、後はSoAかAoSか、演算量が多くなってもシーケンシャルアクセスの方が速いか、
そもそもコード自体が最適化によってベクタ化されて速くならないか、などを検討していくことになる。
いずれにしても、C++一般の話からは外れてくるので後は最適化スレにでも。

262:デフォルトの名無しさん
12/10/19 13:25:49.59
int* a,b int c,dがあります。
c,dはaとbの長さがあります
aとbの長さzとは*aをa[0] ,a[1],...と分解して
さらにa[0],[1],...を2進数列で分解してx_1,.......,x_32, y_1,...........
と分解したとき2進数列のz番目以下の値は定義されていることをいいます。
このときaのcまでの値後ろにbのdまでの値を付け加えたeを作りたいんですけど、
eに対してもまたfを付け加えてgを作ったりしなければなりません。
このときa,b,e,fのデータ構造を全て同じなものに書き換えて効率のよいものにしたいのですけど
どのようにしたらいいですか?

263:デフォルトの名無しさん
12/10/19 13:30:06.03
boost::dynamic_bitset みたいな物を再発明したいん?

264:デフォルトの名無しさん
12/10/19 13:31:57.09
日本語苦手でしたら英語で質問してもいいですよ

265:デフォルトの名無しさん
12/10/19 13:52:34.24
どんな操作をどのように効率のよいものにしたいのか不明

266:デフォルトの名無しさん
12/10/19 13:55:22.35
VC10 / VC11RCにて

std::wstring r1 = L"3445";

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

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

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

実行結果
3445
3445

任意の数字列にて、同じ数字が連続するものを"x"に置換したいのです。
この場合"3x5"になって欲しいんですが、何故マッチしないのでしょうか?

267:デフォルトの名無しさん
12/10/19 14:03:45.22
\\1

268:デフォルトの名無しさん
12/10/20 10:01:44.63
char a[20],b[20];
sscanf("deep/dir/tree/file.txt","%[^/]/%s.txt",a,b);
a="deep/dir/tree", b="file"にマッチさせたいのですが、
これだとはじめの/で止まってしまいます。できればscanfの範囲で解決策を教えて下さい。

もし無理な場合、
stringでfindを使えばよいことはすでにわかっています。
また、std::regexを使う方法は試していませんが興味があるのでぜひ提示してください。

269:デフォルトの名無しさん
12/10/20 11:38:46.97
またコピペか

270:デフォルトの名無しさん
12/10/20 12:42:10.01
コピペじゃないのに・・・
どうしてそう思った?

271:デフォルトの名無しさん
12/10/20 13:04:50.39
君頭大丈夫?

272:デフォルトの名無しさん
12/10/20 14:17:37.96
>興味があるのでぜひ提示してください
それくらい自分で調べろよ超絶低能役立たず。社会のガン細胞。C++と何の関係もないからまずどっかに消えてなくなれ。

273:デフォルトの名無しさん
12/10/20 15:06:16.20
自分で調べろゴミ

274:デフォルトの名無しさん
12/10/20 15:10:12.34

自分がゴミである事に気がついてないゴミ(笑)

275:デフォルトの名無しさん
12/10/20 15:10:15.98
プログラミング10数年にして今さら dynamic_cast を知ったんだが、
何が便利(どう使えばいい)か教えてくれ。

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

キャストしまくってポインタが返ってきたものだけ処理するとか…そんな書き方するのか…?

276:デフォルトの名無しさん
12/10/20 15:13:28.16
ダウンキャストやクロスキャストが出来るかどうか調べる

277:デフォルトの名無しさん
12/10/20 15:16:29.98
スレリンク(tech板:802番)
またコピペか

278:デフォルトの名無しさん
12/10/20 15:37:04.49
名前空間を利用する場合、どうやって説明するのが正しいの?

namespace A{
}

「名前空間 A を宣言する」
と言って良いものか・・・

279:デフォルトの名無しさん
12/10/20 15:49:50.13
消えろコピペ

280:デフォルトの名無しさん
12/10/20 15:50:26.66
template <class T>
class P{
 private:
  double hoge;
public:
  double Hoge(){ return hoge;}
};

double F(P<double> a, P<double> b){
  return a.Hoge() + b.Hoge();
}

テンプレート型のクラスを引数に持ってくる際に型を固定したいのですが
以上のようにできるでしょうか

281:デフォルトの名無しさん
12/10/20 17:58:36.56
正規表現勉強中なんですが、
URLリンク(en.cppreference.com)
ここにある例を走らせるとsm[1]が空文字""になってしまいます。
仕様変わりました?

282:デフォルトの名無しさん
12/10/20 19:07:41.93
>>280
意味があるのか不明だがそのコードは通る

283:デフォルトの名無しさん
12/10/20 22:47:19.84
途中で書き込んでしまいましたすいません

引数ありのコンストラクタが引数無しのコンストラクタ呼ぶことって可能ですか?

class Test{
bool po;
public:
Test()
:po(NULL)
{
}
Test( int i )
{
// ここでTest()のやつをうごかしたい
}
};

191 名前:デフォルトの名無しさん[sage] 投稿日:2012/03/01(木) 15:19:07.74
class Test {
bool po;
public:
Test(void) { initialize(); }
Test(int i) { initialize(i); }
private:
void initialize(void) { po = false; }
void initialize(int i) {
// ここでinitialize()のやつをうごかす
}
};


284:デフォルトの名無しさん
12/10/20 22:50:24.61
どこのコピペだ

285:デフォルトの名無しさん
12/10/20 23:56:42.67
C++11なら可能
C++03なら無理なので191のやってるように初期化関数使え

286:デフォルトの名無しさん
12/10/21 07:11:06.70
二つ以上のオブジェクトの本来の型に応じて処理を分けたいのだけどダブルディスパッチ以外に良い方法はないですか
(ちなみにダブルディスパッチでダメな理由は型のパターンが多すぎてインターフェースがすさまじく大きくなるからです)

void Func(IObject * p, IObject * q, IObject * r);
をコールしたら
*pの本来の型S、*qの本来の型T、*rの本来の型Uとして
void Func(S * p, T * q, U * r);
にディスパッチしてほしいです


287:デフォルトの名無しさん
12/10/21 08:02:44.31
設計を見直したほうがいいのでは?
その方針だと型の数が増えると定義しなければならない
Funcの組み合わせの数が爆発的に増えてしまう

288:デフォルトの名無しさん
12/10/21 10:13:16.92
基本的にディスパッチされた側がdynamic_castして
自分で戻すもんじゃない?

289:デフォルトの名無しさん
12/10/21 11:56:49.43
質問
OpenGLだけど
const char* pVer = glGetString(GL_VERSION);
printf("version is %s¥n",pVer);
これだとOKで
printf("version is %s¥n",glGetString(GL_VERSION));
これだとダメだったんだが、もしかして返り値の寿命が関係してるの?
だとすると寿命はどう捉えるべき?

290:デフォルトの名無しさん
12/10/21 12:09:06.35
どうしてストリングクラスのデストラクタにはバーチャルがついてないの?

291:デフォルトの名無しさん
12/10/21 12:12:37.94
仮想関数テーブルのサイズをケチるため

292:デフォルトの名無しさん
12/10/21 12:14:24.64
>>289
それでダメになるというのは仕様的にはあり得ない
そこまでの間にメモリ破壊でも起こしてるか、
コンパイラにバグがあるか、あるいはリビルドすると直るとか、そういうもの

293:デフォルトの名無しさん
12/10/21 13:59:19.87
_beginthreadexで3つのスレッドを作る場合
_endthreadexでここのスレッドを判別するにはどうしたら良いのでしょうか?

294:デフォルトの名無しさん
12/10/21 15:26:26.80
_endthreadexはスレッドの判別など必要なく、今のスレッドを終了させるが、
_endthreadexは絶対に呼んじゃダメ
デストラクタが呼ばれない

295:デフォルトの名無しさん
12/10/21 15:50:11.78
_endthreadexを使うのと、_beginthreadexの戻り値で取得したハンドルをCloseHandleで消す方法ってどう違うの?

296:デフォルトの名無しさん
12/10/21 16:15:46.41
>>281
にレスがつかなくて困ってたんだけど、もしかしてGCCの実装が未完成ってこと?
URLリンク(gcc.gnu.org)
完成してないどころか、間違った結果を返すものを公開するなよって感じなんだけど一体どうなってんだw

297:デフォルトの名無しさん
12/10/21 16:22:44.12
while (cin >> input) {
(セグフォを起こす処理)
}

while (cin >> input) {
try {
(セグフォを起こす処理)
} catch (std::exception& e) {
std::cerr << input << std::endl;
}
}
に書き換えても、catchできてないしループが1回で止まってしまうのですが、
セグフォってcatchできないのでしょうか?
ちなみにセグフォを起こしているのはstd::vector::operator[]だと思います。

298:デフォルトの名無しさん
12/10/21 16:57:02.42
最近なるべくconstを付けるように意識してるんですが、constなメンバを持つクラスの
operator =を書くときに困っています。
たとえば内部に持つバッファのサイズなどはコンストラクタで決まり、以後変更されないのでconstにしています。

が、そうするとconst_castでconstをはがさないと代入演算子が書けないわけで・・・
こういうときはどうするべきなのでしょう。

1.constではなくmutableにすべき
2.代入演算子を書くべきでない。使うときはコピーコンストラクタで済ませるべき
3.そもそもその程度の不変性ならconstにするな

アドバイスいただけると嬉しいです。

299:デフォルトの名無しさん
12/10/21 16:59:42.51
PS3とか360に組み込めるフリーのGCってありますか?

300:デフォルトの名無しさん
12/10/21 17:35:00.30
>>297
カーネルが発するSegmentation Faultに対応する
C++標準のexception classが存在しないもよう
ハンドラを通してC++の例外に変換してる例↓
URLリンク(www.ibm.com)

301:デフォルトの名無しさん
12/10/21 17:41:06.66
>>298
メンバ変数にconstは可能な限り付けない方がいい
どうしてもconstが必要なら代入不可であるべき

302:デフォルトの名無しさん
12/10/21 17:42:29.59
C++でFortranのようにベクトル計算するにはどうすればいいんですか?

303:デフォルトの名無しさん
12/10/21 17:46:25.37
forループがベクトル演算に最適化される事を期待

304:デフォルトの名無しさん
12/10/21 17:53:43.70
期待つーか明示的に要求するんだが

305:デフォルトの名無しさん
12/10/21 18:01:15.91
C++の仕様には明示的な要求などありません

306:デフォルトの名無しさん
12/10/21 19:04:15.86
多数の要求は少数の要求に優先する。

307:デフォルトの名無しさん
12/10/21 20:12:02.31
>>300
nanndatteee
ありがとうございます。仕方ない、おとなしくprintfデバッグします・・・。
whileの中は独立だから途中で止めたくないんだけどな・・・

308:デフォルトの名無しさん
12/10/21 20:27:03.01
ほらFortranさんは設計的にベクトル演算とかをコンパイラに理解させやすいような感じだから

309:デフォルトの名無しさん
12/10/21 20:50:20.55
boost::shared_ptrをvoid*に入れたいのですが、できますでしょうか?

フレームワークに設けられている便利に使っていいvoid*なんですが
&でアドレス取得して入れたら、うまく動作しませんでした。

&でアドレス取得する場合、参照カウントが増えなくて消えちゃうみたいです。

こういう時ってどう実装するものなのでしょう?。

310:デフォルトの名無しさん
12/10/21 21:13:00.70
素直にどこかへコピーしとけよ

311:デフォルトの名無しさん
12/10/22 13:10:09.17
>>307
printf()だとバッファリングされるから、fprintf(stderr, ...)の方がいいよ。

312:デフォルトの名無しさん
12/10/22 15:19:23.24
簡単な数式を引数でとって結果を返す関数をテンプレートで書こうとしてます。
template<class II, class PD, class CT>
int sansuu(II pos, PD n, CT tr)
{
for (; 0 < n ; --n, ++pos)
{
---> ここの書き方 if( tr.eq(*pos, '0') )
{

}
}
return 0;
}

int main(int argc, char* argv[])
{
const char* p = "1+1";
ここの書き方 sansuu(p, strlen(p), char_traits<char>);
const wchar* wp = L"1+1";
sansuu(wp, strlen(wp), char_traits<wchar>);

インプットイテレータとサイズを引数にして、あとcharとwcharでも
使えるようにしたいんですがどうしたらいいのでしょうか
stringを見たらchar_traitsとかあったんですがよくわかりませんでした。
お願いします。

313:雑魚シカ
12/10/22 15:50:12.92
template<class char_type, class length>
int sansuu(const char_type* pos, length n);

314:デフォルトの名無しさん
12/10/22 17:26:24.79
ifstreamとgetlineで外部のファイルを1行ずつ読み込む処理を作りました。
しかしリリースモードで実行すると1行ずつ読み込めません。デバッグモードでは問題なく読み込めました。
原因が分かる人がいたら教えてください。 ちなみにvs2008を使っています。

315:デフォルトの名無しさん
12/10/22 17:33:11.10
>>314
モードの違いに言及したいのなら、開発環境に依存した話なので該当スレへ。
どう読み込めないのか説明ができないのならエスパースレへ。
まさかと思うが、モードだとかデバッグ実行だとかでcwdが違うって落ちじゃないよな。

316:デフォルトの名無しさん
12/10/22 17:51:39.56
>>314
URLリンク(qarc.info)

317:デフォルトの名無しさん
12/10/22 17:53:29.98
API上別にしないといけないってどういう事?
あるタイミングで i を使って、別のタイミングで d を使うって事?
使ったかどうか覚えておけばいいだけのような

318:デフォルトの名無しさん
12/10/22 18:30:10.19
>>312
C++相談室 part94
スレリンク(tech板:490-番)

319:デフォルトの名無しさん
12/10/22 18:31:14.90
>>317
C++相談室 part94
スレリンク(tech板:536-番)

320:デフォルトの名無しさん
12/10/22 20:08:53.54
クラスについて質問です
クラス内にメンバ変数しかなかったら
newする度に変数の分だけメモリを消費するだろうと推測できるのですが
例えば、メンバ変数は2~3個でも、メンバ関数が100個くらいある場合には
newする度にメモリの消費量が半端ない感じになってしまったりしますか?
クラスのメモリを確保した時の挙動がちょっと気になってしまいまして
詳しい方いらっしゃったら教えてくださいまし

321:デフォルトの名無しさん
12/10/22 20:30:27.87
>>320
URLリンク(qarc.info)

322:デフォルトの名無しさん
12/10/22 23:39:55.72
struct IFoo { virtual func(void) = 0; };
struct IBar { virtual func(void) = 0; };

struct Baz : IFoo, IBar {
// ?
};

funcをインターフェースごとに明示的に違う内容でオーバーライドしたいのですがどうすればよいでしょうか?

323:デフォルトの名無しさん
12/10/22 23:53:29.49
素直に関数名を分けろ

324:デフォルトの名無しさん
12/10/22 23:56:48.04
多重継承は出来るだけ避けるべき

325:デフォルトの名無しさん
12/10/22 23:58:50.56
>>322
struct FooImpl : IFoo { virtual func() { ...
struct BarImpl : IBar { virtual func() { ...

struct Baz : FooImpl, BarImpl { ...

326:デフォルトの名無しさん
12/10/23 20:07:34.23
>>324
多重継承は楽しい。

327:デフォルトの名無しさん
12/10/23 20:20:44.07
インターフェイスの多重継承なら許す

328:デフォルトの名無しさん
12/10/23 21:06:28.60
インターフェイスは多重継承と同じとか言い出す輩登場

329:デフォルトの名無しさん
12/10/23 21:13:10.27
実際大した違いはないだろ

330:デフォルトの名無しさん
12/10/23 22:13:29.10
クラスのデータメンバをprivate(あるいはprotected)のまま、他のクラスから利用する方法ってありますか?
struct A { protected: int data; };
struct B { const A& a; B(const A& a): a(a) {} int func(){ return a.data+1; } }
みたいなことをしようとすると、Aのpublicメソッドとしてdataのゲッターを用意しないといけませんよね、
Aを継承すればdataを使えるけど、dataが2箇所に重複してしまう。(コピーつくらずに共有したい)。

331:デフォルトの名無しさん
12/10/23 22:18:36.47
まるごと削除して設計からやり直すのが正解

332:デフォルトの名無しさん
12/10/23 22:20:09.27
friend

333:デフォルトの名無しさん
12/10/23 22:26:29.28
virtual継承すれば重複しないんじゃね

334:デフォルトの名無しさん
12/10/23 23:22:11.99
ダイヤモンド継承するのか?そうでない継承なら重複してしまうってなにか勘違いしてないか

335:デフォルトの名無しさん
12/10/23 23:30:31.18
A a(1);
a.data = 2;
B b(a);
b.func();//2
a.data = 3;
b.func();//3
//bはaのオブサーバ
みたいにしたい。
「オブサーバパターン使え」とかはなしで。
たしかに今はvirtual継承する設計になってるんだけど、
機能的には完全に独立な内容をもつ巨大なクラスになってしまっているから、
見たいデータだけ共有して機能を切り離したい。
それこそ設計を見なおしてる段階なので、あいまいな説明になってしまって申し訳ないです。

336:デフォルトの名無しさん
12/10/24 07:22:54.95
関数ポインタにテンプレート関数のアドレスを入れるにはどうしたらいいですか
普通の関数だと
int (*kanp)();
int kan(int a);
kanp=kanで入るけどkanの部分をテンプレート関数にすると入らない

337:デフォルトの名無しさん
12/10/24 07:25:05.76
f = kan<int>

338:デフォルトの名無しさん
12/10/24 07:25:41.18
>>336
バカには無理。

339:デフォルトの名無しさん
12/10/24 10:24:46.60
環境依存しない方法でインクルードガードが絶対に被らないようにする事は出来ますか?

340:デフォルトの名無しさん
12/10/24 10:53:14.08
#pragma once

341:デフォルトの名無しさん
12/10/24 11:00:36.71
>>337
kanp=kan<int>だめでした
int (*kanp)(int*)だと入ったんですけど()で入れたいです

342:デフォルトの名無しさん
12/10/24 11:24:03.89
>>341
無理だろ
URLリンク(ideone.com)
関数ポインタにこだわらないならbindするという手もあるけどなぜそんなことをしたがるんだ

343:デフォルトの名無しさん
12/10/24 13:22:09.88
そもそも関数ポインタなんて使ってる時点で

344:デフォルトの名無しさん
12/10/24 20:58:10.22
変数.jpgというファイル名を変数.txtという名称に変更したいんですがどうすればよいでしょうか?
実際にはtxtファイルを用いるところをダイアルボックスでjpgを選択する形にしたいのですが
画像だとサムネイルがみえてわかりやすいので

345:デフォルトの名無しさん
12/10/24 21:06:00.67
>>344
そんなことも自分で考えられないならソフトウェア製作業者にお金を払って作ってもらいなさい。

346:デフォルトの名無しさん
12/10/24 21:21:02.20
>>345
ありがとうございます
おかげで解決しました

347:デフォルトの名無しさん
12/10/24 21:21:50.34
いえいえ

348:デフォルトの名無しさん
12/10/27 11:15:30.37
質問の1行目と2行目の関連がわからん

349:デフォルトの名無しさん
12/10/28 12:02:08.81
以下の感じで8byte倍精度が並んだファイルを読み込みたいのですが、どうもこのままでは無理そうです。
operator++でTに対して何をやってるのかによりますが、8byteのunion型か何かを自分で作れば可能でしょうか?

#include <iostream>
#include <fstream>
#include <vector>

int main()
{
std::ifstream fin("dataset.dat",std::ios::binary);
std::istreambuf_iterator<double> bf(fin),eof;
std::vector<double> buf(fin,eof);
for (int i=0; i<10; ++i) {
std::cout << buf[i] << std::endl;
}
}


350:デフォルトの名無しさん
12/10/28 12:15:48.46
std::istreambuf_iterator<double> なんて初めて見たぞ

351:デフォルトの名無しさん
12/10/28 12:24:29.01
いや、もちろんコンパイル通らないよ。やりたいことは伝わってる?
doubleのところを適当なunion型かなにかにするの?という質問。
発想がそもそもズレてる可能性はある。
Cだとreinterpret_castで8byte読み込むところだがストリームでやりたいなと。

352:デフォルトの名無しさん
12/10/28 13:35:38.73
>doubleのところを適当なunion型かなにかにするの?という質問。

それでいいよ

353:デフォルトの名無しさん
12/10/28 17:36:10.56
>>352
うまくいかねぇ
#include <iostream>
#include <fstream>
union dbl {
char mem[8];
double d;
};
int main()
{
std::ifstream fin("dataset.dat",std::ios::binary);
std::istreambuf_iterator<dbl> buf(fin),eof;
}

354:デフォルトの名無しさん
12/10/28 18:18:37.35
オペレータは

355:デフォルトの名無しさん
12/10/28 19:16:33.87
istreambuf_iterator<charT>にしといて

union {double, char[8]} から8文字取り出して連続して書き込めよ

356:デフォルトの名無しさん
12/10/28 19:37:20.73
URLリンク(ideone.com)

これでいいような気がするけど
何か問題あるかな

357:デフォルトの名無しさん
12/10/28 20:22:28.23
エンディアン気にしなくて良いのかな
規格で入出力形式って一つに決められていたっけ

358:デフォルトの名無しさん
12/10/28 20:50:39.97
for文で配列を線形探索して、該当しなかった時に分岐したい場合って
こんな感じでfor文外にフラグ置かないとできないですか?
URLリンク(codepad.org)

↓こんな感じで、「最後まで何も該当しなかったよ」というのを基本構文(if,for,whileなど)で再現したいです。
URLリンク(codepad.org)

5時間ぐらい悩みました。
誰か本当に教えて下さい。

359:デフォルトの名無しさん
12/10/28 20:56:46.84
int i:
for (;i<END;++i)
~;
if (i!=END)
~;
else
~;

360:デフォルトの名無しさん
12/10/28 21:08:33.85
>>357
シリアライズ用に使いたいならどっちかで統一した方がいいね

361:デフォルトの名無しさん
12/10/28 21:44:28.51
>>356
う~ん、そのまんまか・・・。
やっといてもらってアレだが、これだとfout.readするほうが明らかに楽ですよね。
何が嬉しいのか分からん。速いとか?

>>360
C系(規格ではない)とJava系で逆だった気がするが、ユーザーの責任にするしかないと思われ。

362:デフォルトの名無しさん
12/10/28 22:13:12.66
>>361
istreambufを使うのはユーザー定義で自由なストリームを構築出来るという
自由度の高さがあるからです

欠点は1文字ずつしか入出力出来ないこと

速さはどうなんだろう
そんなに変わらないと思うけど

363:デフォルトの名無しさん
12/10/28 22:17:49.02
>>362
ありがとう。ちょっと仕様でも読んで使い道考え直しますわ。
ライブラリのあまり使われない部品って、けっこう多いよね>C++

364:デフォルトの名無しさん
12/10/28 23:30:40.44
std::istreambuf_iterator<CharType>
「CharTypeはcharまたはwchar_tである。・・・」
それ以上読むのやめたw

365:デフォルトの名無しさん
12/10/28 23:38:17.50
>363
使ってはいけない部品も多い

366:デフォルトの名無しさん
12/10/30 10:06:24.92
すみません。shared_ptrの参照カウンタについて教えてください。

shared_ptr<A> x(new A);
shared_ptr<A> y = x;
shared_ptr<A> z(new A); // ①

cout<<x.use_count()<<endl; // 参照カウンタは2
cout<<y.use_count()<<endl; // 参照カウンタは2
cout<<z.use_count()<<endl; // 参照カウンタは1

z=x; // ①で生成したオブジェクトが消滅

cout<<x.use_count()<<endl; // 参照カウンタは3
cout<<y.use_count()<<endl; // 参照カウンタは3
cout<<z.use_count()<<endl; // 参照カウンタは3

z=xで、どうしてyのカウンタまで3に変更されるのかが
よくわかりません。

裏側にカウンタクラスがあって実際はこれがオブジェクト
Aへの生ポインタと参照回数をカウントする変数をもって
いる。x,y,zはこの裏クラスを参照もしくは指している
という理解でよろしいでしょうか?

367:デフォルトの名無しさん
12/10/30 10:17:22.26
はい

368:デフォルトの名無しさん
12/10/30 10:40:25.57
>>367

ありがとうございます。



裏側にカウンタクラスがあって
   ↓
裏側にカウンタクラスのオブジェクトがあって

x,y,zはこの裏クラスを
   ↓
x,y,zはこの裏側にあるカウンタオブジェクトを


369:デフォルトの名無しさん
12/10/30 11:19:28.87
shared_ptrの実装の解説はこのサイトが丁寧でわかりやすいと思った
URLリンク(d.hatena.ne.jp)

370:デフォルトの名無しさん
12/10/30 12:33:53.17
>>369

おお、ありがとうございます。

371:デフォルトの名無しさん
12/10/30 12:37:22.99
人 ありがたや ありがたや

372:デフォルトの名無しさん
12/11/02 22:32:34.85
今コピーしているものをペーストせよ↓

373:デフォルトの名無しさん
12/11/08 10:05:56.55
クラスの複数のメンバ関数内のみで参照する定数って、ソース内に
const int HOGE = 10;
などと書いてしまうべきですか?

それとも、ヘッダに
static const int HOGE;
と書いておいて、
const int クラス名::HOGE = 10;
と実体をソースに定義するべきですか?

Cの頃は関数内でのみ使用する定数は前者(しかも#define)でしたが、C++だとどうなるのでしょうか。
後者だと、クラスを使用する側には関係ないものをヘッダに書く必要が出てくるのですが。

374:デフォルトの名無しさん
12/11/08 10:48:46.83
どっちでもいいよ

375:デフォルトの名無しさん
12/11/08 12:18:15.90
>>373
private の enum か static
もしくは pimpl でヘッダにも残さない

376:デフォルトの名無しさん
12/11/08 12:36:32.04
>>373
宣言と実態を分けて書くと、コンパイル時定数ではなくて、
変更できない変数になってしまって、
いろいろと不都合が出たよ。

ヘッダにstatic const intで書いた方が、何かと便利。
privateにしてしまえば、使う側には関係ない。

377:デフォルトの名無しさん
12/11/08 14:57:32.54
>>374-376
やっぱりこの手のものはヘッダにprivateで書くものなんですか。

ソース内のみで使う定数が外から見えるところで宣言されているのが違和感があるのですが、
たしかにprivateメンバ変数やprivateメンバ関数も同じように外に見えていますし、
クラスはそういうものなんだと理解するようにします。

378:デフォルトの名無しさん
12/11/08 15:46:38.08
>ソース内のみで使う定数が

ソースのグローバルに
static const int HOGE = 10;

379:デフォルトの名無しさん
12/11/08 15:52:54.27
「クラスの複数のメンバ関数内のみ」がいつの間にか「ソース内のみ」に…

380:デフォルトの名無しさん
12/11/08 16:00:45.03
>>378
これが最初に書いた前者の方法ですよね?

>>379
すいません、同じ意味です。
一つのソース内に書かれている関数は、通常は一つのクラスのメンバ関数のみなので。

381:デフォルトの名無しさん
12/11/08 16:38:50.33
static かどうかはこのケースでは関係無いよね

382:デフォルトの名無しさん
12/11/08 18:47:16.06
コンパイル時定数は自動的にstaticだし
そもそもstaticより無名名前空間を使うべきだな

383:デフォルトの名無しさん
12/11/08 18:52:12.77
>クラスを使用する側には関係ないものをヘッダに書く必要が出てくるのですが。

.cppソースが無くてヘッダに全部実装書いてる有名ライブラリの立場は・・・

384:デフォルトの名無しさん
12/11/08 18:53:02.81
detail名前空間とかいう泥臭い事やってるけどなー

385:デフォルトの名無しさん
12/11/08 19:06:27.57
detailってそういうあれだったのか

386:デフォルトの名無しさん
12/11/08 19:16:49.00
URLリンク(unkar.org)
54 :仕様書無しさん:2009/06/13(土) 18:26:48
&nbsp;&nbsp;&nbsp;&nbsp;>>51
&nbsp;&nbsp;&nbsp;&nbsp;そのとおりっていうかそれが当然っていうか話題にする価値もないっていうか
&nbsp;&nbsp;&nbsp;&nbsp;まさか世の中にはstaticな関数までヘッダに書く奴がいるのかと戦慄してるんですが。

&nbsp;&nbsp;&nbsp;&nbsp;ところでc++のクラスでプライベートなメンバ/メソッドをクラス定義に一度に書かせる
&nbsp;&nbsp;&nbsp;&nbsp;のが諸悪の根源だわな。あれのせいでc++から学習する奴がヘッダの意味がわからず
&nbsp;&nbsp;&nbsp;&nbsp;混乱する。
&nbsp;&nbsp;&nbsp;&nbsp;パブリックなメンバは一箇所でしか定義できないが、プライベートメンバは既存クラスに
&nbsp;&nbsp;&nbsp;&nbsp;追加の形で定義してよい、とすればc時代のヘッダの意味を取り戻せるのだが。
&nbsp;&nbsp;&nbsp;&nbsp;コンパイラの実装めんどくさそうだけど。

387:デフォルトの名無しさん
12/11/08 20:47:48.06
>>383
横レスだけど・・・なんのライブラリですか?

388:デフォルトの名無しさん
12/11/08 21:19:14.10
boostに決まってんじゃん

389:デフォルトの名無しさん
12/11/08 21:39:07.76
業務でそんな事する奴がいたらすぐ首だよ。

390:デフォルトの名無しさん
12/11/08 22:58:29.23
テンプレートならそうするしかないだろ

391:デフォルトの名無しさん
12/11/08 23:08:45.80
389無知過ぎワロタ

392:デフォルトの名無しさん
12/11/08 23:55:56.96
betterCとしてしか使ってない人ならそんなもんでしょ

393:デフォルトの名無しさん
12/11/08 23:56:34.74
ヘッダに実装を全部書いた方がコンパイルが速いとかいう記事無かったっけ

394:デフォルトの名無しさん
12/11/09 01:23:41.34
それは一括でコンパイルするなら複数のソースをそれぞれコンパイルしてリンクするより
ただ一つのソースにまとめてコンパイルするほうが早いって話

ヘッダに実装を全部書くとそのやり方と相性がいい

395:デフォルトの名無しさん
12/11/09 01:24:16.30
全部のcppを1個にすると超高速ビルドらしい

396:デフォルトの名無しさん
12/11/09 01:30:37.47
>>395
それは分割されたソース全部再コンパイルするのに比べて、だろ。
ちょっと変更してビルドしなおすって状況ではちゃんと分かれてないと死ぬ。

397:デフォルトの名無しさん
12/11/09 08:28:16.46
最近はボトルネック以外はスクリプトだから大差ない


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch