5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part99

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

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

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/

2 :デフォルトの名無しさん:2013/02/21(木) 17:41:26.17
>>1
スレ立て乙
こちらで頼む
まあいいけど

C++相談室 part100
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part98
http://toro.2ch.net/test/read.cgi/tech/1345823164/
C++相談室 part98(実質part99)
http://toro.2ch.net/test/read.cgi/tech/1347964922/

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/

3 :デフォルトの名無しさん:2013/02/21(木) 17:42:26.88
早いけど先に地鎮祭しとくのでテンプラよろしく

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

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

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

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

#include <stdafx.h>
後死ね。

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

4 :デフォルトの名無しさん:2013/02/21(木) 19:38:17.43
すみません早速質問です。

class Test {

public: Test getThis() { return this; }

};

のように自身を帰したい場合C++ではどのようにかくのですか?

5 :デフォルトの名無しさん:2013/02/21(木) 19:48:39.09
目的次第で

class Test {
public:
 Test* getThis() { return this; }
 const Test* getThis() const { return this; }

 Test& getThisRef() { return *this; }
 const Test& getThisRef() const { return *this; }
};

6 :デフォルトの名無しさん:2013/02/21(木) 19:54:00.83
そう言えば仮想関数で共変と反変ってのがあったな
それよりテンプラよろ

7 :デフォルトの名無しさん:2013/02/21(木) 20:19:28.03
ここが100スレ目?

8 :デフォルトの名無しさん:2013/02/21(木) 21:34:15.57
>>7
Yes

9 :デフォルトの名無しさん:2013/02/21(木) 22:03:02.48
初心者は回答するな

10 :デフォルトの名無しさん:2013/02/21(木) 22:06:44.34
>>9
あなたjavaスレにもいるでしょ?毎日張り付いてご苦労様です。

11 :デフォルトの名無しさん:2013/02/21(木) 22:17:24.33
>>10
Javaスレなんかいないよ
Javaは10年前にかじっただけだから全く分からないし

C++メインで使ってるからこのスレは張り付いてというか一応毎晩チェックしてる
これも張り付くっていうのかな?
まあどっちでもいいや

12 :デフォルトの名無しさん:2013/02/21(木) 22:17:31.36
相手が毎日張り付いてるのを確認できるのは同類だけしかいないだろうにな

13 :デフォルトの名無しさん:2013/02/21(木) 22:18:59.00
自分スーパーハッカーなので誰が張り付いてるか張り付いていなかくらい寝て起きる生活と同じように取得できますんで。

14 :デフォルトの名無しさん:2013/02/21(木) 22:19:39.21
無駄口叩くな

15 :デフォルトの名無しさん:2013/02/21(木) 22:22:22.11
新スレ早々荒れ模様

16 :デフォルトの名無しさん:2013/02/21(木) 22:35:51.87
たしか削除人は、IPアドレスがみえるそうだ

17 :デフォルトの名無しさん:2013/02/21(木) 22:37:27.27
またseikyou.ne.jp大暴れなのか

18 :デフォルトの名無しさん:2013/02/22(金) 00:19:54.15
ちょっと荒れてしまったようですみません。一応謝っておきます。
お酒を飲んでいたのと、C++がJavaのようにかけないのでイライラしてしまいました。

19 :デフォルトの名無しさん:2013/02/22(金) 23:37:04.06
初心者は回答するな

20 :デフォルトの名無しさん:2013/02/22(金) 23:39:17.58
別言語で同じように書けると思っている方がおかしい

21 :デフォルトの名無しさん:2013/02/23(土) 03:16:59.83
void func() {
if (i == 0) return;
i++;
}



void func() {
if (i == 0) {
} else {
i++;
}

ではどちらが好きですか?

22 :デフォルトの名無しさん:2013/02/23(土) 03:29:22.36
俺の原則はソースの行数(文字数)を減らすこと
バグの数は行数に比例する
てか、その下のやつ{}が合ってないし

23 :デフォルトの名無しさん:2013/02/23(土) 04:25:07.61
行数を減らす手段にカッコの位置を使うってのは斬新だな。
関数1つあたりの機能を正しく分割できていれば行数など
ふくれあがるわけないんだが。

24 :デフォルトの名無しさん:2013/02/23(土) 08:07:45.72
上は気持ち悪い
1行だろうが30行だろうが下で統一したい

25 :デフォルトの名無しさん:2013/02/23(土) 08:09:07.44
でもその場合なら
void func(){
if(i!=0){
i++
}
}
こう書くと思うな

26 :デフォルトの名無しさん:2013/02/23(土) 08:22:28.44
>>21
上は、最初に条件付けて関数を実行する状況を事前に制限する意図があるときに使う
下は、純粋に条件分岐する場合に使う
意図次第かと

i == 0 がいいか i != 0 がいいかも意図次第だな

27 :デフォルトの名無しさん:2013/02/23(土) 09:28:29.22
>>26
>上は、最初に条件付けて関数を実行する状況を事前に制限する意図があるときに使う

だね、俺もそうする。

ただ、その場合でも

void func(){
  if(i == 0){
    return;
  }
  i++;
}

だな。

28 :デフォルトの名無しさん:2013/02/23(土) 09:32:16.52
俺はこうだな

void func()
{
  if (i == 0) { return; }
  i++;
}

29 :デフォルトの名無しさん:2013/02/23(土) 12:29:14.43
空の{}入れてelseとか気持ち悪い

30 :デフォルトの名無しさん:2013/02/23(土) 12:38:46.18
そういう時は俺は空の { } の中にコメントを書くね

31 :デフォルトの名無しさん:2013/02/23(土) 12:59:05.99
途中returnを異様に避けようとする人いるよね

32 :デフォルトの名無しさん:2013/02/23(土) 13:09:31.53
必要なら途中でreturnしてもいいけど、このコードは普通に != 使うのが素直

33 :デフォルトの名無しさん:2013/02/23(土) 13:46:31.86
>>31
MISRA とかでも禁止されていたりするしね。

>>32
常にそうだと思うなら、ちょっと頭固すぎ。

34 :デフォルトの名無しさん:2013/02/23(土) 14:36:36.04
void func()
{
if (i != 0) i++;
}

これが一番わかりやすいじゃん
本質的に一行のコードなのになんでreturnとか出てくるの

35 :デフォルトの名無しさん:2013/02/23(土) 14:45:27.96
質問の意図を解さない頭の悪い回答が出始めてきたな・・・

36 :デフォルトの名無しさん:2013/02/23(土) 14:54:06.71
初心者は回答するな

と貼り付ける人の気持ちも分からんでも無いな

37 :デフォルトの名無しさん:2013/02/23(土) 14:57:45.00
どっちが好きかって聞いてるだけだからな
実用性とかそんなもの聞いてないんだよ

38 :デフォルトの名無しさん:2013/02/23(土) 15:04:03.92
>>36
それとこれとは違う気がするが・・・

39 :デフォルトの名無しさん:2013/02/23(土) 15:18:37.37
コメントとコードが近い表現になるように条件式を書いた方が良い

40 :デフォルトの名無しさん:2013/02/23(土) 15:21:34.61
>>33
MISRAなんてものがコーディング規約に含まれている会社の人はご愁傷様としか言いようがない

41 :デフォルトの名無しさん:2013/02/23(土) 15:36:37.46
条件式にコメントを合わせるのではなく
コメントに条件式を合わせる
これでコードが理解しやすくなる

そのためなら空のifがあってもいいけど
コードの書き忘れと区別できるようなコメントはあった方がいい

42 :デフォルトの名無しさん:2013/02/23(土) 16:00:36.52
初心者並の頭しかないくせに自覚のないゴミも回答するな














そう、今自分のことじゃないと思ったお前だよお前

43 :22:2013/02/23(土) 17:01:23.36
>>22 だけど、本当はこうだった。

void func() {
if (i == 0) return;
i++;
}



void func() {
if (i == 0) {
return;
} else {
i++;
}
}

だったわ。すまんこ。

44 :デフォルトの名無しさん:2013/02/23(土) 17:06:01.30
やっぱ単なる好みの質問じゃんw

45 :デフォルトの名無しさん:2013/02/23(土) 17:42:45.34
if-else の一方だけで return; というのは個人的にはあまり良くないと思う

46 :デフォルトの名無しさん:2013/02/23(土) 18:49:32.78
動けばなんでもいい

47 :デフォルトの名無しさん:2013/02/23(土) 20:16:54.77
>>42
> そう、今自分のことじゃないと思ったお前だよお前

お前のことだと思った俺はどうすりゃいい? (w

48 :デフォルトの名無しさん:2013/02/23(土) 21:57:17.06
>>43
ガード条件のつもりなのか、そうでないのかをはっきりしろよ

49 :デフォルトの名無しさん:2013/02/23(土) 22:19:34.09
りったんしかないのならif (i != 0) ++i;でまろやかに行くよね

50 :デフォルトの名無しさん:2013/02/23(土) 22:52:30.62
それだとanalがムズムズするからオレは if (i==0);else ++i; かな

51 :デフォルトの名無しさん:2013/02/23(土) 23:27:10.80
anal は形容詞だよ

52 :デフォルトの名無しさん:2013/02/23(土) 23:36:04.64
英語圏でも普通に名詞的に使われてるだろ
俺は使わないけど

53 :デフォルトの名無しさん:2013/02/23(土) 23:41:22.52
anus っていうんだよ

54 :デフォルトの名無しさん:2013/02/24(日) 06:52:00.53
アヌスの鏡?w

えーと、returnの後には基本、elseは置かない習慣だから、
if (i == 0) return;
++i;
だな。
elseを書きたい場合はその前後をイーブンにしたいから、
if (i == 0) {
return;
} else {
++i;
return;
}
とするかも。
まぁ、その場合は、
if (i == 0) {
} else {
++i;
}
return;
だろうな。

55 :デフォルトの名無しさん:2013/02/24(日) 10:45:40.71
>>40
MISRA が規約に含まれてる会社って車業界だから、
どっちかって言うとご愁傷様とか言われるのはお前や
俺たちじゃね? (w

56 :デフォルトの名無しさん:2013/02/24(日) 10:50:28.03
>>55
いきなり自分の価値観を語りだすなよ

57 :デフォルトの名無しさん:2013/02/24(日) 10:54:08.21
iが規定値の時に触るなら
if (i != 0) ++i;
iが想定の範囲内から出ることもあるニュアンスを含めるなら
if (i == 0) return; ++i;
iの範囲によって2種の異なる処理を行うなら
if (i == 0) return; else ++i;

58 :デフォルトの名無しさん:2013/02/24(日) 11:13:06.30
途中returnがだめなら
throwなんてもっとだめなのか

59 :デフォルトの名無しさん:2013/02/24(日) 11:25:38.70
ニュアンスなんてどうでもいいからコメント書けよ
コードで伝えようとするのは危険

60 :デフォルトの名無しさん:2013/02/24(日) 11:33:19.91
コメント書くのは前提だろ

61 :デフォルトの名無しさん:2013/02/24(日) 11:40:08.40
こういう無理やり1行にしてみましたみたいなコード嫌い

62 :デフォルトの名無しさん:2013/02/24(日) 11:48:12.74
>>61
個人的には ; は1行に2つ以上あると気になるわ(ただしfor文を除く)

63 :デフォルトの名無しさん:2013/02/24(日) 11:57:45.69
普通はそう教育される

64 :デフォルトの名無しさん:2013/02/24(日) 12:09:46.58
そこは井手が勝手に直してくれるでしょ?w

65 :デフォルトの名無しさん:2013/02/24(日) 12:48:48.62
井出らっきょのことね

66 :デフォルトの名無しさん:2013/02/24(日) 13:05:53.92
コメントは最小限にして、それでも分かりやすいコードにして欲しい
コメント読むにはコード読むのと同等以上のエネルギーが必要

67 :デフォルトの名無しさん:2013/02/24(日) 13:28:05.05
日本人なら日本語マスターしてこい

68 :デフォルトの名無しさん:2013/02/24(日) 13:37:40.18
メンテされていないコメントほど害悪なものは無い

69 :デフォルトの名無しさん:2013/02/24(日) 13:41:44.83
メンテされてないコードの方が害悪だと思う

70 :デフォルトの名無しさん:2013/02/24(日) 13:47:57.19
>>67
えっ?コメント日本語で書いてるの?ってのは冗談として
自然言語はプログラミング言語ほど最適化されていないし、曖昧な点が多いから

71 :デフォルトの名無しさん:2013/02/24(日) 13:51:08.55
>>69
コメントはメンテしなくても
書いてあるコードの通りに動くからタチが悪いだろ

72 :デフォルトの名無しさん:2013/02/24(日) 15:02:23.29
>>56
価値観?
世間の動向とか興味ない人なの?

73 :デフォルトの名無しさん:2013/02/24(日) 16:31:57.13
>>72
人生相談がしたいならスレ違い

74 :デフォルトの名無しさん:2013/02/24(日) 16:49:39.79
すみません。うんkに毛が生えたレベルの質問なのですが、
int main()
{
return 0;
}

のreturn 0;の必要性がイマイチわからないです。あるサイトではこれがないとコパイル通らないそうですが、通りました。
例えば例外発生したときにそこでプログラムがとまってメモリを食っちゃうのを阻止する感じでしょうか

75 :デフォルトの名無しさん:2013/02/24(日) 16:51:13.70
C++ではなくてもコンパイルは通ります

76 :デフォルトの名無しさん:2013/02/24(日) 16:55:51.66
それじゃ必要になったら書けばいい
必要ないなら書く必要はない

77 :デフォルトの名無しさん:2013/02/24(日) 16:56:27.44
>>74 main 関数が int を返すって宣言してるから。

78 :デフォルトの名無しさん:2013/02/24(日) 17:02:52.70
なるほど。すみません続けて質問なのですが
using namespace std;
はできるだけ書かずにstd::cout, std::endlのように書いていったほうが良いと考えておkですか?
スタティックなインポート?に恐怖を感じます

79 :デフォルトの名無しさん:2013/02/24(日) 17:03:45.25
>>75
Cでも最新の仕様なら要らない
最新の仕様に対応していればだけど

80 :デフォルトの名無しさん:2013/02/24(日) 17:05:59.80
>>78
using namespace std; はなるべく書かない方がいい
解説書やら何かやらではスペースやら説明やらの都合上よく使われるが

こういうのなら悪くはない

namespace AAA {

using std::cout;
using std::endl;

int main() {
 cout << "aaa" << endl;
}

} // namespace AAA

81 :デフォルトの名無しさん:2013/02/24(日) 17:06:41.94
ヘッダにさえ書かなきゃどうでもいい

82 :デフォルトの名無しさん:2013/02/24(日) 17:18:28.52
>>80
そんな風にmain()関数を囲い込む方法もあるんですね。今自分で、
AAA::main();
とよんでみたら確かに通りました。
ありがとうございます。

83 :デフォルトの名無しさん:2013/02/24(日) 17:22:24.68
あ、すまん
main は名前空間に含んじゃいけないな
こういうことで

namespace AAA {

using std::cout;
using std::endl;

void foo() {
 cout << "aaa" << endl;
}

} // namespace AAA

int main() {
 AAA::foo();
}

84 :デフォルトの名無しさん:2013/02/24(日) 17:24:38.27
設計上よくないということですか?

85 :デフォルトの名無しさん:2013/02/24(日) 17:27:12.22
文法上まずい
mainはグローバル名前空間内で定義する必要がある

using namespace std; は色々問題があるけど
グローバルでない名前空間内で std::cout, std::endl などを個別で using するのは割と安全
というものの例を上げようとしたら
間違って main も名前空間内に入れてしまっただけ

86 :デフォルトの名無しさん:2013/02/24(日) 18:52:46.09
ふと思ったんだけど、なんで return で制御返しちゃうんだろ。
return だからって、制御返すのと戻り値をまじちゃってるよね。
制御構文として return を書かないなら綺麗になるかなかな?

87 :デフォルトの名無しさん:2013/02/24(日) 18:57:35.48
もうちょっと日本語で話してくれ

88 :デフォルトの名無しさん:2013/02/24(日) 19:46:09.42
>>73
価値観とか人生相談とか…
要するに論理的な話はできないと言うことね、了解した。

89 :デフォルトの名無しさん:2013/02/24(日) 20:14:49.91
>>58
途中returnが駄目で途中breakがOKな理由がよくわからないね、あれだ、ダブルスタンダードってやつか?

90 :デフォルトの名無しさん:2013/02/24(日) 20:15:41.38
>>59-60
コメントって怏々にしてメンテがゆきとどかず、実体の真逆を記述していることもおおいよね
コメントを頼りにするのは馬鹿

91 :デフォルトの名無しさん:2013/02/24(日) 20:26:55.91
もちろんコード前提だろ馬鹿

92 :デフォルトの名無しさん:2013/02/24(日) 20:41:08.08
>>88
同一人物だと思い込んだ理由はなんだろね

93 :86:2013/02/24(日) 20:58:33.41
呼んだ関数は、いつかは(あれば)戻り値を伴って戻ってくる訳で、
そのときに戻り値が設定されてればいいわけで、
戻り値返すついでに制御も返しちゃいけないと思うんです。

スレちだけど、言い出しっぺなので。

>>21 の質問は、何らかの数が 0 なら処理しなくて良い or するなって意味で、
0 で return させたのです。
でも 0 で無いなら処理しろにして、0の場合でもそのまま関数抜けていただいたほうが、
御社にとってもとかったのではないかと。思った次第。

94 :デフォルトの名無しさん:2013/02/24(日) 21:04:37.71
皆さんC++学ぶ上で何をしましたか。
やってて面白い分野が見つかればよいのですが。C++ならではのAPIとかあれば教えてください。

95 :デフォルトの名無しさん:2013/02/24(日) 21:07:32.28
ゲーム作る

96 :デフォルトの名無しさん:2013/02/24(日) 21:08:19.33
科学技術計算

97 :デフォルトの名無しさん:2013/02/24(日) 21:09:51.57
>>95
自分もそれを第一に考えたのですがウィンドウ作る所でいやになりました。
もっとC++言語としてまとまったAPIdocumentがあればよいのにないですよね?

98 :デフォルトの名無しさん:2013/02/24(日) 21:10:03.73
Cライクで書かれたサンプルプログラムをC++のSTLとクラス使って書きなおす

99 :デフォルトの名無しさん:2013/02/24(日) 21:10:32.94
C++にウィンドウなんて概念はないからな

100 :デフォルトの名無しさん:2013/02/24(日) 21:14:19.77
ウィンドウなんて作らなくても
テキストベースでゲーム作ればいいじゃん

101 :デフォルトの名無しさん:2013/02/24(日) 21:15:04.09
可読性のために処理速度を犠牲にしてもいいですか?

102 :デフォルトの名無しさん:2013/02/24(日) 21:17:59.99
DXライブラリなるものでゲーム作ろうと思ったのですが、あれってVC++がいるのですよね?
よくわからないのですが、VC++ってC++と並列というか、また別の言語なんですか?

103 :デフォルトの名無しさん:2013/02/24(日) 21:18:01.49
可読性のためにプログラミング言語が生まれました

104 :デフォルトの名無しさん:2013/02/24(日) 21:22:45.98
最初のプログラムってひたすら0と1を打ち続けてたんだろうか

105 :デフォルトの名無しさん:2013/02/24(日) 21:29:16.31
そもそもリレーとかだろ確か
EDSACが最初の(実用的な)プログラム内蔵方式コンピュータだったはず

106 :デフォルトの名無しさん:2013/02/24(日) 21:29:38.09
>>102
VC++は開発環境
C++は言語

107 :デフォルトの名無しさん:2013/02/24(日) 21:45:32.37
>>106
VC++でしか使えないライブラリとかあるのですか?

108 :デフォルトの名無しさん:2013/02/24(日) 21:48:09.99
>>107
ライブラリ次第だが、ある

109 :デフォルトの名無しさん:2013/02/24(日) 21:54:57.48
>>104
アルテアあたりだと、スイッチを捻って01を入力してプログラミングしてた。

110 :デフォルトの名無しさん:2013/02/24(日) 21:57:15.96
DXライブラリはVC++限定ではないけどね

111 :デフォルトの名無しさん:2013/02/24(日) 22:09:17.41
>>92
別に1人とは書いてないけど、そう思い込んだ理由はなんだろうね (w

>>93
マジで、C++ の勉強の前に「日本語」の勉強した方がいいよ。

112 :デフォルトの名無しさん:2013/02/24(日) 22:29:22.31
>>93
もしかしてVB出身?

113 :デフォルトの名無しさん:2013/02/24(日) 22:32:05.49
FORTRANnerかも

114 :デフォルトの名無しさん:2013/02/26(火) 01:21:30.48
なぜファイルストリームのインターフェースはランダムアクセサブルなシーケンスじゃないんですか?

115 :デフォルトの名無しさん:2013/02/26(火) 06:29:18.57
高度に発展したインタネットは、テープと区別が付かないからです

116 :デフォルトの名無しさん:2013/02/26(火) 07:45:26.50
>>114
つfseek()
ラップすればいくらでもランダムアクセスになるのでは?
あと、ハード的には最終的にセクタ/クラスタ単位でしたアクセスできない点は考慮してあると思う。

117 :デフォルトの名無しさん:2013/02/26(火) 09:36:37.60
概念が十分かつ簡潔に汎用化出来ないからじゃね?

118 :デフォルトの名無しさん:2013/02/26(火) 13:00:10.92
ファイルストレージの主流がシーケンシャルアクセスデバイスだった頃に設計された仕様が元だからだろうな

119 :デフォルトの名無しさん:2013/02/26(火) 19:27:39.61
std::stringも参照渡しにするべきなんですか?

120 :デフォルトの名無しさん:2013/02/26(火) 20:00:34.33
>>119
デストラクタを備えているクラスは参照渡しの時は注意
もしそれが向こうでconst参照で束縛されても、戻ってきた瞬間デストラクタが走り
実体が解体されてしまうため、束縛の意味がなくなってしまう

121 :デフォルトの名無しさん:2013/02/26(火) 20:14:19.93
>>119
場合によるとしか言えんだろ

122 :デフォルトの名無しさん:2013/02/27(水) 00:25:38.83
>>119
最近はコピーしたほうがええってのが定説や
コアはちゃんとつかわなあかん

123 :デフォルトの名無しさん:2013/02/27(水) 03:59:31.62
参照渡しよりコピーの方が良いという理屈が分からん

124 :デフォルトの名無しさん:2013/02/27(水) 05:07:31.16
初心者は回答するな

125 :デフォルトの名無しさん:2013/02/27(水) 06:56:16.00
>>123
やってみろや

class C {
const string& cs;
public:
C(const string& s) : cs(s) {}
void print() const { std::cout << cs << std::endl; }
};

これを C cc("test"); としてインスタンスを生成し cc.print() とすると
果たして test と表示されるかどうか

126 :デフォルトの名無しさん:2013/02/27(水) 07:20:55.87
>>125
http://ideone.com/SZCVQ8
http://ideone.com/W51G8T
イミディエイトの参照をとるな、ってエラーがでないのね

127 :デフォルトの名無しさん:2013/02/27(水) 08:42:08.05
>>126
なんだQか
最初のは結局

class C {
const std::string& cs;
public:
C(const std::string& s) : cs(s) {}
void print() const { std::cout << cs << std::endl; }
};
int main()
{
std::string* const s = new std::string("test");
C c(*s);
delete s;
c.print();
}

とやってるのと基本的に同じ
constの参照は一時オブジェクトでも束縛出来るが、それがクラスの場合は
要注意

128 :デフォルトの名無しさん:2013/02/27(水) 08:45:32.72
というよりメンバにconstへの参照を持っていてそれに束縛する場合は要注意って事だな

129 :デフォルトの名無しさん:2013/02/27(水) 11:24:54.65
>>127
ワロタ。すばらしい例だね。
参照先・ポイント先が有効なのか考えないでプログラム
している人ってC/C++には向かないよね

130 :デフォルトの名無しさん:2013/02/27(水) 11:47:57.91
時代はmove

131 :デフォルトの名無しさん:2013/02/27(水) 12:13:10.04
>>129
低脳はこういう罠にも気付いてないのに「俺はC++が出来る」と嘘をほざいてるだけだと
バラされて顔を真っ赤にして遁走したようですwww

>>130
スレ違い
C++11スレに行け

132 :デフォルトの名無しさん:2013/02/27(水) 12:13:51.86
string&&を受けとるのをオーバーロードして
static_assertすればいいんじゃね

133 :デフォルトの名無しさん:2013/02/27(水) 12:17:57.35
moveってauto_ptrに似た挙動をするからなあ
スピードは格段に上がるけどちょっと怖い

でもgcc4.7.2のSTLは既にmove semanticsを前提に書き換えられているし
実際ベンチマークを取ってみると速くなってる

134 :デフォルトの名無しさん:2013/02/27(水) 12:21:04.88
>>133
明示的にやるにはstd::moveって書かなきゃダメだし
勝手にmoveするauto_ptrと違ってそんな怖くはないだろ

135 :デフォルトの名無しさん:2013/02/27(水) 12:22:13.19
moveが機能するケースを区別できないならともかくmoveが怖いっていったいどんなコード書いてんだか

136 :デフォルトの名無しさん:2013/02/27(水) 12:33:37.15
>>134
それは分かっている
しかしauto_ptrに痛い目に遭わされて来たからなぁ

>>135
感情が染み付いてしまうとしばしば理性を超えて恐怖を感じる

137 :デフォルトの名無しさん:2013/02/27(水) 13:06:57.00
戦場のプログラマ

138 :デフォルトの名無しさん:2013/02/27(水) 15:56:27.75
やっぱ銃弾の飛び交う中で崩れた建物の陰とかでノートPC抱えて必死でコーディングする感じ?
自分の隠れてる小さなブロック塀の残骸にマシンガンの流れ弾が当たるのは日常茶飯事で
たまに塀のこっちに手榴弾とかが入ってきて脊髄反射でノートPC抱えて逃げないとヤバい感じ?
夜は明かりで居場所が分からないようにノートPCと自分を黒い布で覆ってコーディングする感じ?

139 :デフォルトの名無しさん:2013/02/27(水) 16:06:36.93
弾丸が貫通する電子機器はごみ

140 :デフォルトの名無しさん:2013/02/27(水) 17:05:51.89
防弾のフルタワーPCなら自分の体も隠せる

141 :デフォルトの名無しさん:2013/02/27(水) 18:07:00.99
とりあえず何を組んでいるんだ?

142 :デフォルトの名無しさん:2013/02/27(水) 18:46:01.40
FPSゲーム

143 :デフォルトの名無しさん:2013/02/27(水) 18:57:45.11
関数の引数にクラスを渡す場合、普通は const& で問題ないよ。
むしろ値渡なんかしない。

>>125
の問題は、引数ではなくてメンバ変数のライフタイム。
その例の場合、普通はメンバの方を参照にはしない。

144 :デフォルトの名無しさん:2013/02/27(水) 19:03:11.41
メンバーを参照にする意味あるの?

145 :デフォルトの名無しさん:2013/02/27(水) 19:06:00.93
意味があるときにはする
寿命には気を付けるけど

146 :デフォルトの名無しさん:2013/02/27(水) 21:19:34.94
構造上特定のクラスに本質的に依存するクラスはそれを参照メンバとして取る事がある。
例で言うとboost::lock_guardとか。

147 :デフォルトの名無しさん:2013/02/27(水) 21:44:04.27
RAII 的なロック区間管理オブジェクトは、どちらかと言えばイディオムだけどな

148 :デフォルトの名無しさん:2013/02/27(水) 21:54:09.45
const_castでconstを外せるようにするのに参照にしないといけなかった

149 :デフォルトの名無しさん:2013/02/27(水) 22:12:05.10
>>148
なんだそりゃ?

150 :デフォルトの名無しさん:2013/02/27(水) 22:15:18.06
const intのメンバ変数をconst_castで書き換えようとしたら
const int&のメンバ変数じゃないと書き換えられなかった

151 :デフォルトの名無しさん:2013/02/27(水) 22:23:41.02
ttp://codepad.org/rYoD1PXJ
普通に書き換えられるけど…

152 :デフォルトの名無しさん:2013/02/27(水) 22:27:20.04
static const intだったわ
↑が書き換えられなくて、static const int&にした

153 :デフォルトの名無しさん:2013/02/28(木) 06:28:12.41
>>125
constの参照をメンバに持つこと自体がバカなんじゃないの

154 :デフォルトの名無しさん:2013/02/28(木) 06:40:45.67
153の続き:
const参照じゃなくても生ポインタでも同じ事だよね
呼ばれた側で参照/生ポインタを保持するようなアホなことはそもそも俺はしないなあ

>>131
最近忙しすぎて2ch除くヒマもないだけで遁走したわけじゃないよ
お前と一緒にするなよカス

155 :デフォルトの名無しさん:2013/02/28(木) 06:47:19.29
つまり>>125みたいなコードを書く奴は死んだ方がいいということ
「注意が必要」以前の問題

156 :デフォルトの名無しさん:2013/02/28(木) 08:39:17.67
>>150
コンパイル時定数をconst_castすんなよ

157 :デフォルトの名無しさん:2013/02/28(木) 09:00:24.10
>>150-152 それ未定義動作。

158 :デフォルトの名無しさん:2013/02/28(木) 09:54:31.29
>>153
constの参照を今知ったのがバレバレ
constの参照はコンストラクタで初期化しないとコンパイルエラーになる

>>154
お前Qだろ
無知なのがバレて逆切れすんなよ

>>155
連投か
よほど悔しそうだな
俺は「例え」のために書いただけで、パッと見てすぐにおかしいと分からない
時点でお前も同じ

159 :デフォルトの名無しさん:2013/02/28(木) 09:56:46.26
本来はconstの参照などメンバに持たず、単に参照をメンバに持つ
こうすればコピーしか初期化出来なくなるので正常動作するわけだ

160 :デフォルトの名無しさん:2013/02/28(木) 10:26:03.94
そんなバッドノウハウは忘れていいよ

161 :デフォルトの名無しさん:2013/02/28(木) 10:29:53.35
C++FAQに書いてあるんだが・・・

162 :デフォルトの名無しさん:2013/02/28(木) 10:53:28.22
VCとかじゃ通用しないテクニックだし
右辺値禁止したければオーバーロードをdeleteするのが正道なんだよなあ

163 :デフォルトの名無しさん:2013/02/28(木) 10:56:00.16
C++使いって基本アホだよな

164 :デフォルトの名無しさん:2013/02/28(木) 10:58:09.34
そうだよアホだよ

165 :デフォルトの名無しさん:2013/02/28(木) 11:02:29.68
なんだ、俺は例外中の例外の異端児だったのか

166 :デフォルトの名無しさん:2013/02/28(木) 11:11:19.32
ハンドルされていない例外が発生しました
人事部にお問い合わせください

167 :126:2013/02/28(木) 12:34:17.03
>>127
なるほど、
>C c(*s);
で生成されたオブジェクト '*s' は一時オブジェクト、コンストラクタのコールが終わると消えてC::printf() までは生きていないと。
http://toro.2ch.net/test/read.cgi/tech/1359924126/294 ではよくある返り値の一時オブジェクトが話題でしたが、今度は引数の一時オブジェクト例とは、感謝。

>なんだQか
どうしてそう思ったの?

168 :デフォルトの名無しさん:2013/02/28(木) 12:57:18.10
戻りの束縛は有用だけど、引数の束縛は何のメリットもないぞ。

169 :デフォルトの名無しさん:2013/02/28(木) 14:06:33.92
>>168
いいんだって
それより文法を正しく理解しているかどうかだ

170 :デフォルトの名無しさん:2013/02/28(木) 14:13:56.71
C++0xで追加されたrandomを使おうと思うのですが、
std::mt19937 myrand();
の()内に乱数の種を入れることはわかったのですが、
ここではsrand()のように、種を入れる初期化用関数は存在しないのでしょうか?
初期化用の処理にsrand()を入れていたので、どうしていいのか戸惑っています

171 :デフォルトの名無しさん:2013/02/28(木) 14:18:29.06
インスタンスごとに独立してない種なんか本当に欲しいか?

172 :デフォルトの名無しさん:2013/02/28(木) 14:21:31.69
myrand(初期化用の数値)

173 :デフォルトの名無しさん:2013/02/28(木) 14:53:54.98
>>158
なに言ってるんだ?
>constの参照はコンストラクタで初期化しないとコンパイルエラーになる
当たり前だカス。ドヤ顔でいうことじゃないだろ。
お前がド素人丸出しなんだよ。
それに何よQって?知らんよそんなもん

174 :デフォルトの名無しさん:2013/02/28(木) 15:43:53.57
◆QZaw55cn4c

175 :デフォルトの名無しさん:2013/02/28(木) 15:57:39.44
ようQ
顔真っ赤にしてファビョらなくてもいいぞ老害

176 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/02/28(木) 20:19:56.19
class MyRand {
static unsigned m_seed;
std::mt19937 m_rand;
public:
MyRand() : m_rand(m_seed) {
}
...
};

unsigned MyRand::m_seed;

void MySRand(unsigned seed) {
MyRand::m_seed = seed;
}

177 :デフォルトの名無しさん:2013/02/28(木) 20:20:16.83
ム板もそうだが、マには精神壊れている奴が多いよな
そんな奴が就くからドカタ職業になるんだろうなと思う
いや、ドカタ職業だから精神壊れている奴ぐらいしか就かないのかも

178 :デフォルトの名無しさん:2013/02/28(木) 21:02:19.68
>>176
friend か public が必要だけどね。

179 :デフォルトの名無しさん:2013/02/28(木) 21:26:56.69
>>177
精神の壊れ方にもいろいろ種類があるけど、他人に迷惑を掛けない壊れ方(自己破壊的)と、
他人に迷惑を掛けまくり(他罰的)な壊れ方の二種類に大別出来る。

前者は統失・双極性障害・うつ病、後者は人格障害がほとんど。後者はアスペではないかと
思う人もいるかもしれないが、それは単にアスペが人格障害を伴っている場合が多いから。

180 :デフォルトの名無しさん:2013/02/28(木) 22:20:16.61
無駄な分類をするのも習い性だな

181 :170:2013/02/28(木) 23:19:28.02
>>171
いえそういうことではなく、乱数クラス内に種を渡す用のメンバ関数がないのかなと思ったのです

>>176>>178
ありがとうございます。しかしかえって使いにくくなっているような気がしますが…

皆さまありがとうございました、自己解決しました。
ttp://ideone.com/6QYWl1
例えばあるクラスで使う場合、コンストラクタで初期化をするのはどうすればいいのかと思っていたのですが、
このようにすればいいのですね。

182 :デフォルトの名無しさん:2013/02/28(木) 23:19:46.26
無駄な分類(クス

分類せずに人を見る事が可能だと思ってるのか?

プログラムで言えばソートアルゴリズムにいろいろあるようなもんだ

183 :デフォルトの名無しさん:2013/02/28(木) 23:24:56.87
>>181
解決したようだけど一応、種の再初期化をしたいってことならseedメンバ関数がある。

184 :デフォルトの名無しさん:2013/02/28(木) 23:35:49.16
なんだ、またいつもの粘着君かよ

185 :デフォルトの名無しさん:2013/02/28(木) 23:56:09.93
(クス

これは流行る

186 :170:2013/03/01(金) 01:29:46.12
>>183
あ、あるにはあるのですね。ありがとうございます。

187 :126:2013/03/01(金) 02:42:21.24
const 修飾子の有無によって、メモリイメージが変わるものなの?

188 :デフォルトの名無しさん:2013/03/01(金) 02:46:46.78
メモリイメージって何のこと言ってるのかな?

189 :126:2013/03/01(金) 03:16:18.13
>>188

>>127を例にとると
C::C(const std::string& s) : cs(s) {}
に対して C c(*s); としたときにスタック上に展開される *s の内容と
C::C(std::string& s) : cs(s) {}
に対してのそれとが異なるかどうか?

あるいは一般的に const をつけるかつけないかで、スタック上に展開される内容が異なるかどうか、気になるのです。

190 :デフォルトの名無しさん:2013/03/01(金) 04:15:14.40
変わらないよ
その場合constは魔法でも何でもない
ただ書き換えのエラーチェックがコンパイル時に為されるだけ

191 :デフォルトの名無しさん:2013/03/01(金) 04:16:09.94
実体は単なるポインターでしかないんだから

192 :デフォルトの名無しさん:2013/03/01(金) 08:01:03.66
>>189
気になるなら自分でアセンブリ吐かせて見ろよ。

193 :デフォルトの名無しさん:2013/03/01(金) 10:19:49.22
>>189
強いて言えばリファレンスをメンバに持たせるとそのメンバはコンストラクタで必ず初期化しないと
コンパイルが通らない位の違い

194 :デフォルトの名無しさん:2013/03/01(金) 20:25:00.31
レファレンスってポンタ渡ししてデリファレンスを自動でやるぽ機能だろ
ho(T&amp;&amp; ge)の場合、引数にはポンタ以外何か渡しているのか

195 :126:2013/03/01(金) 21:49:39.03
>>191
http://toro.2ch.net/test/read.cgi/tech/1354116880/806 でそう書いたらぼろくそだった‥‥

196 :デフォルトの名無しさん:2013/03/01(金) 23:32:58.04
>>195
そこであなたが言ってることはほとんど正しいと思うけどね
ボロクソ言ってる奴は何も考えていないシッタカ素人としか思えない
参照がポインタconstの糖衣構文とは言い切れないのって
const参照による一時オブジェクト束縛くらいじゃないの?

そうじゃないって言うなら、そうじゃない例を挙げて欲しいものだよ

197 :デフォルトの名無しさん:2013/03/01(金) 23:46:01.85
配列の扱いがまず違う。

198 :デフォルトの名無しさん:2013/03/02(土) 00:30:45.10
ポインタと参照は概念が違うのに、実装が同じという理由だけで故意か低脳なのか
混同している輩には呆れる

199 :デフォルトの名無しさん:2013/03/02(土) 00:48:26.96
また社会的に弱いのがわいてきたな

200 :デフォルトの名無しさん:2013/03/02(土) 01:00:10.53
概念ガー

201 :デフォルトの名無しさん:2013/03/02(土) 01:32:42.82
無能な味方とか蛇足でスレが縞模様になるのは避け様の無い現実。

202 :デフォルトの名無しさん:2013/03/02(土) 02:50:34.74
>>198
混同している、とはどういう意味?今現在混同している事例が進行中なの?

203 :デフォルトの名無しさん:2013/03/02(土) 03:00:58.98
>>202
その前にお前は敵なのか味方なのかそれをはっきりさせろ

204 :デフォルトの名無しさん:2013/03/02(土) 03:02:24.29
敵(笑)味方(笑)
無能の言うことはいつもこれ

205 :デフォルトの名無しさん:2013/03/02(土) 09:35:00.44
自己顕示が目的だからな

206 :デフォルトの名無しさん:2013/03/02(土) 10:10:30.20
このスレで餌付けに成功しただけ

207 :デフォルトの名無しさん:2013/03/02(土) 11:45:49.73
今日もQzは炎上学習法の実践中

208 :デフォルトの名無しさん:2013/03/02(土) 12:26:11.80
餌付けされたのは金魚の糞のほうであって金魚は昔からいたというか人気に嫉妬

209 :デフォルトの名無しさん:2013/03/02(土) 13:22:24.76
低能ってホント女の腐ったような発想しかしないんだな

210 :デフォルトの名無しさん:2013/03/02(土) 13:58:05.02
c系スレは雑談、罵倒がたくさんないとつまらんよな
APIスレみたいになると楽しいよな

211 :デフォルトの名無しさん:2013/03/02(土) 16:14:45.45
wcsncpy_sについて教えてください。
今、次のようなコードがあるとします。

wchar_t * src = L"aabbcc";
wchar_t dest[3];
size_t lenToCpy = 2;
wcsncpy_s(dest, 3 * sizeof(wchar_t), src, lenToCpy);
dest[6] = L'\0';

"aa"だけコピーしたいんですけど。
使い方はこれであってますか?

なんか、wcsncpy_sでsrcの長さ(この場合6文字xsizeof(wchar_t) = 12バイト)だけdestが0xfeで埋められてから
len文字分だけコピーされているように見えます。@VS2008

なのでdestでヒープが壊れるってデバッグ終了時に言われるんですが。。
(この例ではdestはローカルだけど、実際にやってるコードだとヒープです。)

212 :デフォルトの名無しさん:2013/03/02(土) 16:19:47.41
>>211
>dest[6] = L'\0';
ダメ

213 :デフォルトの名無しさん:2013/03/02(土) 16:21:10.46
>>212
あ、すみません。。
そこは2chに書くときに治し忘れてました。。dest[2]=L'\0'って読み替えてください。。
本当に申し訳ない。

214 :デフォルトの名無しさん:2013/03/02(土) 16:24:00.68
>これらの関数のデバッグ バージョンは、最初に 0xFE のバッファーに格納します。
>この動作を無効にするには、_CrtSetDebugFillThreshold を使用します。

正常動作ですが何か

215 :デフォルトの名無しさん:2013/03/02(土) 16:45:35.26
>>214
え?
FEで埋めるのはいいんですが、与えられたバッファサイズを超えて埋めるのってどうなんですか?

なんか追っかけていくと最後に_FILL_STRING(_DEST, _SIZE, _SIZE - available + 1);
って処理があって、これがバッファをバーンと壊してますね。
その直前まではいい感じなのに。

216 :デフォルトの名無しさん:2013/03/02(土) 16:45:35.54
第2引数はバイト数じゃなくて文字数だろ。
マニュアルちゃんと読めよ

217 :デフォルトの名無しさん:2013/03/02(土) 16:46:40.72
wcsncpy_s の第二、第四引数はバイト数じゃなくて要素数
3 * sizeof(wchar_t) の * sizeof(wchar_t) が要らない

218 :デフォルトの名無しさん:2013/03/02(土) 16:46:55.73
そもそも”3 * sizeof(wchar_t)”これ要らん
配列ならテンプレートが勝手に要素数埋めてくれる

219 :デフォルトの名無しさん:2013/03/02(土) 16:47:48.62
>>216
ありがとうございます!
やっぱり使い方が間違っていたんですね。
スレ汚しすみませんでした

220 :デフォルトの名無しさん:2013/03/02(土) 16:58:21.75
何気に0xFDで埋めると書いてあるままになってるマニュアルが(2005までは0xFD、2008からは0xFE)

221 :デフォルトの名無しさん:2013/03/03(日) 09:07:14.32
ヘッダファイルでincludeしたくないヘッダがあるんだけど、
template使ったらヘッダでincludeしなきゃならなくなる。
template使わない方がいいのかな?

222 :デフォルトの名無しさん:2013/03/03(日) 09:10:02.15
>>221
それもテンプレートにすりゃいいじゃん

223 :デフォルトの名無しさん:2013/03/03(日) 09:20:01.48
どういうこと?

例を出すと、Windows.hをヘッダでインクルードしないぞと決めていて、
template使ってしまうと、実装部分にSleep関数あるから困るみたいな感じ。

224 :デフォルトの名無しさん:2013/03/03(日) 09:23:12.51
template<class F>
void func(int a, F f) { f(a); }
で使う側で func(10, Sleep); としてやればいい

225 :デフォルトの名無しさん:2013/03/03(日) 09:46:52.12
なるほど
関数渡してやればいいわけですか
ありがとうございました
あとは自分の中で保守性とか考えてどうするか決めたいと思います

226 :デフォルトの名無しさん:2013/03/03(日) 13:18:41.66
薄いテンプレートを挟むのも良い

227 :デフォルトの名無しさん:2013/03/03(日) 23:29:17.69
>>222, >>226
俺質問者じゃないけど、興味あるから具体的にどうするか教えて

228 :デフォルトの名無しさん:2013/03/03(日) 23:48:08.45
template<void(&F)(DWORD)>void func(DOWRD a,F f=Sleep){f(a);}

229 :デフォルトの名無しさん:2013/03/03(日) 23:49:28.26
template<void(&F)(DOWRD)=Sleep>void func(DOWRD a){F(a);}

230 :デフォルトの名無しさん:2013/03/04(月) 00:11:32.68
>>229
それじゃ汎用性なさ杉
Sleepが一つならともかく、引数型・数や返値が違うapiを使うたびに書くようじゃ
おいおいじゃないか

231 :デフォルトの名無しさん:2013/03/04(月) 00:16:13.93
非テンプレートの基底クラスで実装して
それを継承するのが定石じゃね?

232 :デフォルトの名無しさん:2013/03/04(月) 02:23:19.72
template<class F, class... Args>
auto func(F f, Args... args) -> decltype(f(args...))
{ return f(args...); }

233 :デフォルトの名無しさん:2013/03/04(月) 03:17:04.21
>>211
String.copyValueOf(char[] data)使いなよ

234 :デフォルトの名無しさん:2013/03/04(月) 03:22:25.60
>>233
スレタイ見ろよ

235 :デフォルトの名無しさん:2013/03/04(月) 03:25:27.52
どの??

236 :デフォルトの名無しさん:2013/03/04(月) 03:27:25.04
C++って書いてるのが見えないのか

237 :デフォルトの名無しさん:2013/03/04(月) 03:33:28.25
??

238 :デフォルトの名無しさん:2013/03/04(月) 03:36:24.64
今気づいた。。。

    ∧_∧
     ( ・ω・ )   何も思い残すことはない
     (====)    ボコボコにされてやんよ
  ______( ⌒) )
/\   ̄`J ̄ ̄ ̄\
 ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄
        | |
      / \

239 :デフォルトの名無しさん:2013/03/04(月) 03:37:47.11
>>233
Javaのメソッド紹介してどうする?

240 :デフォルトの名無しさん:2013/03/04(月) 03:44:51.16
どういう勘違いだw

241 :デフォルトの名無しさん:2013/03/04(月) 20:57:34.98
>>227
亀ですまんな
薄いテンプレートは型を動的に判定する処理を書いて、テンプレートでラップする事によって型安全性を確保するもの
ttp://ideone.com/l2aW9M
他にも、特定のコンセプトを満たす型を消去したい場合はBoost.TypeErasureが使える
Boost使ってないけどおおよそ以下の感じになる
ttp://ideone.com/l2aW9M
他にもBoost.Variant(Any)など何らかの方法で型を消去してやれば処理の隠蔽が実現できる

242 :デフォルトの名無しさん:2013/03/04(月) 23:07:21.04
すんません、VC++使わないでDXライブラリ使う方法教えてくださいな
winでcygwin使ってます

243 :デフォルトの名無しさん:2013/03/04(月) 23:09:12.31
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html

244 :デフォルトの名無しさん:2013/03/04(月) 23:09:59.23
dllのがあるから探せば?

245 :デフォルトの名無しさん:2013/03/04(月) 23:44:22.91
訂正
総合開発環境使わないでDXライブラリ使う方法を教えてください

246 :デフォルトの名無しさん:2013/03/04(月) 23:50:07.99
適切なディレクトリに置く
コード書く
コンパイルする
リンクする

247 :デフォルトの名無しさん:2013/03/04(月) 23:50:51.90
まず君は総合開発環境使わないでHello worldのプログラム書けるところまではできるの?

248 :デフォルトの名無しさん:2013/03/05(火) 00:23:33.03
BCCコマンドラインとDirectXSDKだけで開発している俺に隙はなかった

249 :デフォルトの名無しさん:2013/03/05(火) 00:44:45.62
>>247
普段Eclipse使っててCDTなるC/C++開発環境プラグインを導入したのだがコンパイラがついていなかった
なのでcygwin導入したもののEclipseで実行するとバイナリが見つからないチックなエラーが出る
そこで総合開発環境はあきらめて質問した

250 :デフォルトの名無しさん:2013/03/05(火) 00:48:12.87
なんで諦めるんだそこで!

251 :デフォルトの名無しさん:2013/03/05(火) 00:49:21.83
EclipseでC/C++とかドMだな

252 :デフォルトの名無しさん:2013/03/05(火) 01:24:36.88
VC++入れてcl.exeでも叩いてみたら

253 :デフォルトの名無しさん:2013/03/05(火) 09:22:27.18
MAX_PATH
の記述はOKなのに、
MAX_DRIVE や MAX_DIR は、前に _ をつけなければならない理由を教えてください。

あと、普段記述するのに、
MAX_PATH
_MAX_PATH
のどちらがいいですか?

254 :デフォルトの名無しさん:2013/03/05(火) 09:31:35.01
>>253
http://www.google.co.jp/search?q=%22MAX_PATH%22+%22_MAX_PATH%22

255 :デフォルトの名無しさん:2013/03/05(火) 09:33:39.83
Cランタイム由来(Windows APIでそれを使わない)だから
変な言い方だがWindowsアプリケーションなのかC/C++アプリケーションなのかで決めろ
_が付く→C/C++実装系の為
付かない->Windows APIのもので言語依存とか知らんがな

256 :デフォルトの名無しさん:2013/03/05(火) 19:57:24.85
MAX_PATHは
C言語コンパイラで決められているんですか
C言語ではなくOSで決められいるてるんですか
それとも、他のなにかでですか

257 :デフォルトの名無しさん:2013/03/05(火) 20:14:51.81
OSの提供するヘッダかな

258 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/05(火) 21:33:52.52
だからMAX_PATHはWindows APIで定義されているんだってばよ

259 :242:2013/03/05(火) 21:53:02.95
あきらめてVC++Expression2010DLしますた

260 :デフォルトの名無しさん:2013/03/05(火) 22:08:41.65
了解しますた

261 :デフォルトの名無しさん:2013/03/07(木) 07:46:37.56
関数ポインタと、operator () をオーバーロードした関数オブジェクト、
両方を引数として受け取れる関数は作れるでしょうか。

void f (int x, int型を引数にとる1引数関数ポインタor関数オブジェクト g)
{
 g が関数ポインタなら (*g) (x);
 g が関数オブジェクトなら g (x);
}

この関数 f を2種類の引数でオーバーロードするしか無いでしょうか。

262 :デフォルトの名無しさん:2013/03/07(木) 07:50:38.78
template<typename T>void f(int,T);

263 :デフォルトの名無しさん:2013/03/07(木) 12:21:10.79
>g が関数ポインタなら (*g) (x);
関数ポインタでも g (x); で呼べるだろ。

どちらもtemplate<typename T>void f(int,const T&);
で受けられる。

ただし、VC10にはconst T&に&関数名ではなく、
暗黙に関数ポインタに変換されることを期待して、関数名を渡すと、
おかしな挙動をするバグがあったから注意。

他はしらね。

264 :261:2013/03/07(木) 12:45:15.54
アドバイスどおりにしたらできました。

ありがとうございました。

265 :デフォルトの名無しさん:2013/03/07(木) 13:08:32.89
関数オブジェクトを期待している引数を
template<class F>void call(F f);
のようにコピーで受け取るのが流行ってるのはなぜですか?
無駄なコストに思えるのですが合理的な理由があるのでしょうか

266 :デフォルトの名無しさん:2013/03/07(木) 14:41:12.07
>>265
いちいちそんなコストを気にしていない or inline化を期待してる or operator()に副作用がある場合にそれを呼び出し元に伝えないように or
F&だと一時変数を渡せない。C++11ならtemplate FのF&&でいいかもしれないがC++03とのコードの可搬性を考えているl。

267 :デフォルトの名無しさん:2013/03/07(木) 14:45:20.28
インライン化ならconst&Fでは?
これならテンポラリも渡せるしconst故に副作用もない(constメソッドに副作用がある書き方をする方が悪い)
やはり値渡しをする理由がないですよ

268 :デフォルトの名無しさん:2013/03/07(木) 14:54:38.05
>>267
const& F自体はinline化には関係ないと思うけど。
内部状態を変更する関数オブジェクトを渡す予定がないならconst F&でもいい。でも柔軟性はなくなるよね。

269 :デフォルトの名無しさん:2013/03/07(木) 15:13:59.98
C++11ならstd::ref,std::crefがあるし、moveもできる。

270 :デフォルトの名無しさん:2013/03/07(木) 15:52:17.47
const参照だと非constメンバ関数が呼べない。
環境によっては平行性に影響があるかもしれない。

271 :デフォルトの名無しさん:2013/03/07(木) 16:42:06.56
STLを学ぶのにおすすめの本はありませんか?
classまではわかります

272 :デフォルトの名無しさん:2013/03/07(木) 16:49:31.74
STLはクラスより易しい。
STLを実現するためにクラスなどC++の装備が整えられた。
クラスをふくめC++の多くの装備は裏方。
STL+C言語ができれば、多くを知らずとも生産性は余り変わらない。

273 :デフォルトの名無しさん:2013/03/07(木) 17:08:39.53
ttp://www.google.com/webhp?q=stl+pdf

274 :デフォルトの名無しさん:2013/03/07(木) 20:28:28.75
STL を扱った書籍自体あまり見ないよね。
ま、かなり直交的に設計されてるから、覚える事ってか少ないんだよね。
使い方だけしか載ってないけど、STL 標準講座で十分かなと思う。
少し深入りしたければ、effective STL かな。

275 :デフォルトの名無しさん:2013/03/07(木) 20:31:09.55
普通に使うのは簡単なんだが
イテレータとかアロケーターの作り方覚えるのめんどかった
なんかこうC#みたいにこのインターフェースを実装しろみたいなのがある方が親切だよね

276 :デフォルトの名無しさん:2013/03/07(木) 20:39:20.38
ありがとうございました

277 :デフォルトの名無しさん:2013/03/07(木) 20:54:16.46
C++ってライブラリ作る人が使う言語で
C#みたいに簡単にアプリを作る人が使う言語じゃないよな

278 :デフォルトの名無しさん:2013/03/07(木) 20:57:00.44
>>277
でもライブラリ作る人が作ったそのライブラリは誰が使うの?

279 :デフォルトの名無しさん:2013/03/07(木) 21:07:52.91
C++が高尚なものと言いたいだけだろ
実際そういうC++プログラマは多いがな

280 :デフォルトの名無しさん:2013/03/07(木) 21:15:48.98
>>279
他の言語を見下している奴が多いよな
最高の言語はC++でそれを使っている俺は最高の奴だって自負
俺は最近はアプリはC#だけどな

281 :デフォルトの名無しさん:2013/03/07(木) 22:28:55.29
至高のbrainf*ck、悠久のHQ9+、穢れ無きwhitespace

282 :デフォルトの名無しさん:2013/03/07(木) 22:37:24.98
至高の上が究極ならば、究極はロゴライターでお願いします

283 :デフォルトの名無しさん:2013/03/07(木) 23:00:35.08
高尚な grass

284 :デフォルトの名無しさん:2013/03/08(金) 00:29:45.89
>>281
C++の向こうへと君は還るのか

285 :デフォルトの名無しさん:2013/03/08(金) 02:31:03.86
C#で間に合うならC#使えばいいじゃん
わけのわからないいちゃもんつけるなアホ

286 :デフォルトの名無しさん:2013/03/08(金) 22:35:03.61
C#はこれ以上進化しないでほしい。
もうラムダとかLINQとかいらない。

287 :デフォルトの名無しさん:2013/03/08(金) 22:37:17.04
ちょっと僕、最近ポインタを学び始めました
メモリの番地を参照したり変更したりもできちゃうのですね 僕、これは反則だと思います
Javaとweb系しかいままでやってきませんでしたが、このポインタを使ってるとまるでチートしてるような気分ですわ
ありがとう たけちゃんより

288 :デフォルトの名無しさん:2013/03/08(金) 22:39:25.82
チートしたことあるのか

反則だな

289 :287:2013/03/08(金) 22:47:44.65
>>288
チートだけにっすか(満点大笑いですwww)
288さん、反則はチートの英訳ですよwww

290 :デフォルトの名無しさん:2013/03/08(金) 22:58:36.97
今はテンプレートのせいでモンスターみたいになってしまったけれど、
もとは高級アセンブラだから、何でもありで、それでいてシンプルだった。

291 :デフォルトの名無しさん:2013/03/08(金) 23:02:58.79
英訳って、日本語を英語に訳すものだとずっと思ってた

292 :デフォルトの名無しさん:2013/03/08(金) 23:05:51.18
すみません質問なのですが、
TRUE FALSE NULLのように大文字で書く理由ってなんなのですかね
例えば小文字にしても動いたり、動かない場合があったりする気がします

293 :デフォルトの名無しさん:2013/03/08(金) 23:06:48.72
TRUEもFALSEもNULLも使わないように

294 :デフォルトの名無しさん:2013/03/08(金) 23:07:16.33
マクロだから

295 :デフォルトの名無しさん:2013/03/08(金) 23:08:19.60
マクロは大文字で書くべしとの禿のお言葉

296 :デフォルトの名無しさん:2013/03/08(金) 23:29:14.34
マクロ??マクロは使ってませんよ私
その関数がマクロで作られているってこと??

297 :デフォルトの名無しさん:2013/03/08(金) 23:34:56.39
TRUEもFALSEもNULLもマクロだろうが

298 :デフォルトの名無しさん:2013/03/08(金) 23:37:09.44
お前は全部自分で定義しないと使えないとでも思ってんのか

299 :デフォルトの名無しさん:2013/03/08(金) 23:39:26.86
もしかして、そのTRUEやFALSEやNULLはint型で定義しているって事?

300 :デフォルトの名無しさん:2013/03/09(土) 00:08:44.58
インクルードしてるどれかのヘッダで
#define NULL 0
#define TRUE -1
#define FALSE 0
とかされてる

301 :デフォルトの名無しさん:2013/03/09(土) 00:59:19.22
シングルトンを強制するインタフェスクラスって作れるんですか?

302 :デフォルトの名無しさん:2013/03/09(土) 01:07:24.73
TRUEは1だよw
VBじゃねーんだから

303 :デフォルトの名無しさん:2013/03/09(土) 01:10:41.94
>>300
C++初心者の素朴な疑問なんですが、どうしてBool型ではなくint型なの?
メモリけちるため?

304 :デフォルトの名無しさん:2013/03/09(土) 01:13:04.47
・++ ++・

305 :デフォルトの名無しさん:2013/03/09(土) 01:13:52.72
Bool型なんて存在しない

306 :デフォルトの名無しさん:2013/03/09(土) 01:15:22.96
なるほど・・・
マシン語に近いって言われる理由がなんとなくわかった気がする

307 :デフォルトの名無しさん:2013/03/09(土) 01:17:28.98
どこでマシン語に近いと思ったんだ

308 :デフォルトの名無しさん:2013/03/09(土) 01:17:36.81
nullって0なのかよ

309 :デフォルトの名無しさん:2013/03/09(土) 01:21:26.84
そういう全角半角まじりの文字ってどうやって入力してんだ

310 :デフォルトの名無しさん:2013/03/09(土) 01:34:17.21
>>303
C++にbool型はあってもBool型はない
そしてC++ではbool型はあるのでマクロを使う必要はない

Cにはbool型はない
一部の環境・ライブラリではCで真偽値型を模すためにTRUE/FALSEマクロを定義してる
bool型はないのでbool型で定義するのは不可能

311 :デフォルトの名無しさん:2013/03/09(土) 02:02:22.12
せっかくC++でbool型を追加してもCとの互換から
intとbool変換を無制限に許すことになったので、
bool型のご利益がほとんど無い。

312 :303:2013/03/09(土) 02:42:54.49
bool型使わない意味がイマイチわからないなぁ〜。
C++のライブラリでもそのマクロ?なるものでint型でフラグわけるのですよね?

313 :デフォルトの名無しさん:2013/03/09(土) 02:47:42.69
Cでも使えるんだから、今時は普通にbool/true/falseを使うよ。
Bool/TRUE/FALSEを使うのは一部のライブラリの方言(方便)と思っておけばよろし。

314 :デフォルトの名無しさん:2013/03/09(土) 03:04:22.88
c99からだっけ、この件はcがc++の後追いだよね。

315 :303:2013/03/09(土) 03:12:49.34
>>313
>Cでも使えるんだから、今時は普通にbool/true/falseを使うよ。
コレが聞きたかった!安心してつかいます。

316 :デフォルトの名無しさん:2013/03/09(土) 03:20:16.00
boolとBOOLは同じだと思ってたんだが64bitだと違うようだな。

317 :デフォルトの名無しさん:2013/03/09(土) 03:30:55.93
どういうこと?
Javaのラッパークラスとはまた別?

318 :デフォルトの名無しさん:2013/03/09(土) 03:40:05.72
>>316
BOOLは標準じゃないんだから実装次第だよ。

319 :デフォルトの名無しさん:2013/03/09(土) 03:46:41.16
if ( cond ) {
while ( cond ) {
condの部分は非ゼロなら真、ゼロなら偽という定義は変わってないよね?

320 :デフォルトの名無しさん:2013/03/09(土) 08:48:30.19
> bool型使わない意味がイマイチわからないなぁ〜。
> C++のライブラリでもそのマクロ?なるものでint型でフラグわけるのですよね?
間違い
純粋にC++で完結するなら真偽値マクロは使わずboolだけを使う
C++からC用に真偽値マクロを定義したライブラリを使うところはそのライブラリの定義するマクロを使わなくてはならない

321 :デフォルトの名無しさん:2013/03/09(土) 09:30:50.68
んー?
C++で簡潔するというのがどういうのかがわかんない
例えばC++用のライブラリを作るとして、ある程度Cと互換のあるものを作りたい場合にbool方使わずにint型使ったりするってこと?

322 :デフォルトの名無しさん:2013/03/09(土) 10:26:36.97
> 例えばC++用のライブラリを作るとして、ある程度Cと互換のあるものを作りたい場合にbool方使わずにint型使ったりするってこと?
大体はそんな感じ(ライブラリが外部に公開するインターフェイスやデータ構造の話)

C++用がC++専用の意味ならそのライブラリはCとの互換性を考える必要はない(Cから使えなくてもかまわない)からboolを使う

C/C++のどちらからでも使えるライブラリならC用のライブラリとして作ればいいけど
その場合boolは使えないからマクロを用意してそれを使う

323 :デフォルトの名無しさん:2013/03/09(土) 10:33:45.53
cppでcライブラリとか例外処理めんどくさくね?
いちいち全部tryでラップすんの?

324 :デフォルトの名無しさん:2013/03/09(土) 10:47:10.91
BOOLとboolの一番の違いはデータサイズかな。
BOOLはintだけど、boolは1バイトかint以下のことが多い。
関数の引数なら問題ないだろうけど、
配列や構造体の場合使い分けないとまずいね。

325 :デフォルトの名無しさん:2013/03/09(土) 11:05:39.73
c99でも↓これ正しくないだろ。C++はどうだっけ… 規格書が手元にない。

int p(void);
if (p() == true)

326 :デフォルトの名無しさん:2013/03/09(土) 11:16:58.13
>>324
構造体のサイズとか気にする時に実装が環境依存のboolは使わないよ
charを使うのが普通だ

327 :デフォルトの名無しさん:2013/03/09(土) 11:43:26.67
if(p()) とは動作が異なるって意味なら正しくない
C99のtrueマクロは1でC++のtrueは整数拡張で1になるから
それを判定したいならおかしくない

まあいわゆる正しい書き方ではないだろうが

328 :デフォルトの名無しさん:2013/03/09(土) 11:50:30.00
a != false と a == trueが等しくないなんちゃってboolなんか廃止すれば良いのに。

329 :デフォルトの名無しさん:2013/03/09(土) 11:55:32.68
非ゼロを確実にTRUE(1)にするために良くこんなことやってるよね。
BOOL b = ( x != FALSE )

boolは2値化を確実にやってくれるところだけはありがたい。

330 :デフォルトの名無しさん:2013/03/09(土) 11:56:17.85
ばちもんじゃんそれ・・・

331 :デフォルトの名無しさん:2013/03/09(土) 11:58:59.06
Exceptional C++の項目45に、boolが組込型である必要性が書いてあるな。
いささか厳しすぎる内容だと思うが、それでもマクロではまずい場合が多い。
enumかclassにするのが組込型の次に良いらしい。

332 :デフォルトの名無しさん:2013/03/09(土) 12:01:18.07
int - boolの変換をキャスト必須に出来なかった時点で負けが決まっていたようなものだな。

333 :デフォルトの名無しさん:2013/03/09(土) 12:04:22.33
cpp自体が負け犬がいやいや使う言語だし

334 :デフォルトの名無しさん:2013/03/09(土) 12:10:27.87
C preprocessor の話題はもういいよ

335 :デフォルトの名無しさん:2013/03/09(土) 12:48:14.23
ライブラリの投げた例外てキャッチして自前の例外なげるのが普通なん?

336 :デフォルトの名無しさん:2013/03/09(土) 12:56:37.87
>>333
C++が難しくて挫折したからって負け惜しみ言うなよ(^w^)

337 :デフォルトの名無しさん:2013/03/09(土) 13:06:14.11
>>335
> ライブラリの投げた例外てキャッチして自前の例外なげるのが普通なん?
その例外をどう扱いたいかを決めてそれにあわせた処理をするのが普通

338 :デフォルトの名無しさん:2013/03/09(土) 13:21:25.46
じゃあどう扱うかは外が決めるとした場合にはどうする?

339 :デフォルトの名無しさん:2013/03/09(土) 13:49:19.13
>>328
a が bool 型なら
a != false と a == true は等しくなるよ

a が bool 型でない場合に保証されないのは
C99 も C++ も同じ

340 :デフォルトの名無しさん:2013/03/09(土) 15:49:32.64
例外は例外的なんだから一般的な対処法なんてものはない。
まあcatchするかしないかのどちらかだとは言える。

341 :デフォルトの名無しさん:2013/03/09(土) 17:53:41.66
>>338
> じゃあどう扱うかは外が決めるとした場合にはどうする?

なにもせず全ての例外をそのまま外に渡す

どこに疑問に思うところがあるんだろう?

342 :デフォルトの名無しさん:2013/03/09(土) 19:03:13.45
追加情報なにも持たせないとか素人かよw

343 :デフォルトの名無しさん:2013/03/09(土) 19:30:04.39
当然素人だよ。ドカタには素人しかいないから

344 :デフォルトの名無しさん:2013/03/09(土) 19:32:14.02
自分が土方だからって…

345 :デフォルトの名無しさん:2013/03/09(土) 19:59:49.45
土方は土曜日休みなしだよ

346 :デフォルトの名無しさん:2013/03/09(土) 20:17:29.99
職業プログラマって日本では人形のプログラム開発機械扱いだからな
ど素人でもなれる職業にしたから、機械扱いになるのはしょうがない
人間に生まれたのに機械になるなんて信じられない
壊れるまえに人間に戻れ

347 :デフォルトの名無しさん:2013/03/09(土) 21:18:04.88
日本のソフトウェア分野は弱すぎて米にやられっぱなしですな

348 :デフォルトの名無しさん:2013/03/09(土) 22:07:29.19
素人ドカタでOKの日本、優秀なプログラマを世界中から集めるアメリカ
やっている連中のレベルが違いすぎて当然

349 :デフォルトの名無しさん:2013/03/09(土) 22:17:40.83
つうてもアイデアがあれば実現はできるぐらいの技術はあるだろ
日本全国さがしても技術的に無理な案件てなんだ?

350 :デフォルトの名無しさん:2013/03/09(土) 22:25:13.79
技術、技術って念仏好きだよな
でも、ドカタには技術は禄にいらんから、素人でOKってことだろ

351 :デフォルトの名無しさん:2013/03/09(土) 22:32:38.84
>>349
特許庁

352 :デフォルトの名無しさん:2013/03/09(土) 22:36:54.33
マ板でやれ

353 :デフォルトの名無しさん:2013/03/09(土) 22:57:52.20
>>349
ないやつの方がたぶん多い

354 :デフォルトの名無しさん:2013/03/09(土) 23:40:23.62
uyが好きそうなネタだな
uyか?
uyはコテ付けて暴れろうざい

355 :デフォルトの名無しさん:2013/03/09(土) 23:48:26.21
VC++って初心者にはわかりづらすぎるよ
特にライブラリの追加。
リンカーだとかインクルードだとか設定が面倒くさすぎだし、初心者がライブラリを使いづらいし、ライブラリ自体追加したいという気にならない。
Java x Eclipseみたいにガンガンライブラリ追加できる仕組みにしてほしいわ

356 :デフォルトの名無しさん:2013/03/09(土) 23:51:22.22
馬鹿はライブラリなど使うな

357 :デフォルトの名無しさん:2013/03/09(土) 23:58:34.10
C++だとVC++以外も大して変わらん

358 :355:2013/03/10(日) 00:04:36.81
>>356
>馬鹿はライブラリなど使うな

ほれみろ。いったとおりじゃないか。結局こういう流れになる。そういう排他的な言語なのか?C++は。

359 :デフォルトの名無しさん:2013/03/10(日) 00:09:06.81
どの言語だろうと自分から学ばない馬鹿には辛く当たるにきまってるだろ

360 :デフォルトの名無しさん:2013/03/10(日) 00:10:07.56
ライブラリの追加が大儀なのは俺も認める

361 :デフォルトの名無しさん:2013/03/10(日) 00:10:15.20
VC++じゃなくてVSの作りじゃねーの
環境と言語を一緒くたにしてしまう男の人って・・・

362 :デフォルトの名無しさん:2013/03/10(日) 00:11:38.66
>>358
マジキチのクズがいやいややらされる言語がC系列だから仕方ない
性格悪い→++の案件押し付けられる→精神汚染されて性格がさらにゆがむ
この悪循環から抜け出せないんだよ奴らは

363 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/10(日) 00:13:19.79
ライブラリをパッケージ化してライブラリマネージャーを各環境で作れば? CMakeみたいに

364 :デフォルトの名無しさん:2013/03/10(日) 00:14:07.04
インクルードとライブライリファイルのパス設定するのそんなにめんどいか?
そんなこと程度をめんどくさがってたらコードなんて書けないだろうに

365 :デフォルトの名無しさん:2013/03/10(日) 00:17:46.20
>>325
c99で規格化されてるよ
お約束的にincludeおすすめ
stdint.h c用
cstdint c++用

366 :デフォルトの名無しさん:2013/03/10(日) 00:18:58.07
プロパティ開いて弄るのが面倒臭いな
ライブラリのリンクまではVC++だと#pragmaでいけるけど
ものによってはそれもダメだし、
インクルードパスの指定はどうにもならない

367 :デフォルトの名無しさん:2013/03/10(日) 00:20:54.78
stdbool ならともかく何で stdint なの

368 :デフォルトの名無しさん:2013/03/10(日) 00:21:35.93
そもそも>>365は何に対するどういうレスなのかが理解できない

369 :デフォルトの名無しさん:2013/03/10(日) 00:21:54.37
>>361
だけどやっぱIDEとともに言語って進化するのではなかろうか

370 :デフォルトの名無しさん:2013/03/10(日) 00:28:52.55
>>369
EclipseとかXcodeなら肯定するけどVSは違うんじゃね

371 :デフォルトの名無しさん:2013/03/10(日) 00:30:00.38
それならC#もわかりにくいでしょうが

372 :デフォルトの名無しさん:2013/03/10(日) 00:30:03.51
C#はともかくC++はIDEとは無関係な進化しかしてないな

373 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/10(日) 00:31:05.06
例えばプロジェクトにインクルードパスやライブラリファイルをD&Dで追加できるようにするとか?

374 :デフォルトの名無しさん:2013/03/10(日) 00:31:57.94
C++はMSの傘下じゃないからな

375 :デフォルトの名無しさん:2013/03/10(日) 00:32:54.22
いや、D&Dで追加とかじゃなくて、同じ「ライブラリ」を追加するんだから、ライブラリの追加方法は共通であってほしいのだよ
可能な限りね。
言語柄しかたないが、個別に振り分けないといけない設定が多すぎるとは思う

376 :デフォルトの名無しさん:2013/03/10(日) 00:32:55.86
>>365
>>322
失礼アンカ間違えた

325は取りあえず、cなら論理式かく必要ないしあまり気にならない
強いてするならfalseと比較かな?
0固定で環境依存しないし。

関数の戻りにbool使うのはwindowsの文化だよね
基本はちゃんとエラーコードを返すべき
エラーと真偽値は意味が違うと思うんだ。

377 :デフォルトの名無しさん:2013/03/10(日) 00:34:30.78
面倒だしコンパイルも遅い
悪い面が多すぎるw

378 :デフォルトの名無しさん:2013/03/10(日) 00:36:43.18
>>368
おっしゃるとおりですorz
boolつかってないのばればれだ
はずかしー

379 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/10(日) 00:42:33.78
RedHatのRPMっていうのは知ってるよね。あれみたいにライブラリとヘッダーをまとめた共通形式のパッケージを作れば?
インストールされている開発環境を識別する仕組みが必要だな

380 :デフォルトの名無しさん:2013/03/10(日) 00:53:17.72
プラットフォームに依存した形だと便利になればなるほどIDE等は無秩序になってしまうのがきついな

381 :デフォルトの名無しさん:2013/03/10(日) 01:03:51.14
MacのFrameworkは比較的簡単に追加できるんだが

382 :デフォルトの名無しさん:2013/03/10(日) 01:09:43.54
include/
lib/
を開発環境に上書きコピーするだけでライブラリのインストール完了、って形式がいいと思う

383 :デフォルトの名無しさん:2013/03/10(日) 01:33:08.27
frameworkは楽でよかった
上書き形式だとアンインストールしたいとき少し面倒かもしれない

384 :デフォルトの名無しさん:2013/03/10(日) 01:38:39.72
>>365,376
流れも読め。>>322はTRUE/FALSEマクロの話からの流れだからC99はお呼びじゃない

385 :デフォルトの名無しさん:2013/03/10(日) 01:44:57.24
include/*.h
lib/*.lib
bin/*.dll,*.exe
?????_uninstall.bat
コピーしたファイルを消すバッチファイルも付けとくか。

386 :デフォルトの名無しさん:2013/03/10(日) 01:47:10.72
それ何てconfigure make install
と思ったけどあれは消すとかしてくれなかったか

387 :デフォルトの名無しさん:2013/03/10(日) 02:02:26.99
確か、make uninstallで消せたはず。

あ゛、UACのせいでバッチが正しく動作しない可能性があった!バッチファイルじゃダメか?

388 :デフォルトの名無しさん:2013/03/10(日) 02:06:37.03
>>379
色んなスレで初心者に嘘教えて喜んでる精神異常は来るな
スレが荒れるだけ

389 :デフォルトの名無しさん:2013/03/10(日) 02:09:51.35
>>388 証拠は?

390 :デフォルトの名無しさん:2013/03/10(日) 02:13:30.99
ファイルの設置自体は何とでもなるけど問題はコンパイルするとき

391 :デフォルトの名無しさん:2013/03/10(日) 02:21:14.19
>>388
証拠がなければあなたを名誉棄損で訴えますよ。近々東京地裁に出廷してもらいます。

392 :デフォルトの名無しさん:2013/03/10(日) 02:28:53.70
その人よく知らないけどこういうのはやめたほうがいいと思うな
https://twitter.com/cpp_akira/status/306631305326632962
https://twitter.com/cpp_akira/status/306632471955509249

393 :デフォルトの名無しさん:2013/03/10(日) 02:33:37.41
>>339
そうとも限らないよ
aがbool型でも未初期化ならfalse/trueでもない値になっている可能性がある

394 :デフォルトの名無しさん:2013/03/10(日) 02:41:30.57
>>391
じゃあ裁判のときに提出するからいいよ
ここだと片山一味が炎上学習法とやらで煽って回答得ようとするからな

395 :デフォルトの名無しさん:2013/03/10(日) 02:42:24.38
>>393
g++で試した所、== true は最適化されて消されるようだ

396 :デフォルトの名無しさん:2013/03/10(日) 02:45:18.46
嘘回答とか言うからだろ。

バグ仕込ませる回答、が正解。

397 :デフォルトの名無しさん:2013/03/10(日) 02:51:32.03
最初実行結果見た時、何が起こったのかしばらく分からなかったわ
http://ideone.com/219P1o

でも流石にbool変数同士を比較する場合にはダメみたいだな
http://ideone.com/MKqFze

まあ未初期化な状態で使った時点で鼻から悪魔なんだが

398 :デフォルトの名無しさん:2013/03/10(日) 02:53:26.69
訴えてもらったほうがいいんじゃね?w
そうすれば片山がどれだけいい加減な知識で
適当なことを言ってるかを公にできるし、
2chで質問したらどれほどの糞情報をつかまされるかを
世の中に知らしめることができるw

399 :デフォルトの名無しさん:2013/03/10(日) 03:00:49.18
証拠ってこの部分の証拠じゃないの?

>喜んでる精神異常

回答の内容が虚偽であることを証明しろってことじゃなくて、
意図的にそういった書き込みをしていることを証明し、さらに、精神異常と認められるもの(障害者手帳など)をもって証明しろってことじゃないの?
知識が足りないだけで本人は正しいことを書いてると思い込んでるだけならこれは証明できないだろ、ってことじゃないの?

400 :デフォルトの名無しさん:2013/03/10(日) 03:03:05.86
そろそろ別のところでやってくれない?

401 :デフォルトの名無しさん:2013/03/10(日) 03:07:41.38
片山の余罪は他にもあるぞ。
質問スレッドの私的利用とかな。
(具体的にはスレッドの趣旨に関係ないブログ的利用など)

402 :デフォルトの名無しさん:2013/03/10(日) 03:09:59.70
話の流れから雑談に流れたならまだしも何の脈絡もなくこの書き込み↓

http://toro.2ch.net/test/read.cgi/tech/1353308523/961

961:片山博文MZパンク◆0lBZNi.Q7evd :2013/03/10(日) 02:55:15.03 [sage]
あの程度のフリーソフト公開しただけで同業者に恨まれるんだよな。フリーソフト作者は匿名がいいぞまじで。

403 :デフォルトの名無しさん:2013/03/10(日) 03:32:12.17
実名さらすって脅迫めいたこともしてなかった?
確か片山がそういう投稿してたよ

404 :デフォルトの名無しさん:2013/03/10(日) 05:27:56.64
ここもapiスレぽくなってきて良い事だな

405 :デフォルトの名無しさん:2013/03/10(日) 05:34:18.35
>>392
あなた、あきら君ですよね

406 :デフォルトの名無しさん:2013/03/10(日) 07:07:06.56
urlにも含まれるアカウント名を指摘して何か意味あんの

407 :デフォルトの名無しさん:2013/03/10(日) 07:36:37.87
本人乙
他でやれ スレ荒らしどもめ

408 :デフォルトの名無しさん:2013/03/10(日) 08:44:49.54
荒らしているんじゃなく、キチなりに精一杯スレを盛り上げているんだよ
まー所詮キチ連中だからね

409 :デフォルトの名無しさん:2013/03/10(日) 08:46:36.63
このキチ成分はC++によるものとして一件落着としよう
さすがC++

410 :デフォルトの名無しさん:2013/03/10(日) 09:23:52.09
どんだけコンプレックス持ってるんだ

411 :デフォルトの名無しさん:2013/03/10(日) 09:59:03.57
まじでうざい
片山入室禁止って書いとけ

412 :デフォルトの名無しさん:2013/03/10(日) 11:37:20.99
0〜100の整数を不公平さ無くランダムに並び替えるにはどうするのが効率的ですか?

413 :デフォルトの名無しさん:2013/03/10(日) 11:39:12.91
std::shafulu

414 :デフォルトの名無しさん:2013/03/10(日) 11:47:21.15
「不公平さ無く」ってのを明確にしたほうがいい
「ランダムに並び替える」のとはどう違うんだ

415 :デフォルトの名無しさん:2013/03/10(日) 11:51:40.23
>>414
対象としてる全ての数字が全ての順番に同じ確率で現れうることを不公平さが無いと考えてます

416 :デフォルトの名無しさん:2013/03/10(日) 12:13:38.13
unsigned a[101]={0,1,2・・・};
unsigned tmp[101];
memcpy(tmp,a,sizeof(unsigned)*101);
for (i = 0; i <101; ++1) a[i+X%100]=tmp[i];

417 :デフォルトの名無しさん:2013/03/10(日) 12:19:11.23
あ。しっぱい
X=rand();
a[(i+X)%100]=tmp[i];

418 :デフォルトの名無しさん:2013/03/10(日) 12:51:09.55
>>417
それだと重複しませんか?
並び替えなので当然重複はしてはいけません

419 :デフォルトの名無しさん:2013/03/10(日) 13:02:49.29
>>416,417みたいな何もわかっていない人のためにstd::shuffleがあるんだけどな

420 :デフォルトの名無しさん:2013/03/10(日) 13:18:01.44
こうしてカルドセプトはバグったわけか

421 :デフォルトの名無しさん:2013/03/10(日) 13:33:29.12
ループの外でX取得すれば重複はしないねぇ

422 :デフォルトの名無しさん:2013/03/10(日) 13:42:42.12
>>421
rotateを実装したいんですね。分かります。

423 :デフォルトの名無しさん:2013/03/10(日) 14:48:55.05
rand()の分布しだいで415の条件を満たしてしまう不思議

424 :デフォルトの名無しさん:2013/03/10(日) 14:51:56.14
 int N = 101;
 for (int i = N - 1; i > 0; --i) {
  int j = rand() % (i + 1);
  swap(a[i], a[j]);
 }

425 :デフォルトの名無しさん:2013/03/10(日) 15:22:56.53
http://d.hatena.ne.jp/cubicdaiya/20070831/1188574485

426 :デフォルトの名無しさん:2013/03/10(日) 15:26:49.85
>>419
一見正しそうだが実は嘘やよくないやり方を教えるのがC/C++使いの美しい伝統

427 :デフォルトの名無しさん:2013/03/10(日) 15:32:24.45
そりゃ残念だったな

428 :デフォルトの名無しさん:2013/03/14(木) 00:17:50.13
リアチョン!

429 :デフォルトの名無しさん:2013/03/16(土) 10:01:37.85
conio.hでキー入力があったら次のフレームへというようなメインループを作りたいのだけれどどうかくといいかな?
windows.hのSleep()とか使うの?

430 :デフォルトの名無しさん:2013/03/16(土) 11:32:11.67
>>429
conio.hでキー入力っつーのが分からん

431 :デフォルトの名無しさん:2013/03/16(土) 11:35:55.18
kbhitとかだろ。
あとはgetcharとか。
それでSleepとか言ってるようじゃまるっきりわかってねーなw

432 :デフォルトの名無しさん:2013/03/16(土) 11:40:29.91
C++と関係なさそうな話だな

433 :デフォルトの名無しさん:2013/03/16(土) 11:42:52.70
在日半島人だからな

434 :デフォルトの名無しさん:2013/03/16(土) 11:55:52.29
conio.hとかMS-DOS時代を思い出すじゃないか懐かしい

435 :デフォルトの名無しさん:2013/03/16(土) 14:11:46.80
そうですkbhitです
イメージとしては、

//メインループ
while() {

//単位フレームあたりの処理
.....

//もしキー入力があれば次のフレームへ
....

}

のようなことをしたいのでwindows.hのSleepでキー入力があるまでSleepさせておくのかなと思ったので質問しました

436 :デフォルトの名無しさん:2013/03/16(土) 14:26:56.90
conio.h を使ったゲームとか
今の環境で作る人いないから
何とも言えないと思われ

昔はsleepしなくても動作がもっさりだったので
誰も気にしなかった

437 :デフォルトの名無しさん:2013/03/16(土) 15:02:46.73
もうすぐ似非UNIXターミナル用意するよりDOS環境用意する方が手間になる時代になあ

438 :デフォルトの名無しさん:2013/03/16(土) 15:21:35.88
kbhitでやるなら while(!kbhit());
とかで適当に待機しとけばいいだろ
Sleep入れたきゃいれろ

439 :デフォルトの名無しさん:2013/03/16(土) 15:28:20.78
MS-DOS環境互換のプログラミングなんて
そんなつまらないことしてるなら
Linux環境の方がましじゃねえか

440 :デフォルトの名無しさん:2013/03/16(土) 15:37:16.67
>>438
すげー懐かしいわwhile(!kbhit());
涙が出そう

441 :デフォルトの名無しさん:2013/03/16(土) 17:35:16.34
era...

442 :デフォルトの名無しさん:2013/03/17(日) 10:04:01.04
if( 0&&
  f_in_check == 0 && fmovecheck == 0 && i > 0 && newdepth < 3 * INC_PLY)
{
  処理
}

といった感じの記述があったんですが、これだと
・0
・f_in_check == 0
・i > 0
・newdepth < 3 * INC_PLY

がすべて真のときでないとIF文の中に入らなくて
でも0があったら絶対に中に入らない気がするんですけど違うんでしょうか?

0&&っていうのが、判定のためのなんかのテクニック、ということなんでしょうか……?

443 :デフォルトの名無しさん:2013/03/17(日) 10:10:19.34
コメントアウトのかわりに0&&でとりあえずその個所を無効にしただけだろ

444 :デフォルトの名無しさん:2013/03/17(日) 10:27:39.86
#if 0
#endif
は二箇所書く必要があるからそれを嫌ったのかもしれない

445 :デフォルトの名無しさん:2013/03/17(日) 14:47:39.56
推理ごっこはそれまでにしとけよ白痴

446 :442:2013/03/17(日) 15:22:42.17
>>443-444
「絶対ここに来ない」というのを逆に利用したんですねきっと
ありがとうございました

447 :デフォルトの名無しさん:2013/03/17(日) 15:30:59.18
|| が入ってると使えないけどな

448 :デフォルトの名無しさん:2013/03/17(日) 17:06:02.96
>>456
それ結構やる人いるよバッドマナーだと思うけど
俺なら#if 0使うな

449 :デフォルトの名無しさん:2013/03/17(日) 17:09:12.26
456が一体何をしたってんだ

450 :デフォルトの名無しさん:2013/03/17(日) 17:10:53.37
ふっ
これからするのさ

451 :デフォルトの名無しさん:2013/03/17(日) 17:34:54.09
ごめん。>>448>>442>>446向けだよ
酔っぱらってる

452 :デフォルトの名無しさん:2013/03/17(日) 19:59:12.40
template< typename T, typename M = Data > struct AAA
{
  struct Data
  {
    int a;
  };
};
クラス内の構造体をテンプレートのデフォルト引数にする方法ないですか?

453 :デフォルトの名無しさん:2013/03/17(日) 20:04:36.46
無理
素直に外に出しなさい

454 :デフォルトの名無しさん:2013/03/17(日) 20:08:47.02
はい

455 :デフォルトの名無しさん:2013/03/17(日) 20:38:24.46
_if < is_void<M> , Data , M >::type
みたいな感じでおk

456 :デフォルトの名無しさん:2013/03/18(月) 21:04:14.23
make_heapって何に使うんですか

457 :デフォルトの名無しさん:2013/03/19(火) 01:19:12.98
>>456 ヒープ(データ構造)を作るのに使います。

458 :デフォルトの名無しさん:2013/03/19(火) 01:46:19.58
>>456
ヒープとしてだけ使うのにmulti_setやmulti_mapではオーバースペックで重いから
vectorとかでヒープを表現するのに使う

459 :デフォルトの名無しさん:2013/03/20(水) 10:14:37.39
再帰関数(多分木の巡回)で条件をみたしたらthrowで帰る(ルートのラッパーでcatch)みたいなコードを書く同僚を説得してやめさせたいんだけどなんて言えばいいかな?

460 :デフォルトの名無しさん:2013/03/20(水) 10:18:47.76
>>459
C++例外はもともとエラー通知目的で作られてそう使われてるから、意図が伝わりづらいし
たぶん遅いよ。

461 :デフォルトの名無しさん:2013/03/20(水) 12:23:43.07
実測だよ実測

462 :デフォルトの名無しさん:2013/03/20(水) 12:42:30.52
正常系でthrowとかやめて!

463 :デフォルトの名無しさん:2013/03/20(水) 12:53:24.46
>>459
お前が throw を使わずに高パフォーマンスと高可読性を備えたシンプルなコードを示せば、
そいつは何も言えなくなるだろう。

464 :デフォルトの名無しさん:2013/03/20(水) 13:05:16.12
発想は面白いとは思うが、効率は・・・

デストラクタがないなら
longjmpしてもいいのだろうか

465 :デフォルトの名無しさん:2013/03/20(水) 13:12:45.06
正常系でthrowはしないとかいうルールすら時には投げ捨てるべきだ

466 :デフォルトの名無しさん:2013/03/20(水) 14:07:55.08
やめさせたい理由は?
その手の人は、常識だとか、宗教論争的な理由では動かないんだよね。
理由とその根拠を明示しないと。

467 :デフォルトの名無しさん:2013/03/20(水) 14:13:24.75
速度要件を満たせば別にイインジャネーノ

468 :デフォルトの名無しさん:2013/03/20(水) 14:41:52.74
throwで帰るのか
普通returnで返さないの?

469 :デフォルトの名無しさん:2013/03/20(水) 14:59:11.75
普通はreturnだよ。
でも、「普通」ってのが難しい人って、結構いるんだよね。
個人的には、そういう人も嫌いなはないんだが、会社で出くわすとめんどい。

470 :デフォルトの名無しさん:2013/03/20(水) 15:01:05.77
returnを繰り返すのは遅いとでも思ってるんじゃないだろうか

471 :デフォルトの名無しさん:2013/03/20(水) 15:54:16.64
再帰だと一気に全部 return とかできないから、関係箇所全部に終了判定書かなきゃいけない。
throw 一発で書くほうがずっと楽だから、実行効率と開発効率のトレードオフだね。

472 :デフォルトの名無しさん:2013/03/20(水) 15:55:47.89
>>471
それは再帰を勘違いしてないか?

473 :デフォルトの名無しさん:2013/03/20(水) 17:00:21.22
俺は再帰関数でthrowを使うという発想はなかったが、エラーでどうしてもやめたいときはいいんじゃない?

474 :デフォルトの名無しさん:2013/03/20(水) 17:32:17.83
例外とエラーは全然違う概念だから

475 :デフォルトの名無しさん:2013/03/20(水) 17:34:48.65
どう違っててどう使い分ければいいんすか先輩

476 :デフォルトの名無しさん:2013/03/20(水) 17:40:49.20
例外のが最適化しやすいね

477 :デフォルトの名無しさん:2013/03/20(水) 17:52:26.06
>>475
例外は、一般的には通常の処理の流れを変えて別の処理に移る仕組みを指す。
C++含む多くの言語ではエラーの通知を主な目的として言語機能に反映されており、
当然エラー通知に使うと便利。

基本的にエラー通知にだけ使っておけばいいけど、自己責任で妙な使い方もできるだろうし、
その中にはもしかすると有用だったり面白い使い方もあったりしないとも言い切れない。

そんなわけで、簡単な答えとしては「エラー通知以外に使うな」となる。

478 :デフォルトの名無しさん:2013/03/20(水) 17:59:09.95
例外を使わない方法だと「再帰の下の階層で答えが見つかったか」を階層分確かめないといけない
また、答えを下層からルートまで運ぶのに返り値でリレーしなければならないから無駄が多い

479 :デフォルトの名無しさん:2013/03/20(水) 18:06:52.15
どっちでもいいけど実例としてコード書いてくれ

480 :デフォルトの名無しさん:2013/03/20(水) 18:08:34.55
その無駄は本当に無駄になっているのかよ
大抵無駄な最適化だよ

481 :デフォルトの名無しさん:2013/03/20(水) 18:20:12.61
例外はエラーのためだけなんて変な固定概念に束縛されんなよ

482 :デフォルトの名無しさん:2013/03/20(水) 18:23:38.44
このシステムはメモリーを出来る限り多く確保する方針であるという作り方なら、
メモリー確保を試みた結果「確保できませんでした」となる頻度が高く
そのようなシステムではbad_allocの例外は必要ない。
エラーだからといって例外とは限らない。

483 :デフォルトの名無しさん:2013/03/20(水) 18:25:10.20
「例外」は「通知手段」じゃない
これわからない奴がエラー通知に使うんだな

484 :デフォルトの名無しさん:2013/03/20(水) 18:33:49.31
例外とエラー処理は違うという話もわからんではないが
例外はエラー処理でいいだろ。

485 :デフォルトの名無しさん:2013/03/20(水) 18:39:34.14
>>478
その認識は再帰を理解していないと思われる

486 :デフォルトの名無しさん:2013/03/20(水) 18:56:39.24
っていうか、例外って積極的に使うようなものじゃないよね?
ときどき、catch使えばifによるエラー分岐が不要になってその分効率よくなるとか書いてあるけど、
throw()とかが役に立たない今はthrowなんてプログラムを不安定にするだけだから、使わないし使わせない。

487 :デフォルトの名無しさん:2013/03/20(水) 19:10:54.28
よほど特殊な実装出もない限り、throw と catch より if の方が効率良いけどな。
ま、結局の所、実測してみないと何とも言えないけど。

488 :デフォルトの名無しさん:2013/03/20(水) 19:11:17.54
>>486
逆だろ
例外はいつでも飛んでくるということを前提にしないとダメ

489 :デフォルトの名無しさん:2013/03/20(水) 19:28:47.43
>>486
どういう理屈でthrowがプログラムを不安定にするなんてことになるの?

490 :デフォルトの名無しさん:2013/03/20(水) 19:32:48.96
深い再帰で
各レイヤーにifを入れて分岐させるよりは
throwのlongjumpに任せて例外時のみ判断が入るようにした方が高速

491 :デフォルトの名無しさん:2013/03/20(水) 19:38:04.66
>>490
どれくらい速いの?

492 :デフォルトの名無しさん:2013/03/20(水) 19:38:14.55
throwするかどうかをif使わずに分岐させるってことか?

493 :デフォルトの名無しさん:2013/03/20(水) 19:40:14.84
signalを使え…やっぱりいい

494 :デフォルトの名無しさん:2013/03/20(水) 20:20:09.87
>>490 測定コードと環境は?

495 :デフォルトの名無しさん:2013/03/20(水) 21:01:22.17
別に例外使ってシンプルになるならどんな使い方だってやればいい
自分の足も他人の足も撃たないように理解して説明も出来るならだが

496 :デフォルトの名無しさん:2013/03/20(水) 21:18:15.23
あれ
exception速いな

497 :デフォルトの名無しさん:2013/03/20(水) 21:25:08.24
気になったのでコード書いてみました
ttp://codepad.org/RwcflKZ9
環境はWindows7 64bt、 CPU はAthlon64x2 3800+
コンパイラはVisualStudio2012、最適化はO2、バイナリは64bit版を生成
結果はこうでした
Normal版 : 326 ミリ秒
Exception版 : 1346 ミリ秒

498 :デフォルトの名無しさん:2013/03/20(水) 21:31:01.14
>>487
最近は例外のが早い

499 :デフォルトの名無しさん:2013/03/20(水) 21:33:46.25
>>490
そろそろコードを見せてくれませんか?

500 :デフォルトの名無しさん:2013/03/20(水) 21:35:25.54
>>498
冗談やめてくれ

501 :デフォルトの名無しさん:2013/03/20(水) 21:40:59.02
>>500
いやまじな話な
例外を使わないとifを繰り返すコストがあるが
例外はもう最近は正常系ではゼロコストだか、

502 :デフォルトの名無しさん:2013/03/20(水) 21:41:35.17
例外が速いって言ってる人は大抵数行のコードだけで比較して言ってるのばっかり

503 :デフォルトの名無しさん:2013/03/20(水) 21:42:46.31
例外なんて積極的に使うもんじゃない

504 :デフォルトの名無しさん:2013/03/20(水) 21:43:41.18
gccもいつのバージョンからか、例外使うコードの正常系はオーバーヘッドがゼロになったんだよな

505 :デフォルトの名無しさん:2013/03/20(水) 21:44:25.42
正常系にthrowを使う話をしてたんじゃなかったのか

506 :デフォルトの名無しさん:2013/03/20(水) 21:45:06.30
C/C++プログラマに例外は理解できない
Javaをやれ

507 :デフォルトの名無しさん:2013/03/20(水) 21:45:15.26
ま、例外の方が速いなら、自己責任の最適化として使えばいいんじゃね?
例外やエラー時に、exception を使う事自体には何の問題もないと思うが、そこに速度の話を持ち込むのはいかがなものかと思うぞ。
正常系の終了処理とかでexception を使うとか言うのは、会社ではやめた方がいいと思う。

508 :デフォルトの名無しさん:2013/03/20(水) 21:46:22.82
>>501
実際に throw されるパスの話をしているわけだが。

509 :デフォルトの名無しさん:2013/03/20(水) 21:46:28.24
例外を制御に使うとただのgotoでしかないんですがそれは

510 :デフォルトの名無しさん:2013/03/20(水) 21:47:10.69
Pythonとかに喧嘩売ってんの?
もう固定観念で例外を活用しないてのは素人のやることだよ

511 :デフォルトの名無しさん:2013/03/20(水) 21:47:42.33
>>501
throw するときに必ず if を使うと思うが?

512 :デフォルトの名無しさん:2013/03/20(水) 21:48:28.56
異常時に例外を使う話だと思ってるアホは>>459から読み直せよ

513 :デフォルトの名無しさん:2013/03/20(水) 21:49:05.43
>>489
catch漏れによる異常終了とか、逆に全部補足によるエラーの握りつぶし
前者は例外を追加したときに起こりやすいけど、そうでなくても標準以外の例外まで把握しないとならないとか仕事じゃ使い物にならないし、後者は障害発生の兆しを見逃すことになるから問題外。

標準で発生する例外を捕捉するのは当たり前なのだけどthrowで標準以外の例外まで投げられたらたまらないだろう。常にそれを全部把握していないといないんだよ?
だから使わせない。

javaのせいで同一視されがちだけど例外とエラーの違いはOS関係のエラーとアプリケーションによるエラーという認識なんだ。

514 :デフォルトの名無しさん:2013/03/20(水) 21:50:43.71
>>512
もちつけ
誰と戦ってるんだ?

515 :デフォルトの名無しさん:2013/03/20(水) 21:50:46.48
>>477
申し訳ないが、実装が使用法を規定する、とはどうしても考えにくいのだが。

516 :デフォルトの名無しさん:2013/03/20(水) 21:51:52.88
>>511
重要なポイントは伝播に有る
例外の伝播はなんの苦労もないが
エラーコードチェックは何層にも渡りイフを繰り返さなければならない
これは無論正常系でも同じことでこのオーバヘッドがプログラム全域で積み上がるとバカに出来ない無駄となるわけだ

517 : ◆QZaw55cn4c :2013/03/20(水) 21:52:32.30
>>491
例外の実装が SjLj ならレジスタを総入れ替えするだけだからきわめて高速。
実装が使用法を規定するなんて考えられない。

518 :デフォルトの名無しさん:2013/03/20(水) 21:54:09.94
>>513
素人かよ
標準例外だけなんてバカなこと言ってるから例外を使いこなせない

519 :デフォルトの名無しさん:2013/03/20(水) 21:59:31.78
>>516
で、throw を使えば、ifはいらないの?

520 :デフォルトの名無しさん:2013/03/20(水) 22:00:50.28
>>516
なんでお前catchするときの話してんの?

521 :デフォルトの名無しさん:2013/03/20(水) 22:06:46.24
>>513
対処漏れの可能性については、エラーが無視されるほかの通知方法よりちゃんと異常終了する例外のがマシだろ。
エラーの握りつぶしの可能性だって、例外なら明示的にやることになるから起こりづらいし見つけやすい。

例外を全部把握していないといけない、などということもない。興味の無い例外は上部のハンドラに引っかかれば
十分なことがほとんど。

例外とエラーの違いについてのその認識も、何の役に立つのかわからない。

522 :デフォルトの名無しさん:2013/03/20(水) 22:07:51.22
>>519
いらないよ

523 :デフォルトの名無しさん:2013/03/20(水) 22:08:30.98
>>520
しない時の話なんだが?

524 :デフォルトの名無しさん:2013/03/20(水) 22:10:09.94
>>515
そんな話はしてないから安心していいよ。

525 :デフォルトの名無しさん:2013/03/20(水) 22:12:33.84
安心できないねえ

526 :デフォルトの名無しさん:2013/03/20(水) 22:13:00.16
>>522
なんで?
throw する条件を満たしているかどうかのチェックはどうするの?

527 :デフォルトの名無しさん:2013/03/20(水) 22:14:03.03
>>477 のどこをどう読んだら「実装が使用法を規定する」なんて話だと思うのかな。

528 :デフォルトの名無しさん:2013/03/20(水) 22:14:36.41
エラーは例外の一種に過ぎないのに
エラー以外は例外にしてはいけないと凝り固まっている奴がいるんだな

529 :デフォルトの名無しさん:2013/03/20(水) 22:15:29.44
>>526
バカやなー
流れ追いきれてないよ

530 :デフォルトの名無しさん:2013/03/20(水) 22:22:02.69
そのifなしでthrowする具体的なコードを見たいんだけど

531 :デフォルトの名無しさん:2013/03/20(水) 22:23:27.02
それがエラーなのかという問題と
それは例外的状況かという問題と
それに例外機構を使うかという問題は
それぞれ独立していて、都度都度判断すべきだろ

532 :デフォルトの名無しさん:2013/03/20(水) 22:24:29.42
>>530
アホ
そんな話してない

533 :デフォルトの名無しさん:2013/03/20(水) 22:27:42.77
お前らの書いたソースコードって可読性低そうだよね

534 :デフォルトの名無しさん:2013/03/20(水) 22:31:16.01
何か、間違った再帰の使い方をしている人が、持論を展開してないか?
そもそも、エラーや例外の入るような処理に再帰は適さないと思うのだが。
通常の再帰は戻り値のチェックは行わないで、return で繋いで行くものなので、再帰末尾にreturn を使おうが throw を使おうが余り関係ない。
ほんのちょびっとthrow の方が遅いくらい。

535 :デフォルトの名無しさん:2013/03/20(水) 22:31:40.81
>>507
> 例外やエラー時に、exception を使う事自体には何の問題もないと思うが、そこに速度の話を持ち込むのはいかがなものかと思うぞ。

エラー時や例外時にexception使うのは問題ないのは間違いない。
ここでの話題はエラー時ではない方の例外時に当てはまるかをどう判断するかだろう。

> 正常系の終了処理とかでexception を使うとか言うのは、会社ではやめた方がいいと思う。

正常系の中のエラー以外の例外時にexception使うのは何の問題もないと思ってるんじゃないのか?

536 :デフォルトの名無しさん:2013/03/20(水) 22:41:41.12
>>517
速いのはDW2じゃなかった?

537 :デフォルトの名無しさん:2013/03/20(水) 22:43:28.57
>>536 それはたぶん throw しないときのオーバーヘッドの話。

538 :デフォルトの名無しさん:2013/03/22(金) 06:19:18.86
ついにC++がゲーム開発にも使われなくなりそうだけど気分はいかが?

539 :デフォルトの名無しさん:2013/03/22(金) 06:27:45.34
>>538
どこの会社で?

540 :デフォルトの名無しさん:2013/03/22(金) 07:16:09.02
ゲームほどパフォを追及する分野でC++を使わないとか考えられないのだが‥‥
いったいかわりにどんな言語を使うのか?

541 :デフォルトの名無しさん:2013/03/22(金) 07:19:14.79
jsとか言い出すに500円

542 :デフォルトの名無しさん:2013/03/22(金) 07:20:36.28
時代は変わったってこった。

>いったいかわりにどんな言語を使うのか?
そういうのもういいから。何の言語があがろうが打ち負かしたくなるのが君のような人でここの住人だろ。そういう流れにするな

543 :デフォルトの名無しさん:2013/03/22(金) 07:57:15.11
今やゲームはミドルウェアで開発するのが主流だからな
そこではC++ではなく、より素早く開発できる言語が用いられる
我々はもうOSを開発するしかないんだ

544 :デフォルトの名無しさん:2013/03/22(金) 07:59:48.65
>(俺の知ってる範囲では)ついにC++がゲーム開発にも使われなくなりそうだ(と耳にした)

545 :デフォルトの名無しさん:2013/03/22(金) 08:24:46.26
>(俺の知ってる範囲では)ついにC++がゲーム開発にも使われなくなりそうだ(という事にしないと俺の気が済まない)

546 :デフォルトの名無しさん:2013/03/22(金) 08:45:15.12
マジでハイスペな超美麗ゲームでもなきゃ今時のマシンでCPPはオーバーすぎるよ

547 :デフォルトの名無しさん:2013/03/22(金) 09:01:51.20
>超美麗ゲーム
あぁ昨今の画だけの内容無いゲームのアレね。

548 :デフォルトの名無しさん:2013/03/22(金) 09:11:02.48
c++だと中身のこと考えてる余裕ないからな

549 :デフォルトの名無しさん:2013/03/22(金) 09:32:58.68
画面叩くだけでカードをゲットするようなゲームならC++は要らないな
まあ、ミドル以下は必須だろうけど

550 :デフォルトの名無しさん:2013/03/22(金) 10:17:12.10
だけど市場はそれを必要としていないというか、
>画面叩くだけでカードをゲットするようなゲーム
を大手は本腰入れてやってるんだよね

551 :デフォルトの名無しさん:2013/03/22(金) 10:41:43.73
まだC++にスクリプトを組み合わせるのが主流だよ
スマホ向けとか一部unityを使った開発とかはC++使わないけどまだ少数派だね
大手も力入れてるけど、開発じゃなくて広告の方に金を投入してるだろ

552 :デフォルトの名無しさん:2013/03/22(金) 10:57:55.60
なんでスクリプトなんかつかうんだろ

553 :デフォルトの名無しさん:2013/03/22(金) 10:59:45.93
プログラマがイベント直打ちしてたら高くつくから

554 :デフォルトの名無しさん:2013/03/22(金) 11:04:49.71
なんか組み込みスクリプトで開発効率あげたぜぇ〜っていうとかっこいいじゃろ

555 :デフォルトの名無しさん:2013/03/22(金) 11:10:22.44
技術的にはスクリプトもC++もそんなに変わらんと思うが。

556 :デフォルトの名無しさん:2013/03/22(金) 11:12:45.52
テストが楽だからな
無駄なコンパイルは馬鹿のすること

557 :デフォルトの名無しさん:2013/03/22(金) 11:14:58.62
スクリプトってjavascriptとか?
それとも独自スクリプトを作って
ゲームプログラム本体がゲーム機のCPU使って実行するの?
そんな仕組みにしてまでスクリプト使うんだね。

558 :デフォルトの名無しさん:2013/03/22(金) 11:17:46.88
スクリプトで世界が周りだしてるのに何をいってるんだ

559 :デフォルトの名無しさん:2013/03/22(金) 11:18:14.71
今だにスクリプト否定派居るんだな
逆に実行速度が足りてる部分にC++使う理由がないんだが?

560 :デフォルトの名無しさん:2013/03/22(金) 12:23:16.59
老害ここに極まれりだな
スクリプトと聞いてjavascriptとか

561 :デフォルトの名無しさん:2013/03/22(金) 13:06:39.97
こんな実のない議論して。みんな暇なんだな。

562 :デフォルトの名無しさん:2013/03/22(金) 15:02:09.87
2ch書き込んでる奴で暇じゃない奴なんていねーよ

563 :デフォルトの名無しさん:2013/03/22(金) 17:20:38.47
JISC のサイトで見れる C++ の規格って索引が無いっぽいんだけど、みんなどうしてんの

564 :デフォルトの名無しさん:2013/03/22(金) 17:38:56.94
>>563
買えって事だよ
あれはスキャン、しかもわざと荒くスキャンしただけ

565 :デフォルトの名無しさん:2013/03/22(金) 17:45:51.46
自分で作ってますよ
自動で

566 :デフォルトの名無しさん:2013/03/22(金) 18:01:45.92
ISOの方しか読んでない

567 :デフォルトの名無しさん:2013/03/22(金) 20:07:50.12
で、何スクリプトを使うんだ?

568 :デフォルトの名無しさん:2013/03/22(金) 20:16:29.86
IT業界はちゃんとしたプログラマーに金を出さないから
世の中糞みたいなソフトだらけになるんだよな。
まずC++もできないような頭の奴に仕事を出すのが間違いなのでは?

569 :デフォルトの名無しさん:2013/03/22(金) 20:53:06.81
LuaとかC++に組み込んで使ってる

570 :デフォルトの名無しさん:2013/03/22(金) 21:01:34.95
>>568
今だにC++に幻想抱いてるコンクリート脳に仕事出す方が危険だよ

571 :デフォルトの名無しさん:2013/03/22(金) 21:30:27.80
C++まともに使える奴探すと人が集まらないんだよ

572 :デフォルトの名無しさん:2013/03/22(金) 23:47:11.58
ガベコレのある言語って、ゲームにどこまで使えるの

573 :デフォルトの名無しさん:2013/03/22(金) 23:51:34.64
>>571
金のなる木である大規模プロジェクトに使えないようじゃだめだからな

574 :デフォルトの名無しさん:2013/03/22(金) 23:52:23.78
馬鹿

575 :デフォルトの名無しさん:2013/03/23(土) 02:11:37.85
>>573
さすがに、そんな事は無いだろ。gnue compilerもたしかC++に移行だし、
他にも、近頃はC++派が多い。特にgoogle周りには。

単純に日本だとC++が出来ても評価できる上が居ないから、
人材が流出しやすいだけだと思うよ。
まぁ、なんというか日本の環境が〜とか言う気は無いけど、
勉強しつづけられる人じゃないとC++はね・・・

576 :デフォルトの名無しさん:2013/03/23(土) 02:15:20.86
C++98 C++03 C++11 C++14 C++17 ...

577 :デフォルトの名無しさん:2013/03/23(土) 03:23:12.01
最強は
CC++999

578 :デフォルトの名無しさん:2013/03/23(土) 07:00:19.62
>>576
そんな高レベルな話じゃないっしょ
日本でC++プログラマ集めるとメモリリークとかアクセスバイオレーションとか
起こしてそれで何日もはまるようなPGばっかで・・とかそのレベルっしょ。

579 :デフォルトの名無しさん:2013/03/23(土) 09:27:51.29
素人の俺でもアプリ作るのにメモリリークなんか一度もした事無いのにメモリリークさせる職業プログラマなんて本当に実在するのか?架空の人物像で騙そうとしてないか?

580 :デフォルトの名無しさん:2013/03/23(土) 09:35:20.47
関係ないけど想像力が足りない人って怖いよね。関係ないけど

581 :デフォルトの名無しさん:2013/03/23(土) 09:47:25.09
>>579
世の中にはアプリと呼べるような規模や複雑度では解決できない問題が山積してるのぢゃ

582 :デフォルトの名無しさん:2013/03/23(土) 09:48:31.08
むしろ一人の方がメモリリーク発生しにくいんじゃないの

583 :デフォルトの名無しさん:2013/03/23(土) 10:05:29.62
まぁ今は広く普及したスマポがあるしな
スタックぶっ壊す奴はいまだにいるけど

584 :デフォルトの名無しさん:2013/03/23(土) 10:18:25.13
広く…

585 :デフォルトの名無しさん:2013/03/23(土) 10:20:00.64
スタンダードやん

586 :デフォルトの名無しさん:2013/03/23(土) 11:11:13.95
>>579
居るからJavaやVBが選択されたんだろ。

587 :デフォルトの名無しさん:2013/03/23(土) 11:13:40.48
でもそれって正規のプログラマじゃなくて派遣奴隷とか野良PGでしょ?
それならプログラマって呼ばないでほしい

588 :デフォルトの名無しさん:2013/03/23(土) 11:22:22.34
儲からなきゃ何をほえても無駄。君が言うプログラマと呼べないやつでも商いを成功させていたら評価できるんだよ。
君より知識のない若手でもその辺しっかりしてるヤツは多い。

589 :デフォルトの名無しさん:2013/03/23(土) 11:28:01.87
マ板でやれ

590 :デフォルトの名無しさん:2013/03/23(土) 11:29:10.31
誰も金の話なんてしてないのに詭弁のテンプレですな

591 :デフォルトの名無しさん:2013/03/23(土) 11:30:54.74
あほやなぁ
儲けたいならPGになんかならねぇよ
その時点で負けなんだからあとはカスどうしで腕のよしあし競うしかないだろ

592 :デフォルトの名無しさん:2013/03/23(土) 11:31:17.32
社会の話してるだろ
それとも日本社会は金でまわっていないと妄信してる学生か?

593 :デフォルトの名無しさん:2013/03/23(土) 11:32:47.03
>>592
今度は拡大解釈ですかw

594 :デフォルトの名無しさん:2013/03/23(土) 11:36:00.74
哀れな奴隷たちが必死に自分たちは金を社会を動かしてるんだとわめいている
金や社会を動かしてるのは別のやつでお前らは機械的に与えられた処理をしてるだけなんだよ
電気を与えられたコンピューターのように、はした金をエネルギーに変えて計算する機械
それがPGだ。一著前になにかを成し遂げたような気になっているんじゃあないぞッ!!

595 :デフォルトの名無しさん:2013/03/23(土) 11:43:04.46
暇人品評会会場

596 :デフォルトの名無しさん:2013/03/23(土) 12:46:56.81
>>588
そいつらは別に商いを成功させてるんじゃなくて
そいつらをこき使って商いしてるやつが成功してるだけで
本人たちは糞みたいな時給です。
つまりちゃんとした技術者がちゃんとした給料を受け取れないのは
業界の違法なサービス残業や偽装請負などで薄利多売で無茶するから。
そしてそれはソフトウエアの品質も下げている。
客は金を払っているが天下りSIerやピンハネ人繰り屋それを盗んでいるので
PGの地位も賃金もソフトの品質も低く、客は高い金を払わざるを得ない。

597 :デフォルトの名無しさん:2013/03/23(土) 13:01:37.74
で、言語仕様と何か関係でも?

598 :デフォルトの名無しさん:2013/03/23(土) 13:08:43.57
ぐうの音も出ないようです

599 :デフォルトの名無しさん:2013/03/23(土) 13:41:58.01
C++のpathの変数値を間違えて消してしまったんですが、どこで変数値は分かりますか?

600 :デフォルトの名無しさん:2013/03/23(土) 14:11:55.42
諦めて再インストールしろ

601 :デフォルトの名無しさん:2013/03/23(土) 14:57:23.10
Javaや.NET CLRでもリークさせることは可能。
リストに際限なく要素を突っ込んでいけばいずれ限界がくる。
リークのしやすさに違いはあるが、最終的には設計のわかりやすさと
担当レベルの技術力しかない。

602 :デフォルトの名無しさん:2013/03/23(土) 15:13:08.59
>>601
それリークじゃないじゃん
単にメモリを使い果たしただけ

603 :デフォルトの名無しさん:2013/03/23(土) 15:37:43.49
そもそも「メモリリーク」ってどんな現象なんだ?

使い終わったメモリ領域を再利用しないでいるのがメモリリークとちゃうの?

604 :デフォルトの名無しさん:2013/03/23(土) 15:49:16.00
リソースを制御する情報が失われ
リソースを解放できない状態

605 :デフォルトの名無しさん:2013/03/23(土) 15:53:05.22
ということは、解放し忘れとリークは全くの別物か

解放し忘れ : 解放しようと思えばいつでも解放できる
リーク : 解放不可能

606 :デフォルトの名無しさん:2013/03/23(土) 15:57:33.75
ん? じゃあ、厳密にはメモリリークは検出できない?

607 :デフォルトの名無しさん:2013/03/23(土) 16:03:42.76
使用メモリが増えてけば
たいていはメモリリーク。
確保と解放の時にアドレスをログに
出しておけば
漏れたかどうかはわかる。

608 :デフォルトの名無しさん:2013/03/23(土) 16:03:56.48
>>603
C/C++でダングリングポインタと呼ばれる現象がそれ

つまりmalloc/newで確保した領域を解放する手段がなくなる

GCを備えている言語では原理的にメモリリークは発生しない
単なる怠慢

609 :デフォルトの名無しさん:2013/03/23(土) 16:06:43.91
>>607
それは、リークなのか解放し忘れなのか検出できんことない?

610 :デフォルトの名無しさん:2013/03/23(土) 16:06:52.89
>単なる怠慢
主語は何かな?

611 :デフォルトの名無しさん:2013/03/23(土) 16:07:11.57
メモリリークについて正しい意味を知りたかったらExceptional C++の第2章を熟読しろ

ただしGC言語でもリソースリークはあり得る

例外が発生したらリソースを解放するパスが二度と実行されない可能性はある

612 :デフォルトの名無しさん:2013/03/23(土) 16:12:35.43
>>610
お前難癖付けて理解したくないだけだろうがカス
重箱の隅をつつくようなマネをする前に意味が分かるだろうが

613 :デフォルトの名無しさん:2013/03/23(土) 16:13:19.88
答えたくないなら答えなくてもいいですよ、もちろん。

614 :デフォルトの名無しさん:2013/03/23(土) 16:49:37.90
>>606
エレクトリックフェンスとか使えばできんじゃね? 使ったことないけど

615 :デフォルトの名無しさん:2013/03/23(土) 20:32:01.91
>>608
>>603
>C/C++でダングリングポインタと呼ばれる現象がそれ
ちげーよ。10年ROMってろ、ヘボ

616 :デフォルトの名無しさん:2013/03/23(土) 20:33:55.80
なんでリーク起こるの?スマートポインタ使ってもダメなの?

617 :デフォルトの名無しさん:2013/03/23(土) 20:37:02.33
意外ッ!!それは循環参照ッ!!!

618 :デフォルトの名無しさん:2013/03/23(土) 20:48:48.85
ダングリングポインタっつうのはダングリング状態のポインタのことだよ

619 :デフォルトの名無しさん:2013/03/23(土) 20:49:49.88
例外安全という概念があってのう

620 :デフォルトの名無しさん:2013/03/23(土) 20:55:09.65
>>615
メモリの枯渇とメモリリークをごちゃ混ぜにすんな

621 :デフォルトの名無しさん:2013/03/23(土) 20:55:58.77
例外処理中の例外て考慮しますか?

622 :デフォルトの名無しさん:2013/03/23(土) 21:00:27.35
>>620
寝ぼけたふりしてとぼけてんじゃねーぞ
ダングリングポインタを説明してみろ

623 :デフォルトの名無しさん:2013/03/23(土) 21:00:35.72
例外処理中の例外は即terminate()される

624 :デフォルトの名無しさん:2013/03/23(土) 21:06:47.38
連レス失礼
terminateはデストラクタでの例外だった、catch節中の例外はより外側のtry-catch節で捕捉されるはず

625 :デフォルトの名無しさん:2013/03/23(土) 21:15:04.69
メモリーリークというのはアプリケーションの処理のサイクルのなかで
本来解放すべきメモリーを開放せず、サイクルが進むにしたがってメモリが無駄に枯渇する現象で設計ミスです。
C#などでは参照を管理しているので、参照がなくなれば消してもらえるが
参照しっぱなしなら結局リークしていることになる。
ただしC#では参照しっぱなしという状態は作りにくい。
リストにガンガン突っ込み続けるとかそういう本当にアホな事をしないと起きない。

626 :デフォルトの名無しさん:2013/03/23(土) 21:17:02.14
GCってVRAM回りにも効くの?

627 :デフォルトの名無しさん:2013/03/23(土) 21:37:14.05
void X::Func() {
try {
// DoSomething
} catch(exception const & e) {
string s("ERR in X::Func(void);");
s += e.what();
throw X::Exception(s);
}
こんな感じで例外にデバッグ情報を追加していってるんだけどstringでbad_allocしたらどうするべきなんだろう

628 :デフォルトの名無しさん:2013/03/23(土) 21:46:08.03
bad_allocしないallocator

629 :デフォルトの名無しさん:2013/03/23(土) 21:48:38.91
素直に終わっといたほうがよくね

630 :デフォルトの名無しさん:2013/03/23(土) 22:04:29.45
>>627
再throwで型を変えてしまったら「デバッグ情報を追加していってる」にはならないよな?

631 :デフォルトの名無しさん:2013/03/23(土) 22:06:15.33
try {
func();
catch(MyException&e) {
e.add_debug_info(foo);
throw;
}

632 :デフォルトの名無しさん:2013/03/23(土) 22:07:20.45
うーんならどうするのがいいのだろう
深いところで例外を投げられてそれが伝播してくともうどこで起こったかぜんぜんわからないんですよね

633 :デフォルトの名無しさん:2013/03/23(土) 22:13:27.42
>>632 Boost.Exception を使え。

634 :デフォルトの名無しさん:2013/03/23(土) 22:29:19.99
>>625
だからその参照を管理しているのを消せば勝手にGCが走った時に解放されるでしょ?
ダングリングポインタというのは例えば

int* a = new int; // (1)
a = new int; // (2)

とやった時に(1)でnewした部分を解放する手段がなくなる事を言う
こういうのが本当のメモリリーク

GCを備えている言語ではメモリの枯渇は起きてもメモリリークはおきない
ちゃんと自分で参照を消せばそれでいい話

635 :デフォルトの名無しさん:2013/03/23(土) 22:33:22.05
だから

じゃねえんだよ
そんなもんわかってんだよ
広義では参照解放しないのもメモリーリークだっつってんだろ
市ね

636 :デフォルトの名無しさん:2013/03/23(土) 22:34:54.11
ダングリングポインタでググろう!な!

637 :デフォルトの名無しさん:2013/03/23(土) 22:35:36.59
>>635
参照を解放しないのは単なる手落ちだろ
相変わらず参照を解放する手段は残ったままだ
それはメモリリークではない
故意であろうとバグであろうと解放する手段が残っているうちはメモリリークではない

解放する手段がなくなった時がメモリリーク

638 :デフォルトの名無しさん:2013/03/23(土) 22:36:41.73
>>636
ダングリングポインタについては俺が誤解していた
しかし>>637で言った事は変わらないぞ

639 :デフォルトの名無しさん:2013/03/23(土) 22:37:10.88
>>634
このバカ、本当にダングリングポインタしらねーでやんの。
晒し上げ

640 :デフォルトの名無しさん:2013/03/23(土) 22:38:48.19
無理やりダングリングポインタでメモリリークを説明するならば、

int* p = new int; // (1)
p = 0; // (2)

(2)の時点でpはダングリングポインタになる
そして(1)で確保した部分を解放する手段がなくなるので
この時点でメモリリークを起こしたと言える

641 :デフォルトの名無しさん:2013/03/23(土) 22:38:56.85
>>635
「広義」なんて言葉、このスレで初めてだ

642 :デフォルトの名無しさん:2013/03/23(土) 22:42:19.34
>>641
ほっときゃいいよ

643 :デフォルトの名無しさん:2013/03/23(土) 22:42:40.10
>>637
参照を解放する手段がなくなってる時の話をしてるんだが。
たとえば参照を握ってるコンテナからの削除に至るUIが無い場合とかね。

644 :デフォルトの名無しさん:2013/03/23(土) 22:43:48.11
>>640
このバカ、まだダングリングポインタを理解して無い。

645 :デフォルトの名無しさん:2013/03/23(土) 22:44:15.13
>>643
具体的なコードで頼む

646 :デフォルトの名無しさん:2013/03/23(土) 22:48:06.94
>>643
参照を握ってるコンテナがスコープを外れたらGCでコンテナごと削除されるんだけど

647 :デフォルトの名無しさん:2013/03/23(土) 22:52:39.52
>>645-646
↓これで伝わるかな?
class UI {
private static Container<Object> objects;
public void add(Object x) { objects.add(x); }
public void remove(Object x) { /* コンテナからの削除を書き忘れた */ }
// ...
}

アホなコードだと思うだろうが、こういうアホなことをすればGCのある言語でも
メモリリークという現象は生じることになる。

648 :デフォルトの名無しさん:2013/03/23(土) 22:52:54.79
もしかしてDとかJavaとかC#を一度も触った事がない奴がファビョってるだけか

649 :デフォルトの名無しさん:2013/03/23(土) 22:53:38.69
>>647
それ単なるバグ
メモリリークではない

650 :デフォルトの名無しさん:2013/03/23(土) 22:57:05.67
最近C++
使えてもC#は使えないって話がでてますけど
本当でしょうか?
C++使えれば多言語でもできそうな気がするけど

651 :デフォルトの名無しさん:2013/03/23(土) 22:57:33.33
>>647
なんか他の部分の実装次第で起こりそうな起こらなさそうな・・・

652 :デフォルトの名無しさん:2013/03/23(土) 23:00:01.26
>>649
単なるバグだったらメモリリークじゃないって言うの?
単なるバグじゃないメモリリークのほうが少ないと思うんだけど・・・。

お前の中の「メモリリーク」の定義を整理して書き出してくれ。わけがわからない。

653 :デフォルトの名無しさん:2013/03/23(土) 23:00:08.33
>>647
あーいや、objectの追加削除に関しては他の実装部分がないのか・・・
すると手段がなくなった時点で、という定義に照らし合わせるとメモリリーク?

654 :デフォルトの名無しさん:2013/03/23(土) 23:00:36.58
メモリリークって Wikipedia で見ると、日本語版と英語版で説明が違くね?

日本語版 :
 プログラムが確保したメモリの一部、または全部を解放するのを忘れ、
確保したままになってしまうことを言う。

英語版 :
In object-oriented programming, a memory leak may happen
when an object is stored in memory but cannot be accessed
by the running code.

日本語版は「解放忘れ」、英語版は「アクセスできない」

まぁ、チラッと読んだだけだから、
結局同じ事を違う言葉で言ってるだけなのか知らんが。

655 :デフォルトの名無しさん:2013/03/23(土) 23:03:36.70
>>653
解放する手段はあるだろ
Containerに直接触ればよい

クラスで包んで「あー解放できないやー」とか言って誤魔化してんじゃねーよ

656 :デフォルトの名無しさん:2013/03/23(土) 23:04:36.16
>>654
英語版はmay happenなので定義ですらない気がする

>>653
自己レスだが訂正すると、UIにaddされたオブジェクトが他で開放されてれば別にメモリリークじゃなくなるな

657 :デフォルトの名無しさん:2013/03/23(土) 23:05:43.71
>>655
インスタンスのobjectsにはアクセスできなくね?

658 :デフォルトの名無しさん:2013/03/23(土) 23:06:40.15
>>655
んなこと言い出したらCのfree()忘れだって「ヒープに直接触ればよい」わけで、メモリリークにならんぞ。

659 :デフォルトの名無しさん:2013/03/23(土) 23:07:27.28
どうでもいい
けれどきになるお年頃

660 :デフォルトの名無しさん:2013/03/23(土) 23:07:46.35
>>657
だからインターフェースのバグだっつーの
オブジェクト指向によるprivateと解放する手段がなくなる事を同じ意味で捉えるな

661 :デフォルトの名無しさん:2013/03/23(土) 23:08:26.09
>>658
話が飛躍しすぎ
外行って頭冷やしてこい

662 :デフォルトの名無しさん:2013/03/23(土) 23:10:19.25
お前の中の「メモリリーク」の定義を整理して書き出してくれ。わけがわからない。

663 :デフォルトの名無しさん:2013/03/23(土) 23:10:20.41
>>660
メモリリークの定義が、アクセスする手段がなくなった時点で、ということなんだよね?
privateはその一種なのでは?

664 :デフォルトの名無しさん:2013/03/23(土) 23:12:06.78
>>663
>>654の英文が果たしてオブジェクト指向を考慮した物かどうか分からなければ
これ以上議論しようがない

665 :デフォルトの名無しさん:2013/03/23(土) 23:13:56.13
というか>>654

In object-oriented programming,

で始まってるんだからprivateも含むような気がする

666 :デフォルトの名無しさん:2013/03/23(土) 23:15:24.33
プロセスを開放すればメモリも開放されるんだから
メモリ解放の手段がないのがメモリリークというならWindows95まで立ち返らないとダメだな。

667 :デフォルトの名無しさん:2013/03/23(土) 23:16:56.58
>>666
by the running code

668 :デフォルトの名無しさん:2013/03/23(土) 23:16:59.41
例えばprivateなコンテナをメンバに持つclassをnewして、それをプログラム終了時まで
使うとすれば、もしこのclassにコンテナから削除するコードがなければメモリリークだな

669 :デフォルトの名無しさん:2013/03/23(土) 23:17:54.05
>>667
俺はWikiの話なんかしてない

670 :デフォルトの名無しさん:2013/03/23(土) 23:20:52.30
typedef std::shared_ptr<foo> Object;
class UI{
static std::vector<Object> objects;
public:
void add(Object x) { objects.push_back(x); }
void remove(Object x) { /* コンテナからの削除を書き忘れた */ }
};

うーん・・・

671 :デフォルトの名無しさん:2013/03/23(土) 23:22:41.15
>>670
だからさ、保護レベルもメモリリークの一因だと決着が付いたんだからそれでいいんじゃね

672 :デフォルトの名無しさん:2013/03/23(土) 23:28:21.61
GCあればメモリリークはおきないとか言ってたバカは居なくなったか。よかったよかった。

673 :デフォルトの名無しさん:2013/03/23(土) 23:31:52.52
>>672
かんぱーーーーい

674 :デフォルトの名無しさん:2013/03/23(土) 23:34:05.85
このスレに居なくなったからといって存在しなくなったわけではない
その考えこそメモリーリークみたいなものでは

675 :デフォルトの名無しさん:2013/03/23(土) 23:35:00.91
shutdown

676 :デフォルトの名無しさん:2013/03/23(土) 23:35:22.36
うまいこといってしめるな

677 :デフォルトの名無しさん:2013/03/24(日) 00:35:48.88
「解放し忘れてますがアクセス手段は残ってます。だからメモリリークじゃありません!」
このボケ死ね。
もういいから己を生から解放しろ。

678 :デフォルトの名無しさん:2013/03/24(日) 00:41:00.12
delete [] me;

679 :デフォルトの名無しさん:2013/03/24(日) 00:43:54.25
多重人格か

680 :デフォルトの名無しさん:2013/03/24(日) 02:03:57.27
いいこと思いついた。
1日1回サーバー再起動すれば
メモリリークなんて無くなるんじゃね?

681 :デフォルトの名無しさん:2013/03/24(日) 02:27:22.43
1日20Mづつリークするけど月1でリブートするから
対応しなくておkってシステムあったわ。ちなみに官公庁

682 :デフォルトの名無しさん:2013/03/24(日) 02:47:09.30
合理的じゃないか
逆になぜ金をかけて治したがるのか?

683 :デフォルトの名無しさん:2013/03/24(日) 02:49:56.87
>>681
そりゃ発注側はプログラマーのオナニーの為
じゃなくて、サービスを提供するために
金払ってるからな。
「プログラマーはバグだらけのシステムしか作れないクズ」
と割り切るのには慣れているだろう。

684 :デフォルトの名無しさん:2013/03/24(日) 02:53:55.60
リブートって了解取るのが結構面倒なんだよ
相手が行政だとなおさら

685 :デフォルトの名無しさん:2013/03/24(日) 03:11:41.75
1.参照されず(未定義でない環境非依存のコードでは)解放できない状態派
2.参照されてないけど標準ライブラリの内部データをいじって解放できたらリークじゃない派
3.参照されていても解放が実行されないバグ派
4.再起動最強。リークなんて幻想派

昔は1をメモリリークということが多かったけど
3もまあいいんじゃないかと思う。
2と4はこのスレで初めて見た。

686 :デフォルトの名無しさん:2013/03/24(日) 04:58:31.36
>>685
それだけ自分の意見を通すだけのためにデタラメを言う奴が多いって事だ

687 :デフォルトの名無しさん:2013/03/24(日) 07:16:09.33
例外処理中の例外について上でちょっと出てたけど、C/C++って上の階層に例外投げられないの?

688 :デフォルトの名無しさん:2013/03/24(日) 09:09:59.91
できるよ

689 :デフォルトの名無しさん:2013/03/24(日) 09:30:49.10
↓例外の情報追加はこれがお勧め

template<typename InnerException> class MyException: std::exception {
std::string msg_;
InnerException inner_;
public:
MyException(std::string && s, InnerException && e): msg_(std::move(s)), inner_(std::move(e)) {}
// ry
};


try { do_something(); } catch(std::out_of_range & e) {
throw MyException<std::out_of_range>("error: do something", std::move(e));
} catch(std::bad_alloc & e) {
throw // ry

690 :デフォルトの名無しさん:2013/03/24(日) 11:44:17.86
>>689
スライスされてんじゃねーか。型も変わってるし、多段にできそうにもないし。

Boost.Exception でいいよ。

691 :デフォルトの名無しさん:2013/03/24(日) 11:48:59.55
C++の例外むずかしすぎーJavaみたいにして

692 :デフォルトの名無しさん:2013/03/24(日) 11:49:03.69
どこスラ?

693 :デフォルトの名無しさん:2013/03/24(日) 11:50:46.43
inner_(std::move(e)) だな

694 :デフォルトの名無しさん:2013/03/24(日) 11:53:58.01
ちゃんとキャッチすればスライスなんか起こらないだろアホか

695 :デフォルトの名無しさん:2013/03/24(日) 11:55:54.79
C+11限定じゃねーかという突っ込みはないのか

696 :デフォルトの名無しさん:2013/03/24(日) 12:07:34.61
というかお前ら例外処理中のメモリ確保はご法度って知らないのか
当たり前のようにstringとかつかってて笑えるんだが?bad_allocで死ぬぞ

697 :デフォルトの名無しさん:2013/03/24(日) 12:10:20.87
>>696
オリジナルの例外のかわりに bad_alloc が飛ぶだけで、別に死ぬわけではない。

698 :デフォルトの名無しさん:2013/03/24(日) 12:10:51.45
例外の再スローはメモリ使ってないの?

699 :デフォルトの名無しさん:2013/03/24(日) 12:20:58.45
>>698
newしてないからつかってないよ

700 :デフォルトの名無しさん:2013/03/24(日) 12:24:17.69
newしてないから使ってないとは言えない気がするけど(スタックとか
予め確保されてる中でやりくりしてるのかな?

701 :デフォルトの名無しさん:2013/03/24(日) 12:25:07.20
例外中にログを吐くのもダメですか

702 :デフォルトの名無しさん:2013/03/24(日) 12:32:15.06
bad_alloc の時は正直余計な処理したら変になりそうで怖いので
死んでくれた方がいい気もする

703 :デフォルトの名無しさん:2013/03/24(日) 12:37:49.41
>>696
お前は例外ハンドラの中で何をしてるの?

704 :デフォルトの名無しさん:2013/03/24(日) 12:58:13.42
>>700
スタックが足りなくなったらbad_allocとは違う理由でプロセスが死ぬだろう

705 :デフォルトの名無しさん:2013/03/24(日) 12:59:09.33
>>701
エラーが出ると危険だ
エラー情報を静的領域に保存してプログラムを安定させてから吐き出そう

706 :デフォルトの名無しさん:2013/03/24(日) 13:55:23.15
>>705
エラー情報はそれでよくてもI/O処理が内部でメモリ動的に使ってたら意味なくね?

707 :デフォルトの名無しさん:2013/03/24(日) 14:07:11.60
別プロセスでロガーを立ち上げておいて、
初めからそいつとのパイプを開いておけば良い。

708 :デフォルトの名無しさん:2013/03/24(日) 14:18:06.71
プロセス間通信エラーったらどうすんの?

709 :デフォルトの名無しさん:2013/03/24(日) 14:23:27.47
予備のプロセスをあらかじめ立ち上げておいてだな・・・

710 :デフォルトの名無しさん:2013/03/24(日) 14:30:37.47
予備のプロセスがエラーしたら

711 :デフォルトの名無しさん:2013/03/24(日) 14:31:32.27
>>705 の言うように予め確保しておいた静的メモリ利領域にログ情報を書き込んで、
最後プロセスが死ぬ時にメモリダンプすればいいじゃん

712 :デフォルトの名無しさん:2013/03/24(日) 14:31:43.27
例外捕まえてなにするの?

713 :デフォルトの名無しさん:2013/03/24(日) 14:32:29.25
逮捕しちゃうぞ!

714 :デフォルトの名無しさん:2013/03/24(日) 14:52:57.58
>>711
ログ書き込む前に死ぬかもしれない
死ぬ前にログを書いた方がマシ

715 :デフォルトの名無しさん:2013/03/24(日) 15:36:55.43
僕は耳と目を閉じ口をつぐんだ人間になろうと考えた

716 :デフォルトの名無しさん:2013/03/24(日) 17:37:55.26
友達のあんどろは結構再起動必要みたいだけど
あいほんはOSアップデートの時以外再起動したことないなー
アプリ作ってるときはXCodeで警告だしてくれるけど優秀なのかな

717 :デフォルトの名無しさん:2013/03/24(日) 23:53:39.43
>>616
いろいろな言い方がされているけれどアプリケーションの実行中にリソースが枯渇する現象を「メモリリークしていた」と説明することもある。

まあ、確保と解放を同じスコープ内で行えるようにしていけば、基本は平気なのだけどね。

でもgcあっても参照されていないことにならなければ解放されないから、gcあるから大丈夫なんてのは都市伝説だと思った方がいい。
メモリリテンションいうのだったかな?
ごめ、用語はわすれた。

718 :デフォルトの名無しさん:2013/03/24(日) 23:55:43.64
用語もうろ覚えで具体例もなくまさにFUD

719 :デフォルトの名無しさん:2013/03/25(月) 00:25:38.27
コンサバGCなら解放されない可能性もあるわけだが、これもリークかね?

720 :デフォルトの名無しさん:2013/03/25(月) 04:34:38.88
>>717
>確保と解放を同じスコープ内で
なにかの×ゲームですか?

721 :デフォルトの名無しさん:2013/03/25(月) 05:02:20.10
×ゲームかどうか知りたいならググれ
何でも質問するんじゃない

722 :デフォルトの名無しさん:2013/03/25(月) 07:23:18.34
スコープを越えて寿命を維持したいからnewをする場面が多かろうに

723 :デフォルトの名無しさん:2013/03/25(月) 07:24:01.87
まじでC++使われなくなっててワロタ・・・

724 :デフォルトの名無しさん:2013/03/25(月) 07:34:07.77
普通に仕事で使ってるけど

725 :デフォルトの名無しさん:2013/03/25(月) 07:35:48.38
C++しかできない俺オワタ

726 :デフォルトの名無しさん:2013/03/25(月) 08:00:54.99
スコープ超えたいだけならstatic変数でええやん

727 :デフォルトの名無しさん:2013/03/25(月) 10:21:24.85
std::list::sort以外で
std::listの中身をソートするSTLのアルゴリズムを教えて下さい

728 :デフォルトの名無しさん:2013/03/25(月) 10:27:21.93
>>727 std::sort

729 :デフォルトの名無しさん:2013/03/25(月) 13:28:42.99
>>723
C++は少なくともJavaよりは長生きするから心配しなくていいよ

730 :デフォルトの名無しさん:2013/03/25(月) 13:30:11.81
>>728
できないっす。operator-がどうたら言われます

731 :デフォルトの名無しさん:2013/03/25(月) 14:21:04.08
>>727
listをソートするにはSTLではlist::sortしかないはずだが。

732 :デフォルトの名無しさん:2013/03/25(月) 14:34:41.24
>>728>>730
std::sortのイテレータのtraits要件はRandom Access Iterator
std::listのイテレータのtraitsはBidirectional Iteratorだからstd::sortは使えない

733 :デフォルトの名無しさん:2013/03/25(月) 19:58:01.19
コンテナにalgorithmと同じメンバ関数がある場合は、メンバ関数を使うのが基本ね。

734 :デフォルトの名無しさん:2013/03/25(月) 19:58:07.02
>>729
そのこころは?

735 :デフォルトの名無しさん:2013/03/25(月) 20:11:55.58
>>733
std::begin/endみたく勝手にやってくれないだろうか

736 :デフォルトの名無しさん:2013/03/25(月) 20:17:50.53
>>722
可能な限り生成と同じ場所で?破棄するのがいいよねという話です。
そうすれば、確保と解放が一緒に確認できるので解放が漏れることはなくなるから。

リソース確保した結果が、有効なうちに破棄していることが確認できれば問題はないという目的でスコープ内と表現したので、単純にnewしたもどりがスコープ越えちゃっただけなら同じ話だと思う。
でも、可能なら管理した方がいいような気もする

まぁc++の場合、スタックサイズに制限のある環境でなければ、newが必要になる場面なんてほとんどないから普段はあまり意識しませんけどねー

737 :デフォルトの名無しさん:2013/03/25(月) 20:49:39.26
スマポ使えでFA

738 :デフォルトの名無しさん:2013/03/25(月) 21:38:08.68
>>727
std::stable_sort

739 :デフォルトの名無しさん:2013/03/25(月) 21:41:54.02
>>726
1個しかないやん

740 :デフォルトの名無しさん:2013/03/25(月) 22:08:21.63
なんでc++11でC#のプロパティやらなんやらパクらなかったんだろう
意地張ってないでいいところは素直に取り入れればいいのにね

741 :デフォルトの名無しさん:2013/03/25(月) 22:10:38.81
そういう化石みたいなお荷物を囲い込みたいんじゃねーの
今度からアンモナイトC++と呼ぼう

742 :デフォルトの名無しさん:2013/03/25(月) 22:17:09.38
プロパティは文法が決まらなかったんじゃないのかなあ
わからないが

743 :デフォルトの名無しさん:2013/03/25(月) 22:17:41.48
暗黙のコード仕様の追加はよくよく考えないと
暗黙なのに使用には熟考が必要なコピーコンストラクタみたいな事に成るからね

744 :デフォルトの名無しさん:2013/03/25(月) 22:34:02.76
C++は今や周回遅れの言語だからな
積極的に便利にしていかないと使用者がどんどん減るな

745 :デフォルトの名無しさん:2013/03/25(月) 22:46:05.43
PCアプリはともかく組み込みはやっとC++に移行してきたところ

746 :デフォルトの名無しさん:2013/03/25(月) 22:47:27.16
組み込みぐらいだと逆にCのがやりやすいだろ

747 :デフォルトの名無しさん:2013/03/25(月) 22:52:33.52
組み込みつーのは、家庭用ゲーム機やゲーセンなんかのゲームも含まれる?

748 :デフォルトの名無しさん:2013/03/25(月) 22:53:37.99
組み込みだってRAMもROMも、使えるリソース増加中なので、
でかくなってくりゃCよりC++が楽になることもあるわな

749 :デフォルトの名無しさん:2013/03/25(月) 23:15:55.04
>>740
perlみたいに名前付けたブロック系をbreakとかできるようにはしてほしかった。
いや、マジであればすごい便利だと思うんだ。

750 :デフォルトの名無しさん:2013/03/25(月) 23:21:14.75
Javaにもあるね

751 :デフォルトの名無しさん:2013/03/25(月) 23:40:47.10
組み込みLinuxじゃQt使う事すらある

752 :デフォルトの名無しさん:2013/03/26(火) 00:13:46.59
C++は標準ライブラリが糞だからな。
ガベージがないからコレクション系がおのずと使いにくいアルゴリズムなことになってしまうんだが
それにしても糞。
C++の黎明期に標準ライブらつくったやつらのオナニーのせいで伸び悩んでるんだよ。

753 :デフォルトの名無しさん:2013/03/26(火) 00:31:49.10
一部は機能のデモンストレーションになっちゃってるからね・・・
そのせいでvector<bool>とかcoutとか邪悪な代物があるけど
それほど悲観するほどでもない

754 :デフォルトの名無しさん:2013/03/26(火) 00:52:37.39
せめてライブラリ追加が楽なら救われたのにそれも面倒なのがww

755 :デフォルトの名無しさん:2013/03/26(火) 00:56:11.18
ライブラリ追加どうこうは言語というより環境の問題じゃね

756 :デフォルトの名無しさん:2013/03/26(火) 01:02:37.85
C#もライブラリの追加面倒だったぞ

757 :デフォルトの名無しさん:2013/03/26(火) 01:26:27.96
>>746 どこが?まるで考えられない。

758 :デフォルトの名無しさん:2013/03/26(火) 07:13:01.69
ライブラリ追加って何?

何に追加するの?

759 :デフォルトの名無しさん:2013/03/26(火) 07:22:56.90
std名前空間

760 :デフォルトの名無しさん:2013/03/26(火) 09:45:40.47
C++プログラマはこのオープンソースの時代にライブラリ追加もしらないのな

761 :デフォルトの名無しさん:2013/03/26(火) 10:43:09.29
C++プログラマは必要なライブラリ取ってきて利用するだけで、
わざわざ追加なんて言葉を使わないからな。

762 :デフォルトの名無しさん:2013/03/26(火) 10:50:57.52
ライブラリ追加って具体的にはどういう作業?

763 :デフォルトの名無しさん:2013/03/26(火) 10:52:50.50
stdの呪縛から逃れた使いやすい代替ライブラリないのかよ

764 :デフォルトの名無しさん:2013/03/26(火) 11:02:37.43
STLコンテナの要件ってどんなのですか?

765 :デフォルトの名無しさん:2013/03/26(火) 11:29:45.76
>>762
ダウンロードしてきて使いたい環境用にコンパイルしてみたいなことじゃないの?

766 :デフォルトの名無しさん:2013/03/26(火) 12:27:28.85
>>764
規格読め
正確に知りたければ結局それが早くて確実

767 :デフォルトの名無しさん:2013/03/26(火) 12:35:32.25
>>759
もともと std 名前空間にない外部のライブラリを
わざわざ std 名前空間に入れるのは何故?

その作業は少なからず苦労すると思うが、
その苦労に見合ったメリットが私には思いつかない。

768 :デフォルトの名無しさん:2013/03/26(火) 13:04:48.13
違うnamespaceを使えばいいだけの話

boostだってboostという名前空間だろ

769 :デフォルトの名無しさん:2013/03/26(火) 13:06:52.18
>>766
正確じゃなくても要約でいいです

770 :デフォルトの名無しさん:2013/03/26(火) 13:09:27.85
>>769
http://www.cplusplus.com/reference/stl/

ここ読め
英語が読めないという方向はなしで
Chrome使ってすぐに翻訳出来るだろ
ブラウザが火狐だから無理?あんたの事情なんか知るかよ

771 :デフォルトの名無しさん:2013/03/26(火) 13:25:07.60
> 正確じゃなくても要約でいいです
いくつかのtypedefされた型と規定された動作をするメンバ関数をメンバに持つこと

772 :デフォルトの名無しさん:2013/03/26(火) 15:22:12.79
英語が読めないなら勉強すべきはプログラム言語ではなく英語だな

773 :デフォルトの名無しさん:2013/03/26(火) 15:40:20.76
日本語でiteratorのtraitsについて説明しているサイトはいくらでもあるだろ

https://sites.google.com/site/stl4jp/reference/iterator

ここでも十分だ

774 :デフォルトの名無しさん:2013/03/26(火) 16:45:48.66
理系で英語読まない奴は何をやってもダメ
害を及ぼすのみ
もうこれは絶対法則

775 :デフォルトの名無しさん:2013/03/26(火) 16:50:30.67
気が大きくなってますね。

776 :デフォルトの名無しさん:2013/03/26(火) 16:52:23.40
>>774
それは言い過ぎ
時間がない時にサラッと読めるのはやはり日本語

>もうこれは絶対法則

いやあんたの価値観が他人に通用するとは限らないからそういう書き方はおかしい

777 :デフォルトの名無しさん:2013/03/26(火) 17:04:02.74
いくら現実逃避したって明らかなものは明らか

778 :デフォルトの名無しさん:2013/03/26(火) 17:18:02.34
自己完結的な世界だなあ。

779 :デフォルトの名無しさん:2013/03/26(火) 17:19:43.32
優秀なら英語サポートのための部下をつけてもらえるさ

780 :デフォルトの名無しさん:2013/03/26(火) 17:35:40.49
>>777
明らかなら証明してみろ
反証可能性って知ってるよな?これがない物は明らかも糞もない

781 :デフォルトの名無しさん:2013/03/26(火) 17:47:21.39
なぁ、それ今ここで議論しなきゃ駄目なのか?
つまんないんだけど。

782 :デフォルトの名無しさん:2013/03/26(火) 17:59:17.25
人的な問題はマ板でやれよ

783 :デフォルトの名無しさん:2013/03/26(火) 18:27:57.41
うるさいゴミ

784 :デフォルトの名無しさん:2013/03/26(火) 18:46:29.15
>>783
お前の部分だけ言っている意味が全く分からない

785 :デフォルトの名無しさん:2013/03/26(火) 20:04:37.30
>>779
英語読めないバカは部下をもてない

786 :デフォルトの名無しさん:2013/03/26(火) 20:18:25.25
板違いは板違い
但し今後このスレで英語すら読めないゴミに気を使って日本語のドキュメントを探してきてやる必要はない

787 :デフォルトの名無しさん:2013/03/26(火) 20:30:17.35
>>786
そんなこと、子どもみたいにわざわざ宣言しなくてもいいと思うよ。

相手に合わせて和洋ドキュメントを選んでくれる人もいれば、
そうじゃない人も当然いるわけで、そんなのは普通のことだから。

788 :デフォルトの名無しさん:2013/03/26(火) 20:39:39.58
>>787
だから>>786は自分を中心に世界が回ってると思い込んでる自己愛性パーソナリティ障害だから
放っとけって

789 :デフォルトの名無しさん:2013/03/26(火) 20:43:29.99
病気のひとを差別する気満々でもない限りはそういう書き方はいけないよ。
あくまでその人の人格的な問題であって、各種疾病のせいなんかじゃないよ。
人格が破綻した駄目な奴なだけだよ。

790 :デフォルトの名無しさん:2013/03/26(火) 20:46:46.51
>>787
そういうバカは身の程をわきまえて、英語メッセージのツールや日本語ドキュメントが整っていないツールには一切近づかない事だ

791 :デフォルトの名無しさん:2013/03/26(火) 20:50:11.89
英語も読めないキチが発狂してワラタw
お前ら生きてる価値ないなw

792 :デフォルトの名無しさん:2013/03/26(火) 20:52:56.36
まぁコンパイルエラーのメッセージさえ読めないというか読もうとしない奴は
死んで欲しいところだけど

793 :デフォルトの名無しさん:2013/03/26(火) 20:53:27.44
>>785
部下を持ってる人は日本中誰であっても英語が読める人だと言いたいのか

794 :デフォルトの名無しさん:2013/03/26(火) 20:53:48.61
>>789
>人格が破綻した駄目な奴なだけだよ。

まあ同じ事だなww

795 :デフォルトの名無しさん:2013/03/26(火) 21:07:41.32
英語厨発狂w

796 :デフォルトの名無しさん:2013/03/26(火) 21:07:41.44
技術文書の英語くらい読めないとどうしようもないよな
それくらい読めたって「英語出来る」なんてとても言えないレベルだぞ

797 :デフォルトの名無しさん:2013/03/26(火) 21:08:55.06
一人だけ発狂してる奴がいるな
英語できないのに英語英語いうやつが

798 :デフォルトの名無しさん:2013/03/26(火) 21:54:17.96
まぁMSDNの日本語ページの詐欺っぷりに騙されたことがあるやつだろう

799 :デフォルトの名無しさん:2013/03/26(火) 22:11:19.47
そもそもC++使ってる時点でこいつ英語できないんだなと思われる社会ですが。

800 :デフォルトの名無しさん:2013/03/26(火) 23:55:30.15
>>793
お前バカだろ。逆は真ならずって知らねーだろ。

801 :デフォルトの名無しさん:2013/03/26(火) 23:58:33.21
Windows8が売れなくて
Windows携帯も売れなくて
Microsoftもオワコンになる?

802 :デフォルトの名無しさん:2013/03/26(火) 23:59:28.70
>>800
わざとらしいのは面白くない

803 :デフォルトの名無しさん:2013/03/27(水) 00:15:56.17
論理積じゃない&&ってどういう意味?

804 :デフォルトの名無しさん:2013/03/27(水) 00:22:30.83
move

805 :デフォルトの名無しさん:2013/03/27(水) 00:23:25.76
vector<string> vs;
を初期化したいんですが、
{"aoieo kakikukeko", "sasisuseso tatituteto", "naninuneno hahihuheho"};
順番にpush_backとかで代入するしかないですか?

806 :デフォルトの名無しさん:2013/03/27(水) 00:23:37.69
右辺値参照でググれ

807 :デフォルトの名無しさん:2013/03/27(水) 00:24:50.35
>>805
最新規格のC++11なら = { ... } で初期化できるが
対応してないならpush_backするか
別に配列を用意してその配列で初期化するかだな

808 :デフォルトの名無しさん:2013/03/27(水) 00:27:05.47
なんで初期化したいのか書いた方がいいんじゃないの

809 :デフォルトの名無しさん:2013/03/27(水) 00:31:12.18
static const char* vs_def[] = {"aoieo kakikukeko", "sasisuseso tatituteto", "naninuneno hahihuheho"};
std::vector<std::string> vs(vs_def, vs_def + _countof(vs_def));

_countofはVC++のマクロなので
ないなら自分で似たようなの作る

810 :デフォルトの名無しさん:2013/03/27(水) 00:34:59.66
やりたい事によっては外部ファイルから読んだ方がいいしな

811 :デフォルトの名無しさん:2013/03/27(水) 02:05:33.68
>>809
std::begin std::endでいいだろ

812 :デフォルトの名無しさん:2013/03/27(水) 08:29:44.29
std::begin, std::endってC++11だろ。だったら{}で初期化できる。

813 :デフォルトの名無しさん:2013/03/27(水) 08:53:20.80
まあ、自作可能だけどな

814 :デフォルトの名無しさん:2013/03/27(水) 19:27:52.85
っていうかさー
&ってなに
なんでアンドってよんだり暗パーサンドって言ったりするの?
っていうかそもそも暗パーサンドってなに?なんで変換できないの?
アンパーサンドってアンドの親戚かなにか?

俺ら&がめちゃ身近になってるけど
実は謎だらけ。

815 :デフォルトの名無しさん:2013/03/27(水) 19:49:32.05
>>814
http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3%83%91%E3%82%B5%E3%83%B3%E3%83%89

あなたのPCで変換できないのは、学習されていないから。
私のPCでは変換できる。

調べればずくに分かるたった4つの質問で謎だらけとよく言えるな。

816 :デフォルトの名無しさん:2013/03/27(水) 19:51:34.83
けっ

つまんね

817 :デフォルトの名無しさん:2013/03/27(水) 21:16:05.95
using namespace std

818 :デフォルトの名無しさん:2013/03/29(金) 23:57:38.41
http://codepad.org/Tgv7qrba
参照ムズカシイネー
上のコードではBのコンストラクタでAのコンストラクタを呼んでるんだけど
const参照で保持しておけばBが死ぬまでAを抑えてくれるかと思ったらそんなことないのね
この場合、constでAを予め生成しておくのか、Bの中にAを実体で持っておくのか
どっちが良いの?

819 :デフォルトの名無しさん:2013/03/30(土) 00:10:30.18
自分が寿命を管理しないリソースをメンバに持つな

820 :デフォルトの名無しさん:2013/03/30(土) 00:14:13.12
>BのコンストラクタでAのコンストラクタを呼んで

ないよね

821 :デフォルトの名無しさん:2013/03/30(土) 00:22:09.99
>>818
constの参照は一時オブジェクトを束縛するってやつだろ?
でもそれをメンバに持ったら、コンストラクタから帰還次第一時オブジェクトは
解体されてしまうんで参照先がなくなる

822 :デフォルトの名無しさん:2013/03/30(土) 00:23:15.28
ま、悪い事言わないんでコンポジション使っとけ

823 :デフォルトの名無しさん:2013/03/30(土) 00:26:03.09
スマートポインツ使えよ

824 :デフォルトの名無しさん:2013/03/30(土) 01:36:00.45
スマートポインタは絶滅しろ

825 :デフォルトの名無しさん:2013/03/30(土) 01:37:32.86
ナマポは絶滅しろだろ

826 :デフォルトの名無しさん:2013/03/30(土) 02:10:34.54
STLについての質問ですが、
std::set<T>での集合演算(共通部分や(集合の)差)のコンパクトで実行効率の良い書き方って、どうなんでしょうか、、、

*(イテレータ)に書き込みを行えるタイプのコンテナ(std::vector<T>とstd::list<T>)であれば
std::set_intersection()とかstd::set_deference()が使えるのですが、
いかんせんstd::set<T>はそうではなく、VC++2010でコンパイルエラーになります、、

827 :デフォルトの名無しさん:2013/03/30(土) 02:37:09.81
>>826 std::inserter() の出番かな。

828 :デフォルトの名無しさん:2013/03/30(土) 02:39:02.31
>>826
演算結果を書き込む時にエラーが出るだけなら、std::vectorにback_inserterなどで
outputしておいてそれをstd::setにinsertすりゃいいじゃん

829 :デフォルトの名無しさん:2013/03/30(土) 02:40:20.57
>>827
ああそうかstd::back_inserterはstd::setに使うと意味が変わるのね
やった事ないから分からなかった

830 :デフォルトの名無しさん:2013/03/30(土) 02:53:22.96
const int N = 100;

int main()
{
std::set<int> si1, si2, si3;

for (int i = 0; i < N; i++) {
si1.insert(std::rand() % N);
si2.insert(std::rand() % N);
}

std::insert_iterator<std::set<int> > ins3(si3, si3.begin());
std::set_intersection(si1.begin(), si1.end(), si2.begin(), si2.end(), ins3);

std::copy(si3.begin(), si3.end(), std::ostream_iterator<int>(std::cout, " "));
}

こんな感じだな
ちなみにstd::back_inserterをstd::setに使おうとするとコンパイルエラー

831 :デフォルトの名無しさん:2013/03/30(土) 03:09:40.79
std::setはstd::back_insert_iteratorを持ってないからな

832 :デフォルトの名無しさん:2013/03/30(土) 03:21:29.44
>>830
> std::insert_iterator<std::set<int> > ins3(si3, si3.begin());
> std::set_intersection(si1.begin(), si1.end(), si2.begin(), si2.end(), ins3);
そこは↓これでいい。
std::set_intersection(si1.begin(), si1.end(), si2.begin(), si2.end(), std::inserter(si3, si3.begin()));

833 :デフォルトの名無しさん:2013/03/30(土) 03:22:00.56
>>831
push_back() を持っていない、の間違いだろ。

834 :826:2013/03/30(土) 11:18:02.86
レスdクス、
>832式に行ってみようかと、

しかし#include <iterator>って何だよなんでiteratorみたいなちょー基本概念に関する手段がなんで別のヘッダファイルに隔離されてるんだよコンテナのヘッダをインクルードしただけで使わせてくれよ、、、

とそこはかとなくオモタ、

835 :デフォルトの名無しさん:2013/03/30(土) 11:21:07.88
コンテナだってアルゴリズムとヘッダ分かれてるだろ
そういうことだ

836 :デフォルトの名無しさん:2013/03/30(土) 11:55:17.27
意味分からん
シンボルが見える(宣言される)ことと、シンボルが指す機能の直交性に何の関係が

837 :デフォルトの名無しさん:2013/03/30(土) 12:25:19.29
オールインワンにしろってことだろうか

838 :デフォルトの名無しさん:2013/03/30(土) 13:00:02.08
>>818
const は寿命を制御するわけではないようだね。
普通に委譲的手法で B::B() で A を new するしか思いつかない。

839 :デフォルトの名無しさん:2013/03/30(土) 16:49:43.27
出たw委譲的手法厨w

840 :デフォルトの名無しさん:2013/03/30(土) 17:05:41.01
そっか C++ は委譲を意識しなくてもいいんだねえ、Java とちがって多重継承ができるからねえ

841 :デフォルトの名無しさん:2013/03/30(土) 17:22:19.38
>>818
>>819の言うとおりだな。
BがAを所有してないからおかしくなる。

BがAの実体を持つようにして、
右辺値参照でもスマポでもいいけど
ムーブする所。

842 :デフォルトの名無しさん:2013/03/30(土) 19:24:48.92
右辺値参照厨は黙ってろって

843 :デフォルトの名無しさん:2013/03/30(土) 23:34:16.23
というか、参照型は実体のある(NULLじゃない)ポインタ変数だろ?
暗黙の型変換でのスコープ範囲はずれればデストラクタ発生するのはあたり前なんじゃないのか?

俺的には
Aは、実体として宣言するか、実体のrefを保持するのが無難だと思う。
使うときめんどくさくなるから、コンストラクタやデストラクタで例外が発生する処理は避けるなあ

844 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/30(土) 23:43:35.11
strlenにはstd::を付けて、wcslenには付けない。なんで?

845 :デフォルトの名無しさん:2013/03/31(日) 00:07:48.14
VisualStudio2010や2012で2005のコンパイラを使えますか?

846 :デフォルトの名無しさん:2013/03/31(日) 02:27:12.65
C++の仕様に関係してるのか、日本語が?

847 :デフォルトの名無しさん:2013/03/31(日) 02:35:22.61
Syntax error
とか
コマンドまたはファイル名が違います

あんまり懐かしいとは思えないな。日本語でまでやる事無い

848 :デフォルトの名無しさん:2013/03/31(日) 03:01:50.30
手元のC言語辞典見たら日本語の項目もあって吹いたwww
ttp://up3.viploader.net/pc/src/vlpc013497.jpg

849 :デフォルトの名無しさん:2013/03/31(日) 06:24:21.84
>>878みたいなのは、緊急時に報道や連絡が違ったっつって一歩も動かず
災害に会ってそのままアボンするんだろうな
まぁ、それはそれで本人がそれで良いっつってんだから誰も止めないけどw

850 :デフォルトの名無しさん:2013/03/31(日) 12:20:47.57
http://toro.2ch.net/test/read.cgi/tech/1363522503/200-203

知識をひけらかして自己顕示欲を満たそうとしたゴミの一部始終w
自己顕示欲を満たしたいだけだから質問者の役に立つ書き込みかどうかは問題じゃないんだよなw

片山博文MZパンク ◆0lBZNi.Q7evd = 本物のクズ

851 :デフォルトの名無しさん:2013/03/31(日) 20:14:38.20
template< typename T > struct Test
{
template< typename U > explicit Test( const Test< U >& other ){}
};

int main()
Test< int > a( Test< int >() );

852 :デフォルトの名無しさん:2013/03/31(日) 20:16:24.93
template< typename T > struct Test
{
  template< typename U > explicit Test( const Test< U >& other ){}
};

int main()
{
  Test< int > a( Test< int >() ); // warning C4930: 'Test<T> a(Test<T> (__cdecl *)(void))': プロトタイプされている関数が呼び出されませんでした (変数の定義が意図されていますか?)
  return 0;
}

という警告が出るのですが何故ですか

853 :デフォルトの名無しさん:2013/03/31(日) 20:42:04.09
>>852
たぶん変数の定義を意図してるんだろうけど実は関数の宣言と解釈されてて、
その関数を呼び出すコードも無いし、ますます変数の定義なんじゃないかとコンパイラが
疑ってるから。

854 :デフォルトの名無しさん:2013/03/31(日) 23:00:11.27
ようわからんし興味本位で言うが、Test<T>にデフォルトコンストラクタでも定義すれば解消するんジャネーノ?

なんか個人的にC++の仕様書を読んだら気が狂って死んでしまいそうな気がする、、、

855 :デフォルトの名無しさん:2013/03/31(日) 23:13:09.61
853の言うとおりでは。
 Test<int>()
が関数宣言だと認識されてるだけ。

856 :デフォルトの名無しさん:2013/03/31(日) 23:22:48.82
>>891
文語(四段活用)と口語(上一段活用)が混ざっている

857 :デフォルトの名無しさん:2013/03/31(日) 23:23:57.46
>>891
文語四段活用と口語上一段活用が混在している

858 :デフォルトの名無しさん:2013/03/31(日) 23:28:35.44
891へのアンカーがあるてことは大量に削除されたってことか?
それとも誤爆?

859 :デフォルトの名無しさん:2013/03/31(日) 23:28:44.41
typename

860 :デフォルトの名無しさん:2013/03/31(日) 23:28:46.91
Test< int > a = Test< int >();
だと警告は出ません。デフォルトコンストラクタ付けてもだめでした。VC2010です。

861 :デフォルトの名無しさん:2013/03/31(日) 23:31:29.03
Test< int > a( Test< int >() );
全体で関数宣言であってTest<int>()は引数の型でしかないんだよ
わかってない奴はだまってろ

862 :デフォルトの名無しさん:2013/03/31(日) 23:33:06.48
だまってましたが、なにか御用でしょうか?

863 :デフォルトの名無しさん:2013/03/31(日) 23:34:21.60
EffectiveC++だかExceptionalC++だかに載ってた例の典型じゃん

864 :デフォルトの名無しさん:2013/03/31(日) 23:45:28.33
most vexing parse

865 :デフォルトの名無しさん:2013/03/31(日) 23:52:29.85
かっこつけろ

866 :デフォルトの名無しさん:2013/04/01(月) 10:38:25.38
FAQだ

867 :デフォルトの名無しさん:2013/04/02(火) 09:56:27.09
ふと思ったんだが__FUNCTION__マクロみたいにコールスタックが呼び出せるマクロがあったら
色々捗りそうな気がしたんだが、ちょっと調べてみたところ見当たらないということは、自作するしかない?

868 :デフォルトの名無しさん:2013/04/02(火) 12:11:26.25
glibcでそういうのなんかあったような気がした

869 :デフォルトの名無しさん:2013/04/02(火) 16:25:15.18
ISO/IEC 14882:2011 20.10.5 Comparison of ratios の段落1 は <ratio> の他のあらゆる規定と矛盾してるよね?
== はオーバーフローしないって、ただそれだけのために、こんなアフォな仕様を誰か強硬に主張したの?

870 :デフォルトの名無しさん:2013/04/02(火) 16:36:25.12
>>867
__builtin_return_address と _ReturnAddress

871 :デフォルトの名無しさん:2013/04/02(火) 22:10:56.44
それに関しては他言語がうらやましい
printStacktrace()一発だもんな

872 :デフォルトの名無しさん:2013/04/02(火) 22:58:40.81
>>871
Java使ったことないからしらなんだが、Javaにはそんな便利なのがあるのか。

873 :デフォルトの名無しさん:2013/04/02(火) 23:07:51.37
>>869
オーバーフローしないんじゃなくて、
オーバーフローしたらコンパイル諦めてね
ってことじゃないの?

874 :デフォルトの名無しさん:2013/04/02(火) 23:08:54.43
age

875 :デフォルトの名無しさん:2013/04/03(水) 01:25:10.73
>>650
「英語が出来れば、近縁であるドイツ語も簡単だ」
という言説に然りという人もあれば無茶言いやがると抗議する人もあろう。

自転車に乗れるかどうかなどという話と同じで頭も、単純な良し悪しとは
違う語学の運動感覚みたいなものがある。そういうのを会得しているひとに
とっては「英語がチャンとできているなら独逸語など数ヶ月でマスターできるだろう」
と言い、実際彼はそのようにできるだろうし、一方ドクトルの学位を持ちながら
数年に及ぶ刻苦の末になおアイサツ程度の独逸語しかものにできないものも
あるだろうし、その一方彼はドクトルの学位を取得していることから簡単に彼を
アンポンタンと呼ぶのもまたアンフェアというものであろう。

876 :デフォルトの名無しさん:2013/04/03(水) 01:58:53.32
>>873
そうじゃなくて、分母、分子、両方一致したときだけ等しいとか有理数としておかしいだろってことかと。
>>869
でも 20.10.3p2 で gcd で割って正規化されるんで正しい規定だと思うよ。

877 :デフォルトの名無しさん:2013/04/03(水) 07:54:33.44
ある名前空間内にあるクラステンプレートを、
別のファイルにおいて前方参照する方法について質問です。

class.h と class.cpp と use.cpp の3つのファイルがあります。

class.h ではクラスを宣言しており、private メンバとして、
std::map <int, const char *> 型の変数を宣言しています。
この変数は、クラス内でデータを管理するためにだけに使います。

class.cpp には class.h で宣言したクラスの定義が書かれています。

use.cpp では class.h ファイルを include し、そのクラスを利用しています。
class.h で宣言した変数の map 型を直接使うことはありません。

class.cpp では std::map <int, const char *> 型のメンバ関数を使うので、
map ファイルを include しています。
一方 use.cpp では直接使うことはないので map ファイルは include しません。

しかし、使わなくても use.cpp で include した class.h では
std::map <int, const char *> の記述があるので未定義エラーを起します。

そこで、class.hpp 内のクラス宣言の前に前方参照をしておきたいのですが、
どのように書けば良いのでしょうか。

普通のクラスを前方参照するなら、単に class ClassName; と書けば良いのですが・・・

878 :デフォルトの名無しさん:2013/04/03(水) 08:15:10.60
>>877
stdな要素を前方宣言するのは難しい。
namespace std {template <class K, class T, class C, class A> class map;}

そもそも、privateなものは宣言もヘッダーに書かずに隠すべき。

879 :デフォルトの名無しさん:2013/04/03(水) 08:16:56.38
おっと、allocatorとかの指定を忘れてた。
追加しておいて。

880 :デフォルトの名無しさん:2013/04/03(水) 08:27:32.92
関数が複数の値を返す場合に
retuen (values 1 "aaa")
みたいな方法ないのでしょうか

881 :デフォルトの名無しさん:2013/04/03(水) 08:30:05.49
>>880
boostのoptionalやtupleを

882 :デフォルトの名無しさん:2013/04/03(水) 09:00:35.44
>>880
pair<Foo, Bar> を返り値にする関数とかにすればよいのでは
make_pair ってのを使うと便利

883 :877:2013/04/03(水) 12:52:21.89
>>878
やってみました。

std::map の他に std::pair や std::less など必要なものを前方参照しましたが、
iterator の前方参照でどうしたら良いのか分からなくなりました。

class.h 内の自作のクラス内では、
typedef std::map<int, const char *> Items;
typedef Items::iterator ItemsItr;
と private に宣言しているのですが、iterator の所でこれは型名ではないという、
コンパイルエラーがてました(gcc 4.7.1 です)。


それはそうと

> そもそも、privateなものは宣言もヘッダーに書かずに隠すべき。

どういう事でしょうか。
宣言をヘッダに書かずに何処に書くのでしょう?

884 :デフォルトの名無しさん:2013/04/03(水) 13:25:51.90
pImplにでもすれば?

885 :デフォルトの名無しさん:2013/04/03(水) 18:38:13.78
>>876
p2って、ratio_less の話ちゃうの?

886 :デフォルトの名無しさん:2013/04/03(水) 18:40:25.59
>>883
mapの実体をメンバで持ってしまっているのなら、そもそも前方参照は不可能だと思うけど。
それは一般的なクラスでも同じだよね?

前方参照可能なのは、サイズ計算の必要がないポインタか参照で宣言した変数のみじゃね?

887 :877:2013/04/03(水) 18:48:52.31
>>886
あぁ、なるほど、そうですね。

use.cpp でそのクラスを使う時に、サイズが分からないといけない。
クラスに別のクラスの実体(と言うのですか)があれば、
その別のクラスの内容が分からなければサイズの計算ができないですね。

納得しました。

ありがとうございます。

888 :デフォルトの名無しさん:2013/04/03(水) 21:08:06.62
>>885
20.10.「3」p2

889 :デフォルトの名無しさん:2013/04/03(水) 22:46:25.97
>>877
class.hがmapをインクルードするに
決まってるだろう。
前方山椒とか何を言ってるんだ?

890 :877:2013/04/03(水) 23:17:29.01
>>889
何を言っていたのか説明します。

その class.h を include している use.cpp が、
class.h 内で宣言された map に直接アクセスすることは無いので、
前方参照により、use.cpp のコンパイル単位に map を含めなくてもよくなる、
と勘違いしていました。

実際は、直接アクセスすることは無くても、コンパイルにはサイズを計算する必要があるため、
use.cpp からも map の宣言が見えていなければならない事が >>886 の指摘でわかりました。

何を言っていたのか理解していただけたでしょうか。

891 :デフォルトの名無しさん:2013/04/03(水) 23:51:22.00
>>888
thx

892 :デフォルトの名無しさん:2013/04/04(木) 01:13:46.62
mapをポインターで持つか、pimplで実装すればいいじゃない

893 :デフォルトの名無しさん:2013/04/04(木) 01:22:54.98
>>891
文語四段活用と口語上一段活用が混在している

894 :デフォルトの名無しさん:2013/04/04(木) 02:59:09.26
smart_ptrを使ったオブジェクトの数珠繋ぎで質問。
 class N {
  shared_ptr<N> p_;
  N(shared_ptr<N> const&amp; p) : p_(p) {}
 };
 shared_ptr<N> v(new N(shared_ptr<N>()); // ルートは親なし
 for (int i=0; i<T; ++i) {
  shared_ptr<Node>(new Node(v)).swap(v); // 前のノードが親
 }
みたいにvを葉とする一本鎖を作った後、v.reset()で全ノードを連鎖的に解放したいのですが、
深さTが大きいと解放の連鎖が途中で止まってしまいます。(Tが小さいとうまくいく)
原因が分かる方いますか?

895 :デフォルトの名無しさん:2013/04/04(木) 08:44:07.68
>>892
解決策を求めているのではなく、理由を知りたかっただけだろ。
原因さえわかれば対応策なんていくらでも練れるし。

896 :デフォルトの名無しさん:2013/04/04(木) 09:13:45.87
>>894
お前がそういうプログラムを書いたから
なんかよくわかってない奴の設計した変なプログラムの感じだし

897 :デフォルトの名無しさん:2013/04/04(木) 10:34:13.33
>>894
大小が問題になるなら、ある程度読める程度の数値を書いてくれ。
Tが100程度で失敗するのか、10億程度で失敗するのかでは話が違う。

898 :894:2013/04/04(木) 10:50:13.55
>>1 に便利なサイトが挙がってたのでそこにソースをあげてみた。
codepad.org/OyYRvLKK
これは深さT=10の場合でうまくいった例。
手元の環境(gcc4.5.3)だと、Tを50000くらいにすると
最後p:0に到達する前に処理が止まっちゃう…。

899 :デフォルトの名無しさん:2013/04/04(木) 12:15:42.75
良く分からないけど予約スタックサイズが足りないとか?

900 :894:2013/04/04(木) 13:01:02.07
>>899
Thanks!!

stackoverflow.com/questions/14057262/segfault-using-stdshared-ptr-during-destruction-likely-due-to-too-many-functio

「shared_ptr」と「stack size」で調べたら↑でも議論されてました。
しかし…shared_ptr使うケースならDestructorの再帰は当然多発すると思うけど、
これは盲点だなぁ。

901 :デフォルトの名無しさん:2013/04/04(木) 13:15:40.42
shared_ptrでリスト作ったりしないから無問題

902 :デフォルトの名無しさん:2013/04/04(木) 13:33:03.50
shared_ptr関係ない
デストラクタの中でメンバ変数のデストラクタ呼び出し
->そのメンバ変数のデストラクタ呼び出しの中でメンバ変数のメンバ変数のデストラクタ呼び出し->・・・
で関数呼び出しのネストが深くなりすぎてスタック食いつぶしてるだけだから

903 :デフォルトの名無しさん:2013/04/04(木) 13:52:38.10
>>902
確かにそうだわ
でもそんな再帰が起こるような設計は本能的に避けるから無問題

904 :デフォルトの名無しさん:2013/04/04(木) 20:21:39.47
programAからprogramBを実行したとして

/* program A */
//program Bを実行
while(FLAG){
//program Bから値を受け取る処理
}

/* program B */
while(FLAG)
{
if(COD)
//program Aに値を渡す処理
}

こんな処理がしたいのですが良い方法はないでしょうか

905 :デフォルトの名無しさん:2013/04/04(木) 20:24:09.48
>>904
プロセス間通信を使うとか

906 :デフォルトの名無しさん:2013/04/04(木) 20:24:09.65
名前付きパイプ

907 :デフォルトの名無しさん:2013/04/04(木) 20:27:40.19
メールスロットって相手に確実に届いたか保証がないのね
TCPでなくてUDPに近いのか

908 :デフォルトの名無しさん:2013/04/04(木) 21:05:20.42
馬鹿には何でもDB渡しが一番

909 :デフォルトの名無しさん:2013/04/04(木) 21:28:57.40
>>905-908
メールスロットが簡単そうなのでそれにしてみます
不安定だったら一度書き出してやるのがよさそうですね
ありがとうございます

910 :デフォルトの名無しさん:2013/04/04(木) 21:39:53.95
あとはメモリマッピングとか

911 :デフォルトの名無しさん:2013/04/05(金) 09:48:05.34
>>880-882
その方法だとコピーコンストラクターが呼ばれるの避けれない

912 :デフォルトの名無しさん:2013/04/05(金) 09:49:16.22
moveされるしどうでもよくね?

913 :デフォルトの名無しさん:2013/04/05(金) 10:46:23.86
retuenって利戸園というお茶のメーカーか?

914 :デフォルトの名無しさん:2013/04/05(金) 15:33:58.99
列津園

915 :デフォルトの名無しさん:2013/04/05(金) 20:46:31.17
struct stST
{
 int Val;
 int Ary[ 2 ][ 3 ];
};

void Func( int Ary[ 2 ][ 3 ] )
{
 stST stSt;

 stSt.Val = 10;
 stSt.Ary = Ary; ←こんな感じで配列のアドレスを書き換えたいのですが、コンパイルエラーになります。
            どうすればよいでしょうか??
 FuncSub( &stSt );
}

916 :デフォルトの名無しさん:2013/04/05(金) 20:54:16.53
当たり前だ
int** Aryにしなさい

917 :デフォルトの名無しさん:2013/04/05(金) 21:01:48.51
質問者とは別人だが、なんでエラーになるのか俺も理屈が分からん

918 :デフォルトの名無しさん:2013/04/05(金) 21:05:13.85
>>916
事情があってポインタにしたくないんです。
>>917さんも書いてますが、何で許されないのかが理解できないです。
論理的には可能なはずですよね?

919 :デフォルトの名無しさん:2013/04/05(金) 21:05:28.51
>>915
>>917
ttp://app.f.m-cocolog.jp/t/typecast/1126727/1148503/71235733
多次元配列を引数にするには注意が必要

920 :デフォルトの名無しさん:2013/04/05(金) 21:08:12.82
C++は使っていないので正確でないが、その関数の引数は一時的な生存しかしないだろ。
いったん、メモリ動的確保して値をコピーしてわたせ。
それで解決する保証はない。

921 :デフォルトの名無しさん:2013/04/05(金) 21:10:06.54
すまん、
>>919はミスった

多次元配列どうしのアドレスコピーはそれではできない
各次元ごとの先頭アドレスをそれぞれ渡す必要がある

922 :デフォルトの名無しさん:2013/04/05(金) 21:12:53.28
配列のコピーを勝手にやってくれるようにC++は便利にできていないんだろう。
コピー部分を自作するか、構造体のほうをアドレス(ポインタ)保存に書き換えればいいだろうという結論。
上の者。

923 :デフォルトの名無しさん:2013/04/05(金) 21:13:02.29
>>920
全然ちげーよあほ

924 :デフォルトの名無しさん:2013/04/05(金) 21:15:55.01
配列はポインタじゃないのでアドレスを書き換えたりはできないのです

925 :デフォルトの名無しさん:2013/04/05(金) 21:17:49.36
>>922
一次元配列ならすぐできる
多次元だからややこしくなる

926 :915:2013/04/05(金) 21:18:20.43
今のところ、FuncSubの前後で配列をコピーすることで対応していますが、
実際の配列要素数がそこそこあってパフォーマンス的なオーバーヘッドが無視できないですし、
何よりエレガントじゃないです。

>>924
&Ary[0][0]とすれば配列変数の先頭ポインタを指し示せませんか?
&stSt.Ary[0][0] = &Ary[0][0]
とやってもエラーでしたけどね・・・。

927 :デフォルトの名無しさん:2013/04/05(金) 21:18:36.61
>>924
へ?

928 :デフォルトの名無しさん:2013/04/05(金) 21:20:17.46
>>926
&stSt.Ary[0][0]は右辺値だからな

929 :915:2013/04/05(金) 21:21:35.62
>>928
そうそう、エラーメッセージに左辺値じゃないとかどうとか出てました。
???ってなりました。

930 :デフォルトの名無しさん:2013/04/05(金) 21:23:11.64
1 = 12;
こんなことはできないだろ?
そういうことだ

931 :デフォルトの名無しさん:2013/04/05(金) 21:25:19.90
ttp://codepad.org/2vztjxvB

ほい、ぐちゃぐちゃだけどこんな感じ

932 :915:2013/04/05(金) 21:29:26.10
>>930
あー、すごく分かりやすいですw

>>931
わざわざコードまで書いてくださってありがとうございます。
でも>>915のstST構造体の定義は諸事情により変えれないので、
ポインタの配列方式を使うこともできないんです。


残念ですが、諦めて素直にコピーすることにします。

933 :デフォルトの名無しさん:2013/04/05(金) 21:33:54.94
>>915
実体を持っているのだからmemcpy()するところなんじゃないか?
アドレスのみの参照とか危険なにおいしかしない。

>>919
char **のconstもちゃんと指定できる人も意外に少ないよねー

934 :デフォルトの名無しさん:2013/04/05(金) 21:34:42.24
なんでconst使わない人多いの?アホなの?

935 :デフォルトの名無しさん:2013/04/05(金) 21:39:07.39
便乗質問ですまんが

int *a;
int *b;
a = b;

これができて、

int a[] = {0};
int b[] = {1};
a = b;
(配列の内容をコピーしたいのではなく、
a の先頭アドレスを b の先頭アドレスと同じにしたい)

これができないのも、>>930 と同じ理屈?
それとも >>924 の理屈?

936 :デフォルトの名無しさん:2013/04/05(金) 21:42:44.33
両方だろ

937 :デフォルトの名無しさん:2013/04/05(金) 21:44:19.22
初心者はポインタ(Cの配列)をなるべく使わない方がいい。
参照渡しやSTLで代替できるだろ。

938 :デフォルトの名無しさん:2013/04/05(金) 21:45:32.17
>>935
どっちも同じ理屈じゃね?

939 :デフォルトの名無しさん:2013/04/05(金) 21:51:44.97
>>915
vector使えよ

940 :デフォルトの名無しさん:2013/04/05(金) 21:55:08.23
std::tr1::array もよいぞ

941 :デフォルトの名無しさん:2013/04/05(金) 21:59:48.43
オペレータ

942 :デフォルトの名無しさん:2013/04/05(金) 22:40:01.31
>>940
んなモンは無い

943 :デフォルトの名無しさん:2013/04/05(金) 22:42:21.52
今時TR1も取り込んでない処理系使ってるとか可哀想

944 :デフォルトの名無しさん:2013/04/05(金) 22:46:53.29
arrayぐらい30分もありゃ実装できるだろ
昼休み一回消費すれば後は使い放題なのに処理系の性にすんなカス

945 :デフォルトの名無しさん:2013/04/05(金) 22:55:15.63
昼休みはプログラム以外のもっと他のことに使いたいよな

946 :デフォルトの名無しさん:2013/04/05(金) 23:00:06.23
一日くらいいいだろカス

947 :デフォルトの名無しさん:2013/04/05(金) 23:01:55.39
>>944
お前は30分で単体試験成績書兼報告書まで作れるのか?
できなきゃ他人に迷惑かかるだけだぞカス

>>943
今時、標準化前の化石コンパイラ使ってるなんて可哀想。
ちなみにstd::arrayはムーブコンストラクタ無いからな。

948 :デフォルトの名無しさん:2013/04/05(金) 23:04:32.00
まぁ本当に一日なら良いが、いちどやってしまうと、
しばらく次から次へと余計な仕事が舞い込むからなぁ

949 :デフォルトの名無しさん:2013/04/05(金) 23:05:20.40
なんとか書なんて書かないといけない仕事は辛いの〜

950 :デフォルトの名無しさん:2013/04/05(金) 23:06:33.81
>>947
え?お前できないの?

951 :デフォルトの名無しさん:2013/04/05(金) 23:06:39.27
moveが無いからなんだって言うんだ

952 :デフォルトの名無しさん:2013/04/05(金) 23:08:09.14
何とか書を書いてる現場ほど碌なもんじゃない

953 :デフォルトの名無しさん:2013/04/05(金) 23:08:22.53
>>950 は単体試験成績書兼報告書がなんなのか知らないのではないか?

954 :デフォルトの名無しさん:2013/04/05(金) 23:11:22.08
単体試験成績書兼報告書を作らない現場は禄なもんじゃない

955 :デフォルトの名無しさん:2013/04/05(金) 23:22:52.24
>>934
あっいや、char **のconstをconst char ** って、書く人が多かったという話。
使ってる本人はconstのつもりだから、問題はでないのだけどconstがたりてない事にきづいてないんだ。。。

といいつつ、俺も2次元以上のポインタは、あんまり理解できて無いので、使わないようにしてる。
まぁ、クラスの場合、参照型でも多態できることを知ってから全体的にポインタ自体ほとんど使わなくなったけど。。。

956 :デフォルトの名無しさん:2013/04/05(金) 23:25:17.53
cならともかくc++でダブルポインタ使うやつはコードの書き方根本的に間違えてるから1からやり直したほうがいいよな

957 :デフォルトの名無しさん:2013/04/05(金) 23:26:46.09
C++はポインタの参照の方が使い勝手がいいからな

958 :デフォルトの名無しさん:2013/04/05(金) 23:31:55.20
むしろダブルポインタをちゅうちょなく使ったほうが楽になれる。

959 :デフォルトの名無しさん:2013/04/05(金) 23:37:46.82
本日の単体試験成績書兼報告書スレ

960 :デフォルトの名無しさん:2013/04/05(金) 23:40:11.92
ダブルポインタとかいう言葉を使うあたりが素人

961 :デフォルトの名無しさん:2013/04/05(金) 23:40:32.72
この業界はなんでも形式に走りすぎている
C++も妙な技巧に走りすぎている。
そんなものしなくてもキャストすればいいじゃん
とか
コードレビューして解放漏れをチェックすればいいじゃん

終わってしまうようなコーディングミスを隠すのにうじゃうじゃくだらない技巧に走りすぎ。

あとXMLも糞。
あんなものなーんもよくねーよ。
書くのめんどくさいしネームスペースとかうるせえ約束が多いし
改行が無視されたり改行を期待した使いかたするソフトがあるし。
インナーテキストに改行期待するんじゃねーよ。
ってか&とか素でいれんな。
つーか冗長だよ。バイナリストリームじゃだめなんかい。
iniファイルで充分だろう。
CSVにしとけや

なんでも形式に乗っかってとりあえず安心する。そして今日も残業ご苦労さん。

962 :デフォルトの名無しさん:2013/04/05(金) 23:40:36.83
ダブルポインタの単体試験書兼報告書明日までによろしく

963 :デフォルトの名無しさん:2013/04/05(金) 23:41:28.63
バイナリはバイトオーダがややこしい

964 :デフォルトの名無しさん:2013/04/05(金) 23:44:11.58
まあ小ネタだけどタマゴの話はあれ生物学的にはリトルエンディアンのほうが正解なんだけどね

965 :デフォルトの名無しさん:2013/04/05(金) 23:46:03.94
>>964のレスが本気で理解できないんだが……誰か翻訳してくれ

966 :デフォルトの名無しさん:2013/04/05(金) 23:54:16.33
リトルエンディアンがタマゴの↑方向ってこと

967 :デフォルトの名無しさん:2013/04/05(金) 23:54:38.11
今さらXML否定のテンプレみたいな感想だな
何年前の人間だよ
なんでもかんでもXML使うアホなんてもういないだろ

968 :デフォルトの名無しさん:2013/04/05(金) 23:58:01.70
とりあえずXMLにしておけば何とかなる
みたいなやつばっかだが

969 :デフォルトの名無しさん:2013/04/06(土) 00:03:48.53
時代はjsonだよな

970 :デフォルトの名無しさん:2013/04/06(土) 00:11:37.10
理由がないならXMLでいいだろ

971 :デフォルトの名無しさん:2013/04/06(土) 00:15:34.67
jsonだなあ

972 :デフォルトの名無しさん:2013/04/06(土) 00:19:16.75
jsonならあんなこともこんなことも

973 :デフォルトの名無しさん:2013/04/06(土) 00:21:34.35
ジェイソンなら安売りのほうだけで十分だよ

974 :デフォルトの名無しさん:2013/04/06(土) 05:15:00.26
ini は構文に関する標準仕様が無いのが難点。
特に理由が無ければ、xmlにしておくに賛成。

975 :デフォルトの名無しさん:2013/04/06(土) 07:31:36.86
moveってin_place_factory
の代用になるってことでいいの?

976 :デフォルトの名無しさん:2013/04/06(土) 07:41:34.52
moveとforwardなら あんなこともこんなことも

977 :デフォルトの名無しさん:2013/04/06(土) 07:57:39.45
自分も>>961に賛成。
iniやcsvで十分。

978 :デフォルトの名無しさん:2013/04/06(土) 08:06:22.21
形式は重要。
フォーマットが一定していれば汎用性がある。
多言語やネットワークへデータ送信するのに便利。
ただしXMLは表示に自由度があるし
XMLもJSONもテキスト用でバイナリデータの扱いが困る。

979 :デフォルトの名無しさん:2013/04/06(土) 08:12:34.01
JSONって何か怖いなぁ・・・。

980 :デフォルトの名無しさん:2013/04/06(土) 08:26:55.74
>>974
ライブラリの有無にもよるけどxmlは、人間が手書きするには向いてないからおすすめするところはないなぁ。
iniについて、規格はないけど暗黙の了解レベルで記述は、最低ラインは統一されてる感が強い。
個人的にはiniよりもconf形式の方が好きだ。

所詮、アプリ固有の情報なのに変なこだわりは無用だ。
簡単越したことはない。

981 :デフォルトの名無しさん:2013/04/06(土) 08:32:36.60
プログラム内で使う変数・構造体・(連想)配列などを一意的なテキストへシリアライズ出来ることは重要。

982 :デフォルトの名無しさん:2013/04/06(土) 08:43:34.62
階層構造がある形式がいいわ

983 :デフォルトの名無しさん:2013/04/06(土) 08:50:36.01
>>980
一人で開発するならその通り。

984 :デフォルトの名無しさん:2013/04/06(土) 09:15:49.55
>>983
逆。
利用者が多くなるほど単純であるべき
xmlは、アプリが自分自身で完結するにはいいのかもしれないが、自アプリ以外とのインターフェイスには不向き

設定ならiniで十分だし、データならテキスト形式の固定長が一番いい。

仕様書はかざりじゃないのだ。
所詮、xmlは俺すげーしたいやつだけの自己満足用データ形式。
※インターネットメッセージを除く(笑

985 :デフォルトの名無しさん:2013/04/06(土) 09:23:17.11
>>984
ロード・セーブの手順が定まっていなければ
読み(エンコード・シリアライズ)
書き(デコード、デシリアライズ)
部分を自作しなきゃならん。

986 :デフォルトの名無しさん:2013/04/06(土) 09:23:56.60
ツールが吐き出すフォーマットはXMLが多いし
わざわざ小さなファイルに複数の形式持ち込むのも一貫性が無いし大抵XMLだわ
あとはCSV程度かな

987 :デフォルトの名無しさん:2013/04/06(土) 09:30:22.58
あっ、追記
xmlがいいといってる人は、取り込んだ後の事をはなしてる?
そんなものパーサの役割であってデータ形式とは関係ないな。
出力については、後のこと考えず、アプリ内部の情報をダダ漏れさせるならxmlでもよいと思うが、他者とインターフェイスするような正規化されたデータならレコード単位に出力すればすむ話。

988 :デフォルトの名無しさん:2013/04/06(土) 09:51:53.63
>>985
なので、ライブラリの有無しだいという前提がある。
とはいえ、
自作すると言っても、単純な形式の読み書き部分なんて、テストケース込みでも300L程度。

xmlはxsdとセットにして初めて意味を持つし、かなり強力なのだけどねぇ。

オーバースペック感が半端ない。
xmlについて行き着くところは、手書きするのがダルいという点に限るな。

989 :デフォルトの名無しさん:2013/04/06(土) 09:54:03.87
ソフト屋さんは、なんとか書を書きながらプログラムコード打ってるんだね。
たいへんそう・・・。

990 :デフォルトの名無しさん:2013/04/06(土) 12:21:48.71
xml手書きとかアホじゃねーのと思ってる

991 :デフォルトの名無しさん:2013/04/06(土) 12:33:28.80
xmlなんてサイトマップとアンドロイドくらいでしか使わない

992 :デフォルトの名無しさん:2013/04/06(土) 12:33:58.63
XMLはデータ構造と表現できる内容が重要であって
人間がタグを見るなんてアホすぎ。

993 :デフォルトの名無しさん:2013/04/06(土) 12:35:42.19
あとさぁ、アプリによってはWindowsのレジストリに設定保存したりするじゃん?
あれってキモくない?
.exeと同階層に.iniファイル設けて保存すりゃイイじゃんって思う。
アンインストールしてもレジストリ設定だけ残るとかキモい。

994 :デフォルトの名無しさん:2013/04/06(土) 12:36:47.49
それはアンインストーラーがアホなだけだ

995 :デフォルトの名無しさん:2013/04/06(土) 12:36:56.39
>>993
何のためにアンインストーラがあると思ってんの?

996 :デフォルトの名無しさん:2013/04/06(土) 12:42:12.71
>>993
お前なんのためにレジストリがあると思っているんだ……?

997 :デフォルトの名無しさん:2013/04/06(土) 12:46:58.08
形式はともかくファイルデータベースにして欲しいよな。
共通はProgramDataの下、ユーザー設定はプロファイルの下と
自分で決めたルールにマイクロソフトが従わないんだから困る。

998 :993:2013/04/06(土) 12:47:30.58
>>994-995
マイクロソフト社の最新のVisualStudioなんですが・・・。

>>996
何のため??

999 :デフォルトの名無しさん:2013/04/06(土) 12:49:22.15
>>998
素直にUltimateの仕様版ずっと使い続ける方法教えて下さいと言えばどうだ?

1000 :993:2013/04/06(土) 12:50:17.27
>>999
6万円払ったProエディションです(T_T)

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

192 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)