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

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

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
スレリンク(tech板)

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

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

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

前スレ
C++相談室 part98
スレリンク(tech板)
C++相談室 part98(実質part99)
スレリンク(tech板)

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.82【環境依存OK】
スレリンク(tech板)

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

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

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

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

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

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

#include <stdafx.h>
後死ね。

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

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

class Test {

public: Test getThis() { return this; }

};

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

5:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/21 19:54:00.83
そう言えば仮想関数で共変と反変ってのがあったな
それよりテンプラよろ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

だね、俺もそうする。

ただ、その場合でも

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

だな。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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














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

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

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



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

だったわ。すまんこ。

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

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

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

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

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

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

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

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

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

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

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

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

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

57:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/24 11:13:06.30
途中returnがだめなら
throwなんてもっとだめなのか

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

80:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/24 17:06:41.94
ヘッダにさえ書かなきゃどうでもいい

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

83:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/24 17:24:38.27
設計上よくないということですか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

125:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/27 07:20:55.87
>>125
URLリンク(ideone.com)
URLリンク(ideone.com)
イミディエイトの参照をとるな、ってエラーがでないのね

127:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/27 08:45:32.72
というよりメンバにconstへの参照を持っていてそれに束縛する場合は要注意って事だな

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

176:片山博文MZパンク ◆0lBZNi.Q7evd
13/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:デフォルトの名無しさん
13/02/28 20:20:16.83
ム板もそうだが、マには精神壊れている奴が多いよな
そんな奴が就くからドカタ職業になるんだろうなと思う
いや、ドカタ職業だから精神壊れている奴ぐらいしか就かないのかも

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

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

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

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

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

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

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

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

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

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

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

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

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

これは流行る

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

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

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

189:126
13/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:デフォルトの名無しさん
13/03/01 04:15:14.40
変わらないよ
その場合constは魔法でも何でもない
ただ書き換えのエラーチェックがコンパイル時に為されるだけ

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

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

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

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

195:126
13/03/01 21:49:39.03
>>191
スレリンク(tech板:806番) でそう書いたらぼろくそだった‥‥

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

211:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/03/02 16:19:47.41
>>211
>dest[6] = L'\0';
ダメ

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

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

正常動作ですが何か

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

237:デフォルトの名無しさん
13/03/04 03:33:28.25
??

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

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

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

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

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

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

243:デフォルトの名無しさん
13/03/04 23:09:12.31
URLリンク(homepage2.nifty.com)

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

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

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

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

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

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

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

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

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

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

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

254:デフォルトの名無しさん
13/03/05 09:31:35.01
>>253
URLリンク(www.google.co.jp)

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

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

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

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

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

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

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

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

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

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

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

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

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

他はしらね。

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

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

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

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

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

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

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

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

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

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

273:デフォルトの名無しさん
13/03/07 17:08:39.53
URLリンク(www.google.com)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

反則だな

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

392:デフォルトの名無しさん
13/03/10 02:28:53.70
その人よく知らないけどこういうのはやめたほうがいいと思うな
URLリンク(twitter.com)
URLリンク(twitter.com)

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

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

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

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

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

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

でも流石にbool変数同士を比較する場合にはダメみたいだな
URLリンク(ideone.com)

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

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

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

>喜んでる精神異常

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

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

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

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

スレリンク(tech板:961番)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

416:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/03/10 12:19:11.23
あ。しっぱい
X=rand();
a[(i+X)%100]=tmp[i];

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

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

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

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

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

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

424:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/03/10 15:22:56.53
URLリンク(d.hatena.ne.jp)

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

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

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

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

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

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

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

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

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

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

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

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

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

}

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

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

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

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

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

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

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

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

442:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/03/17 10:10:19.34
コメントアウトのかわりに0&&でとりあえずその個所を無効にしただけだろ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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