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

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

C++相談室 part106

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

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

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

次期規格C++1yはこちら
C++14/C++1y
http://toro.2ch.net/test/read.cgi/tech/1382889622/

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

2 :ここまでテンプレ:2013/10/29(火) 15:05:38.74
【重要】
hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。

なお、hogeはNGワードに追加しておくことが強く推奨されています。

3 :デフォルトの名無しさん:2013/10/29(火) 15:13:04.44
ちょいと質問。
gccで次のコードをコンパイルすると初期化子が足りないと警告が出るのだけれど、規格としてはどうなんだっけ?
--
#include <iostream>
using namespace std;

int main() {
struct foo {
int foo;
std::string bar;
} fooz = {0};
std::cout << fooz.bar.size();
return 0;
}
--

4 :デフォルトの名無しさん:2013/10/29(火) 15:36:22.35
規格としてはOKだから、警告出るけどコンパイルできる
gccの警告レベルはオプションで細かく指定できる

5 :デフォルトの名無しさん:2013/10/29(火) 16:14:37.74
8.5.1/7
If there are fewer initializer-clauses in the list than there are members in the aggregate, then each member not explicitly initialized shall be initialized from an empty initializer list (8.5.4). [Example:
struct S { int a; const char* b; int c; }; S ss = { 1, "asdf" };
initializes ss.a with 1, ss.b with "asdf", and ss.c with the value of an expression of the form int(), that is, 0. ?end example ]

6 :デフォルトの名無しさん:2013/10/29(火) 16:19:26.30
これ間違ってるよな
http://pic.dhe.ibm.com/infocenter/comphelp/v121v141/index.jsp?topic=/com.ibm.xlcpp121.aix.doc/language_ref/strin.html&lang=ja

7 :デフォルトの名無しさん:2013/10/29(火) 18:32:09.65
>>3
規格的には問題ないけど、そういう場合は括弧の中空で初期化すべきじゃない?

8 :3:2013/10/29(火) 18:51:06.35
>>4-7
THX!
某社のコードを管理しているクライアントのコードがこんな感じだったの。
長らくC++に移行するのを嫌がっていたけど、
某社から要請されてやっとC++に移行したと思ったらこれだよw
警告の回避手段を検討してくれって言われたけど、さてどうしたもんか。

9 :デフォルトの名無しさん:2013/10/29(火) 19:27:58.52
hoge

10 :デフォルトの名無しさん:2013/10/29(火) 19:30:43.56
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

11 :デフォルトの名無しさん:2013/10/29(火) 20:04:22.82
>>8
うるせーバカと引数で警告を切る
-Wno-missing-field-initializers

うっせーアホとソースコードで警告を切る
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#pragma GCC diagnostic pop

あきらめる
= {0, std::string()};

12 :デフォルトの名無しさん:2013/10/29(火) 22:58:39.95
C++極めた

13 :デフォルトの名無しさん:2013/10/29(火) 23:07:18.32
奇遇だな
俺もだ

14 :デフォルトの名無しさん:2013/10/30(水) 00:06:54.97
C++の学習曲線はサインカーブらしいからな・・・

15 :デフォルトの名無しさん:2013/10/30(水) 00:30:55.05
D言語とF#極めるわ

16 :デフォルトの名無しさん:2013/10/30(水) 01:07:19.62
Dってどうなのよ
あれどうなるんだ
未だに先行き不透明

17 :デフォルトの名無しさん:2013/10/30(水) 01:17:55.24
ファイスブックが採用したとか

18 :デフォルトの名無しさん:2013/10/30(水) 01:23:33.81
>>17
かわいそうに

19 :デフォルトの名無しさん:2013/10/30(水) 01:28:28.08
デジャヴ

20 :デフォルトの名無しさん:2013/10/30(水) 02:30:23.52
>>8
>>11
デフォルトはその警告オフだよね?
-Wallでもしてるんかしら。

コンパイラの規格が2003年版以降なら
}fooz=foo();でもokだと思うけど…古いコンパイラに持って行ったとき死ぬのでオススメはしない。

21 :デフォルトの名無しさん:2013/10/30(水) 02:51:55.68
>>14
つまりマイナス=初心の頃のほうがマシ、とかヘンテコになるときもあるのか?!

22 :デフォルトの名無しさん:2013/10/30(水) 03:06:54.82
>>20
-Wallどころか"that are not enabled by -Wall."である
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

23 :デフォルトの名無しさん:2013/10/30(水) 07:07:26.46
>>21
テンプレートとかに凝りだすとそう言う状態になる。
まあ、C でもマクロとかあるから似たようなもんだが

24 :デフォルトの名無しさん:2013/10/30(水) 13:09:16.83
>>21
『ぼくのかんがえたすごいてくにっく』でやろうとしたけどうまくできません、と言って
なんでそういうやり方をしてるの?とかそもそも何がやりたいの?と突っ込まれてる質問をよく見るだろ

25 :デフォルトの名無しさん:2013/10/30(水) 16:19:51.02
>>21
長考してるときは手が止まっていて
外から見て C++ を使っていない状態になったりはする

雑記帳のメモは俺語だし

26 :デフォルトの名無しさん:2013/10/31(木) 01:08:41.39
g++の最適なオプション教えろ
昔どこかのサイトでこれだけはつけておけ!みたいな記事があったがどこにあったか忘れた
付けると最適化がさらによくなったり、厳密なデバッグをするようになって警告が出まくる感じだった

27 :デフォルトの名無しさん:2013/10/31(木) 01:18:37.56
>>26
-最速 -最小

28 :デフォルトの名無しさん:2013/10/31(木) 01:26:11.71
>>26
お前がEffective C++信者なら、
-Weffc++ -Werror を付けておけ

29 :デフォルトの名無しさん:2013/10/31(木) 01:38:09.66
-Weffic++ってどういのか調べたら至極まっとうな警告出してくれるのな
信者の素質あるかな

30 :デフォルトの名無しさん:2013/10/31(木) 01:41:05.72
>>29
過去の自分が書いたソースを全部警告が出ないようにできるか?

31 :デフォルトの名無しさん:2013/10/31(木) 01:42:03.88
>>30
ムリダナ

32 :デフォルトの名無しさん:2013/10/31(木) 01:44:00.04
C++を使う上で当たり前のことをまとめた本だから信者も何もないと思うよ

33 :デフォルトの名無しさん:2013/10/31(木) 01:57:04.46
-Weffc++の痛々しいところ

中身空っぽでもいいから、とにかくコンストラクタには全てのメンバー変数に対して初期化子を書けと言うところ

34 :デフォルトの名無しさん:2013/10/31(木) 01:58:18.72
-Weffc++の痛々しいところ

継承する場合は常にvirtualデストラクタを書けと言うところ

35 :デフォルトの名無しさん:2013/10/31(木) 02:00:17.11
>>33-34
いやそれは今でもやってんよ俺
デバッグとリリースで挙動の違うバグ起こしかねないから
あと継承するときはvirtualデストラクタにするっしょ

36 :デフォルトの名無しさん:2013/10/31(木) 02:01:41.76
>>34
それはどこが痛々しいの?
ポリモーフィックなクラスは仮想デストラクタにするのが当たり前だと思ってたが
そうしない方がいい場合というのがあるの?

37 :デフォルトの名無しさん:2013/10/31(木) 02:06:02.60
仮想関数テーブルを使わなくて済む!

38 :デフォルトの名無しさん:2013/10/31(木) 02:08:58.54
>>36
ツリー構造になってるtraits系クラスに全部デストラクタを書いてるのか

39 :デフォルトの名無しさん:2013/10/31(木) 02:12:29.46
>>35
お前本当にWeffc++使ってんの?

class c {
int i;
c() {}
...

これは許されない。

class c {
int i;
c() :i() {}
...

これは許される。

デバッグとリリースで挙動が違うバグとやらの理論で、この意味不明な押し付けを正当化できるのか?

40 :デフォルトの名無しさん:2013/10/31(木) 02:13:26.58
多態性使うときは書くな
それ以外は書かない

41 :デフォルトの名無しさん:2013/10/31(木) 02:13:59.64
>>36
> ポリモーフィックなクラスは仮想デストラクタにするのが当たり前だと思ってたが

勝手にポリモーフィックの話に変えないようにwww
結局effc++信者は馬鹿ばっかり。

42 :デフォルトの名無しさん:2013/10/31(木) 02:18:16.05
標準ライブラリーもboostも含めメジャーなライブラリーで
-Weffc++ -Werror
をつけてコンパイルが通るライブラリーは一つもない。

警告を出しているg++でさえ、自分のコンパイルすらできない。

43 :デフォルトの名無しさん:2013/10/31(木) 02:21:35.51
>>36
継承するとき全部仮想デストラクタにするのは
やっぱEffective C++の影響で?

44 :デフォルトの名無しさん:2013/10/31(木) 02:22:18.45
>>39
いやWeffc++は使ってないけどそれはイミフじゃないだろ
上のiはデバッグのときはパターン初期化されてリリースのときはゴミが入る場合が多い
(つまりデバッグとリリースで初期状態が変わる)けど
下はゼロ初期化になるじゃん

45 :デフォルトの名無しさん:2013/10/31(木) 02:23:51.60
>>38
そういや書かないね。
typedef連ねてるだけで実装持ってないことが多いから気にしたこともなかった。

それと、インターフェイスなクラス書く時、何気なく仮想デストラクタ書いてるけど
これってなんで必要なんだっけ?
前に何かの本かblogで書くべきって書いてあるの見たのは確かなんだけど
なんで?の部分が思い出せない。

46 :デフォルトの名無しさん:2013/10/31(木) 02:26:41.93
そりゃ書かなきゃ継承先のデストラクタがよばれないからだろう

47 :デフォルトの名無しさん:2013/10/31(木) 02:27:35.45
>>44
画素を表現するためにメンバーにr,g,bを持つクラスを配列化させて画像を表現する場合も、
たとえ速度が犠牲になろうとも
画素のコンストラクタには全て初期化子を書くタイプ?

48 :デフォルトの名無しさん:2013/10/31(木) 02:31:58.40
>>45
> そういや書かないね。
> typedef連ねてるだけで実装持ってないことが多いから気にしたこともなかった。

effc++的には許して貰えないな

多くのライブラリが警告だらけになる理由の一番がこれだ

49 :デフォルトの名無しさん:2013/10/31(木) 02:32:59.23
>>47
POD型の構造体を書く
structももちclassの一種なのは承知
これがEffcで許されるかはよくしらん

50 :デフォルトの名無しさん:2013/10/31(木) 02:40:14.92
>>49
effc++はそんなものでも初期化子書けと怒るという話なのだが。
とりあえず使えよ。

51 :デフォルトの名無しさん:2013/10/31(木) 02:46:14.48
Effective C++信仰
ゲッタセッタ病
クラス肥大病
クラス数減少病
クラス依存循環病

どこかのスレで、これら全部影響しあってるって話があったよ。
だからどれも治すの難しいんだとか。

52 :デフォルトの名無しさん:2013/10/31(木) 02:55:30.80
>>50
出ない。少なくとも下のコードでは出ない
Imageに int i; メンバ変数追加したらもちろん出る

$ g++ -Weffc++ -Wall -c test.cpp

struct Pixel
{
char a, r, g, b;
};

class Image
{
public:
Image() {}
private:
Pixel icon_[16 * 16];
};

int main(int argc, char *argv[])
{
Image image;
return 0;
}

53 :デフォルトの名無しさん:2013/10/31(木) 02:58:23.84
>>52の出る出ないは警告ね

54 :デフォルトの名無しさん:2013/10/31(木) 03:05:11.98
>>45
インターフェイスのクラスポインタに具象クラスをnewしてdeleteしてみればわかる

55 :デフォルトの名無しさん:2013/10/31(木) 03:08:43.76
>>52
Pixelの例は極端な話だから理解しにくいかもしれないが、Pixelで追求するのなら

struct Pixel
{
char a, r, g, b;
Pixel(char A,char R,char G,char B) : a(A),r(R),g(G),b(B) {}
};

このあたりを起点に試すとか

56 :デフォルトの名無しさん:2013/10/31(木) 03:17:07.38
>>55
いや、それじゃコンパイル通らないし。
POD型の構造体作るような単純なデータ構造に
普通ユーザ定義のコンストラクタは書かないし
逆に複雑なデータ構造ならclassにして初期化子も全部かくだろ

57 :デフォルトの名無しさん:2013/10/31(木) 03:24:21.35
PODほど単機能ではないけど
何億件もオブジェクトを並べる必要があってPODに近い扱いをしたい
ってときに、その主義だと速度への犠牲の強い方が大きそうだ

58 :デフォルトの名無しさん:2013/10/31(木) 03:25:12.04
>>56
> いや、それじゃコンパイル通らないし。

どうして?

59 :デフォルトの名無しさん:2013/10/31(木) 03:29:49.09
>>58
なにかコンストラクタを追加した時点で
structの暗黙のデフォルトコンストラクタが無効になるから
どうして?ってのがどうしてだよ。

60 :デフォルトの名無しさん:2013/10/31(木) 03:33:00.05
>>59
「まずそこを起点にして」、考え直せば、デフォルトコンストラクタを足すという
というのが、変化の第一歩かなと思ったけど、
そもそもの思考が全然違うわけか。

ちなみにEffective C++信者の方?

61 :デフォルトの名無しさん:2013/10/31(木) 03:33:52.62
>>57
そういう案件のプロジェクトなら何十人も関わってるはずなので
-Weffc++なんてリベラルなことは死んでもやれない

62 :デフォルトの名無しさん:2013/10/31(木) 03:39:53.47
>>59
叩き台のスタート地点を決定稿扱いして批判開始するのは極端な思考だと思うし
PODかさもなくば初期化子フル装備のクラスかの二択でしか考えないのも極端な思考だと思うし

とりあえず初期化子必要性に関しては一番端っこの原理主義者みたいなものでしょ?
そうでない人との議論はする意味あるのかな

63 :デフォルトの名無しさん:2013/10/31(木) 03:45:21.40
>>62
別に批判してるわけではなくて
言われなくてもわかるっしょ?行間読めよって言われても
正直>>55でなにを試せって言われてるのか俺にはわからん

64 :デフォルトの名無しさん:2013/10/31(木) 03:46:36.47
初期化子をきっちり書くだとか
継承するときはかならず仮想デストラクタ付けるとか
そういうオマジナイさえしっかりしておけば
あとは気を抜いても安全が担保される
速度の犠牲は許される代償である

effc++信者の思考パターンね

だから信者を端的に現すと
「オ・マ・ジ・ナ・イ」で「ア・ン・シ・ン」

65 :デフォルトの名無しさん:2013/10/31(木) 03:48:58.75
初期化子なんていらない派の知識のなさが露呈してきた

66 :デフォルトの名無しさん:2013/10/31(木) 03:49:42.26
>>64
オマジナイだけで安心できるなら、それでいいんじゃない?
それは悪いこと?

67 :デフォルトの名無しさん:2013/10/31(木) 03:53:29.27
ゲッタセッタ病は裏に二つの病

オマジナイ安心病
実装依存インタフェイス病

68 :デフォルトの名無しさん:2013/10/31(木) 03:55:16.61
なんでもかんでも病認定するお医者さんが住み着いてるな
IDでねーからなこの板・・・

69 :デフォルトの名無しさん:2013/10/31(木) 04:00:07.43
洗脳確定すると解けないようにできてるんだから
あれはよくできた宗教本だよ

70 :デフォルトの名無しさん:2013/10/31(木) 04:08:39.45
病気でもいいからオマジナイはほしい。
大概のクラスはいくつかに分類できるんだから、先に分類例をあげて、その場合の典型的な実装例を示して
最後にそう書く理由を説明される方が分かりやすいし覚えやすい。

71 :デフォルトの名無しさん:2013/10/31(木) 04:18:10.83
>>70
安心欲しさにオマジナイにすがるのは
放射能怖さに沖縄に引っ越した人みたいで嫌だ

72 :デフォルトの名無しさん:2013/10/31(木) 04:25:38.00
沖縄はいいところだよ

73 :デフォルトの名無しさん:2013/10/31(木) 04:25:52.71
Effective C++は初心者の恐怖を利用して巧みに洗脳するんだな。
オマジナイのおかげで気を抜いても安心とか最低だろ。

74 :デフォルトの名無しさん:2013/10/31(木) 06:08:10.35
初期化市は書けよって結論でおk?

75 :デフォルトの名無しさん:2013/10/31(木) 06:11:46.79
おkhoge

76 :デフォルトの名無しさん:2013/10/31(木) 06:26:14.55
>>33-34,39,55,58
こいつの基礎知識のなさに絶望したわ
Effc++批判する以前の問題だろ

77 :デフォルトの名無しさん:2013/10/31(木) 08:50:59.73
>>64
どうでもいいところを安全側に倒すっていう判断は普通にアリでしょ。
多くの場合に意味のない効率と、多くの場合に意味のない安全性とのトレードオフね。

78 :デフォルトの名無しさん:2013/10/31(木) 09:27:57.10
でもeffectiveすら読んだことない奴はゴミ

79 :デフォルトの名無しさん:2013/10/31(木) 09:44:56.44
>>78
さすがに二十年前の本だしな
この二十年間Effectiveを読まないように気を付けてきました
なんてやつがいるならお目にかかりたい

80 :デフォルトの名無しさん:2013/10/31(木) 10:05:45.00
本高いから何も読んでないな

81 :デフォルトの名無しさん:2013/10/31(木) 10:11:24.73
俺もC++始めて5年目だけど読んでない
ボロボロでもいいから中古で千円なら読む

82 :デフォルトの名無しさん:2013/10/31(木) 10:14:44.37
セオリー知らない奴はホント困る
コーディングで個性発揮してんじゃねーよ

83 :デフォルトの名無しさん:2013/10/31(木) 10:31:32.67
よい子ちゃんは人に教えられたことを頑なに守るからね。
俺みたいなアウトローはeffectiveC++を読んでeffectiveC++で禁止されていることを
やるのがカッコイイんだけど。

84 :デフォルトの名無しさん:2013/10/31(木) 10:40:52.50
ゴーアウト

85 :デフォルトの名無しさん:2013/10/31(木) 11:11:20.58
>>81
5〜6年前はブックオフで300円とかで見かけることもあったけど、
今はどうなんだろうな

86 :デフォルトの名無しさん:2013/10/31(木) 11:43:18.78
ブックオフは正規の半額の値段か100円のどちらかだろう。
300円とか半端な値段にはならないはず。

87 :デフォルトの名無しさん:2013/10/31(木) 11:44:23.14
>>85
まじで?そんなに?
じゃあ俺、読む

88 :デフォルトの名無しさん:2013/10/31(木) 12:48:25.65
日本語版effectiveの1,2版は訳がひどくて原書で読めといわれる技術書の代表だったから気をつけろ
というかこの流れでも日本語1,2版を前提にして語っているのが混じってそうだな

89 :デフォルトの名無しさん:2013/10/31(木) 12:52:29.73
おれは英語版しか読んだこと無いが・・・
俺から言わせて貰えば日本語版で読める代物はほとんど無い。
英語でしか表せないウィットにとんだジョークなども日本語に翻訳したとたん
陳腐で下劣なものにしかならないからな。

90 :デフォルトの名無しさん:2013/10/31(木) 12:52:58.98
第三版がいいなあ

91 :デフォルトの名無しさん:2013/10/31(木) 13:00:06.14
ちゃんとした翻訳版があれば原書は遠慮したいな
技術英語なら一応は読めるっていっても
流し読みたいところを高速に流し読めるのは日本語以外考えられない

92 :デフォルトの名無しさん:2013/10/31(木) 13:02:42.63
英語をスラスラ読めるとかなり有利だよな
急がば回れということで英語を勉強するのも手か

93 :デフォルトの名無しさん:2013/10/31(木) 13:09:16.44
英語はセンスだからな。
センスの無い奴がいくら英語を勉強しようとも絶対分かるようにはならない。
フィーリングっていうのを感じられるようになるには英語の理論だけは絶対理解できない領域だからな。

94 :デフォルトの名無しさん:2013/10/31(木) 13:10:29.90
>>83
ネタみたいな書き方してるが、
実際、effectiveをいかに素早く通過するかは大事なことで、
effectiveに従順に従う期間が長くなると癖のように染み付くのが良くない。

95 :デフォルトの名無しさん:2013/10/31(木) 13:10:35.01
うだうだ言わずに読め

96 :デフォルトの名無しさん:2013/10/31(木) 13:10:46.34
英語は言語だ誰だってできるようになる
…いやほんとそう思うよ。できないのは触れる時間が短すぎる

97 :デフォルトの名無しさん:2013/10/31(木) 13:14:40.73
大事なのは一字一句読み取る能力じゃなくて
いらないところを読み飛ばしたり構成をつかんだりする能力だろう

けっきょく経験するしかないのじゃ

98 :デフォルトの名無しさん:2013/10/31(木) 13:16:32.22
>>96
それは本当
以前は勉強しても全然英語が伸びなくて受験生時代センター英語3割だったけど
それから二年中英語のゲームやってたら浪人して英語だけ9割取れるようになった

99 :デフォルトの名無しさん:2013/10/31(木) 13:17:23.46
そこは C++ だって同じやん
文法だけいくらおぼえても、からっきし何も作れない
要は言語で表現しようとしているものを理解する必要があるってだけ

外人に何を伝えたいのか、何を言ってきているのか
時に基本的な発想が違っていることがあったりするのは文法ではわからない

100 :デフォルトの名無しさん:2013/10/31(木) 19:39:53.12
>>98
お前一人のサンプル出されて本当って言われてもね
お前の脳に異常があるとかそういうオチだろどうせ
自分一人のサンプルで本当とか言い出す辺りそっちのほうが可能性としては高い

101 :デフォルトの名無しさん:2013/10/31(木) 19:44:55.82
前置詞って聞き取れないよね〜。
なんでだろうね〜。
困るわ〜。

102 :デフォルトの名無しさん:2013/10/31(木) 21:18:38.84
オブジェクト指向ってのが難しくてわかんないんだけど、
画面作ってボタンのクリックイベントから先はなんでもかんでもクラス化して
クラスがいっぱいになったりするんですけど、そんなもんですか?
グローバル変数を使わない方がいいと思って
クラスのアクセサつかったりしてるんですけど、
逆にごちゃごちゃしてる気がしてなんかなぁって感じです
基本的にどんな設計が一番保守しやすいんでしょうか?
気を付けていることとかを聞かせていただけるとありがたいです。

103 :デフォルトの名無しさん:2013/10/31(木) 21:27:39.55
インスタンスを生んだら手を尽くして例外なく可能な限り早急に殺す。
dataはプログラム全体をカバーする巨大構造を別に設計してソコに収める。

104 :デフォルトの名無しさん:2013/10/31(木) 21:37:02.14
通報した

105 :デフォルトの名無しさん:2013/10/31(木) 21:37:50.94
>>103
生成したインスタンスすべてを管理するクラスを作るってこと?
インスタンスを生成したクラスの中やデストラクタでdeleteしてるんですけど、
そのなかで解放はしないでそっちの管理するクラスで解放するってことですか?

106 :デフォルトの名無しさん:2013/10/31(木) 22:06:11.42
>>102
「逆にごちゃごちゃしてる気がしてなんかなぁって感じ」る程まで小分けする必要は無いだろ。
管理しやすい単位で留めとけよ。

>>105
それはなんちゃってオブジェクト指向の作り方説明じゃねぇの?

107 :デフォルトの名無しさん:2013/11/01(金) 00:16:21.34
>>102
細かいクラスほど別のプログラムで再利用できるように意識する。できない場合は分けるだけムダってことも
基本クラスはできるだけ継承で機能を拡張しやすいように作る
メンバのdeleteは普通にデストラクタですればいいよ

108 :デフォルトの名無しさん:2013/11/01(金) 00:30:57.53
〜再利用を考えてつくられたクラスは再利用されない法則〜

109 :デフォルトの名無しさん:2013/11/01(金) 01:02:50.69
>>107
delete なんて書くんじゃねぇ。スマートポインタ使え。

110 :デフォルトの名無しさん:2013/11/01(金) 01:12:41.45
C++でレースゲー作ってるんだけど、どうせならハンドルを握りたい
USB接続できるハンドルでC++で制御することがサポートされてたりする商品があったら教えて欲しい

111 :デフォルトの名無しさん:2013/11/01(金) 01:22:38.35
>>110
プレステのハンドル形コントローラーと、プレステパッドのジョイパッドコンバータを組み合わせて使えば良い。
プレステコントローラーを流用する時点で保証的なものは無いけど、製品数や品質はそこそこ期待できる。

112 :デフォルトの名無しさん:2013/11/01(金) 06:58:57.08
継承で機能拡張なんて悪手だわ

113 :デフォルトの名無しさん:2013/11/01(金) 07:20:39.21
旧:抽象クラス≒インターフェイスクラス→具象クラス→拡張クラス(時々?)→拡張クラス2(極稀?)→拡張クラス3(奇跡?愚作?)
現:Traits/Policyクラス→抽象クラス→具象クラス→拡張クラス(時々?)→拡張クラス2(極稀?)→拡張クラス3(奇跡?愚作?)

114 :デフォルトの名無しさん:2013/11/01(金) 07:32:09.53
>>71
それは正解

115 :デフォルトの名無しさん:2013/11/01(金) 07:45:09.72
>>107
あんまり、初心者に継承は教えない方がいいと思う。
既存のファイル読み書きクラスを継承してログ出力クラスなんてものを作ったりするし。

先ずは、カプセル化、そして多態とかインターフェース継承、
最後に高等テクニックとして実装の継承を教えるとかかな。

116 :デフォルトの名無しさん:2013/11/01(金) 07:53:26.53
>>101
ネイティブもちゃんと聞いてなくて、話の流れで判断してるらしい

117 :デフォルトの名無しさん:2013/11/01(金) 08:42:18.10
日本語でも協和語みたいに接続詞や助詞がおかしくても通じるしね

118 :デフォルトの名無しさん:2013/11/01(金) 09:58:35.47
前置詞で文意が変わってしまうような場合は
発する側も意識して発音する

119 :デフォルトの名無しさん:2013/11/01(金) 14:34:51.51
どの言語も単語を羅列することから始まってるので
語順も助詞もぶっちゃけ飾りです

120 :デフォルトの名無しさん:2013/11/01(金) 16:18:48.04
かなり変わってくるぞ

「お前はプログラミングができない」
「お前もプログラミングができない」
「お前はプログラミングもできない」
「お前もプログラミングもできない」
「お前とプログラミングはできない」
「お前でプログラミングはできない」

121 :デフォルトの名無しさん:2013/11/01(金) 16:34:01.37
「お前をプログラミングはできない」
「お前のプログラミングはできない」

122 :デフォルトの名無しさん:2013/11/01(金) 16:34:05.94
違いに関してはこっちのほうがしっくりくる
http://img2.blogs.yahoo.co.jp/ybi/1/65/d7/bloom5531/folder/1012162/img_1012162_31139923_0?1378651646

123 :デフォルトの名無しさん:2013/11/01(金) 18:29:00.83
あなたを、犯人です。
普通に意味通じる。

124 :デフォルトの名無しさん:2013/11/01(金) 18:38:46.42
語彙の情報と構文の情報の不整合による摩擦を無視してるのは明らかだけどな

125 :デフォルトの名無しさん:2013/11/01(金) 18:41:10.86
あなた、犯人、違いないで十分通じるんだから、助詞とか要らなくね?

126 :デフォルトの名無しさん:2013/11/01(金) 19:00:46.22
私そう思うある

127 :デフォルトの名無しさん:2013/11/01(金) 19:04:43.28
流暢には聞こえないし場合によっては通じない
通じたとしても違和感は感じるよね
ただ、日常のよくやる会話ならほぼアクセントだけで通じると思ってる
挨拶みたいな定型句なんかは余計に

128 :デフォルトの名無しさん:2013/11/01(金) 19:13:49.38
>>125
「彼、あなた、殴る」
だとどっちがどっちを殴るか不明瞭

129 :デフォルトの名無しさん:2013/11/01(金) 19:17:12.13
文脈や共有知識があるかどうかにもよるわな

130 :デフォルトの名無しさん:2013/11/01(金) 19:25:45.20
スレが縄文時代に戻った
こんなかんじで言葉は発展してきたんだろうな

131 :デフォルトの名無しさん:2013/11/01(金) 19:54:14.04
日本語だと助詞が重要だが英語だと語順が重要

「あなたはリンゴを食べます」
「あなたをリンゴが食べます」

「You eat this apple」
「This apple eat you」

また、上述の単語のみを用いて会話する場合、同じ世界観を背景としていれば「あなた(you)、リンゴ(apple)、食べる(eat)」でも伝わる
これは、人間がリンゴを食べることはあってもリンゴが人間を食べることはないという共通の関係性を認識しているため可能なこと
>>128のようにどっちがどっちに対しても行うことが可能な関係性の場合には破綻する

132 :デフォルトの名無しさん:2013/11/01(金) 20:15:16.46
あくまでoperator の話をしているように見える俺は、operator の記述を使いこなしてない

133 :デフォルトの名無しさん:2013/11/01(金) 20:51:53.02
翡翠だったのに。

134 :デフォルトの名無しさん:2013/11/02(土) 02:14:12.68
スクラッチでちょっとコード組むんだけど
メンバ変数の接頭(尾)辞おまえらどんなにしてる?
m_foo か foo_ が2強だと思うんだが視認性的に前者最強?

135 :デフォルトの名無しさん:2013/11/02(土) 02:18:43.65
視認性なら大文字使えば?

136 :デフォルトの名無しさん:2013/11/02(土) 02:21:17.32
>>135
大文字表現は定数と(数少ない)マクロのためにとっておきたい

137 :デフォルトの名無しさん:2013/11/02(土) 02:25:21.79
どっちでもいいし付けなくてもいいと思うけど foo_
同じ接頭辞の変数は一瞬見紛いやすいから

138 :デフォルトの名無しさん:2013/11/02(土) 02:35:33.86
>>137
サンクス。てかpart105にも同じ話題があった…蒸し返しすまん

139 :デフォルトの名無しさん:2013/11/02(土) 08:29:50.13
hoge_
かな

140 :デフォルトの名無しさん:2013/11/02(土) 08:33:59.80
m_で統一してから自動補完で捗るようになったわ

141 :デフォルトの名無しさん:2013/11/02(土) 09:28:12.91
>>125
逆に全部揃ってても文脈無いと判断付かん文章もあるしな。
助詞とかは解釈を分りやすくするヒントであって、必ずしも省略不可能な要素では無いんだろうな。

C/C++だって不定なコードとか鼻悪魔なコードとかあるわけだし。

142 :デフォルトの名無しさん:2013/11/02(土) 11:27:32.52
m_は古臭い
自動補完なんてそんなのなくても余裕だし、this->書いて消せば命名どうしようが関係ないし

143 :デフォルトの名無しさん:2013/11/02(土) 11:30:11.94
全部にthis->書くプロジェクトに当たって恐ろしく見通しが悪かったトラウマがある
んで最悪な事にところどころ忘れてやがんの、なんの意味もねえw

144 :デフォルトの名無しさん:2013/11/02(土) 11:32:12.79
なんでthis->だと見通しが悪くなるんだよ。慣れてないだけだろ

145 :デフォルトの名無しさん:2013/11/02(土) 11:40:18.64
this->書いて消すとかアホらし

146 :デフォルトの名無しさん:2013/11/02(土) 11:47:33.84
全部にthis->とか正気か?
コピペ面倒だし行が無駄に長くなるだけだろ

147 :デフォルトの名無しさん:2013/11/02(土) 11:48:27.63
>自動補完なんてそんなのなくても余裕だし、

これの方が古臭い根性論に見える。

148 :デフォルトの名無しさん:2013/11/02(土) 11:53:02.96
今どき文字数を減らすとか行数を減らすとかマジ無意味だからやめて

149 :デフォルトの名無しさん:2013/11/02(土) 11:54:45.55
t C-/ でメンバー一覧出るから、this-> 便利だろう

150 :デフォルトの名無しさん:2013/11/02(土) 12:08:45.36
m_でいいや

151 :デフォルトの名無しさん:2013/11/02(土) 12:09:51.31
this->はたまにやるけど
>>143 は許しがたいな。C使えよ

152 :デフォルトの名無しさん:2013/11/02(土) 12:18:20.18
m_の2文字で自動補完かかるんだっけ?なぜか3文字だと思い込んでた。

153 :デフォルトの名無しさん:2013/11/02(土) 14:22:38.05
>>147
覚えきれないほどのメンバ変数がある時点で捗るもクソもない

154 :デフォルトの名無しさん:2013/11/02(土) 14:35:17.84
this->忘れてもエラーにも警告にもならないからね 意味なし
俺はc#もやりだしてから_fooで統一した

155 :デフォルトの名無しさん:2013/11/02(土) 14:40:04.89
>>153
1クラスで済む話じゃないからねえ。
どのクラスに何というメンバがあるか全部覚えておくというなら、やっぱり根性論か、
あるいはよっぽど小規模なプログラムしか作ったことないんだろう。

156 :デフォルトの名無しさん:2013/11/02(土) 14:41:38.38
this->m_hoge_
結構いかしてると思わない?

157 :デフォルトの名無しさん:2013/11/02(土) 14:51:07.46
古臭い

158 :デフォルトの名無しさん:2013/11/02(土) 15:19:25.13
>>156
全部入りかよw

159 :デフォルトの名無しさん:2013/11/02(土) 15:47:52.00
>>155
実装中じゃないクラスなら、インテリセンス効くじゃんか
バカか

160 :デフォルトの名無しさん:2013/11/02(土) 16:27:22.71
>>156
どーせなら糞ハンガリアンも追加したら?

161 :デフォルトの名無しさん:2013/11/02(土) 16:45:32.69
this->は忘れてもコンパイル通るから
メンバの目印としては極めて悪質

162 :デフォルトの名無しさん:2013/11/02(土) 16:59:47.63
>>159
おちつけw

163 :デフォルトの名無しさん:2013/11/02(土) 17:01:10.31
ハンガリアンは嫌われるというけれども win32api の頭に :: つけているのが結構ありがたかったり‥‥

164 :デフォルトの名無しさん:2013/11/02(土) 17:01:11.63
先頭アンスコは忘れてもコンパイル通るから極めて悪質

165 :デフォルトの名無しさん:2013/11/02(土) 17:05:51.58
>>164
詳しく

166 :デフォルトの名無しさん:2013/11/02(土) 17:06:12.30
>>163
そ…それは…

167 :デフォルトの名無しさん:2013/11/02(土) 17:12:43.34
おいおい、スコープと混同かよ・・

168 :デフォルトの名無しさん:2013/11/02(土) 17:14:48.80
ぶわははは

169 :デフォルトの名無しさん:2013/11/02(土) 17:18:45.53
>>166-168
グローバルスコープ指定を流用するって悪癖だっけ?結構便利なんだけどなあ

170 :デフォルトの名無しさん:2013/11/02(土) 17:26:37.40
>>169
ハンガリアンとの関連も見いだせないし、流用の意味もわからないのですが…

171 :デフォルトの名無しさん:2013/11/02(土) 17:31:35.98
>>169
::のどこがハンガリアンだ?という話

172 :デフォルトの名無しさん:2013/11/02(土) 17:36:54.82
エイゴリアーーン

173 :デフォルトの名無しさん:2013/11/02(土) 17:38:09.57
それはロッキー

174 :デフォルトの名無しさん:2013/11/02(土) 17:49:26.74
先頭アンスコって付けていいんだっけ?

175 :デフォルトの名無しさん:2013/11/02(土) 17:51:40.69
良いともいえるし、悪いともいえる

176 :デフォルトの名無しさん:2013/11/02(土) 17:52:23.51
>>170-171
識別子の冒頭になにかつけて、なにかしら認知しやすくしよう、という心理が似ているなあと、いやまあアレですけど

177 :デフォルトの名無しさん:2013/11/02(土) 18:01:58.25
>>164
通らないだろw

178 :デフォルトの名無しさん:2013/11/02(土) 18:03:25.51
>>174
たしか小文字が続くならOKで大文字はアウト

179 :デフォルトの名無しさん:2013/11/02(土) 18:16:22.75
>>161
thisが参照なら・・・せめて参照なら・・・
this.foo
this->foo
この一体感の差は大きい

180 :デフォルトの名無しさん:2013/11/02(土) 18:17:15.73
>>178
だからm_の方が安全なんだよな

181 :デフォルトの名無しさん:2013/11/02(土) 18:18:11.96
17.6.4.3.2 Global names [global.names]
1 Certain sets of names and function signatures are always reserved to the implementation:
? Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.12) is reserved to the implementation for any use.
? Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

182 :デフォルトの名無しさん:2013/11/02(土) 18:19:46.44
うん、知ってる

183 :デフォルトの名無しさん:2013/11/02(土) 18:24:32.07
>>181
つまり、クラス内などの「グローバル以外のスコープ」なら、アンスコをどう使っても自由って事でオケ?

184 :デフォルトの名無しさん:2013/11/02(土) 18:25:21.11
m_hoge はださすぎ
hoge_ しっぽ生やす方がスマート

185 :デフォルトの名無しさん:2013/11/02(土) 18:25:41.06
>>179
this が参照だったら this 自体を変えれるんですか?this が左辺値だったら、だったらいいことがあるかも

186 :デフォルトの名無しさん:2013/11/02(土) 18:31:04.74
m_ってメンバ補完使うときに邪魔じゃね?
余計に打たないといけないじゃん

187 :デフォルトの名無しさん:2013/11/02(土) 18:32:11.41
foo_m
じゃーこういうのどうよ?

188 :デフォルトの名無しさん:2013/11/02(土) 18:34:17.79
>>183
グローバル名前ではであって、グローバル以外の名前のことは書いてないから
なんとも言えない。

>>184
winならm+ハンガリアンだろ

189 :デフォルトの名無しさん:2013/11/02(土) 18:34:23.24
しっぽ掴んでるように見えてきたじゃねーかw

190 :デフォルトの名無しさん:2013/11/02(土) 18:40:35.50
foo_qm

191 :デフォルトの名無しさん:2013/11/02(土) 18:57:52.53
補完の為にプレフィックスつけるって発想がもう古くね
開発環境の都合にコードを合わせるなんてばかばかしいだろう
そんなのはIDEで対応してくれよ

192 :デフォルトの名無しさん:2013/11/02(土) 19:02:51.57
>>183
自由じゃない
よく読め

193 :デフォルトの名無しさん:2013/11/02(土) 19:05:09.04
>>184
コンストラクタでメンバ変数の初期値を指定する場合
hoge_ = hoge; のようになるけど、
インテリセンスで両方出てくるから
hoge = hoge; や hoge_ = hoge_; になるバグを仕込む危険性があるので頭悪い

194 :デフォルトの名無しさん:2013/11/02(土) 19:10:02.97
>>191
ほとんどの人は「補完の為に」付けてるわけじゃないだろう。
ポストフィックスにしておけば補完のときにメンバ変数がまとまって出るから便利という程度で。

195 :デフォルトの名無しさん:2013/11/02(土) 19:11:52.25
メンバ変数である目印に付けてるな
色が変わるIDEもあるけど、そんなのばかりではないし

変数の寿命が分かりやすいから
見知らぬコードも読みやすい

196 :デフォルトの名無しさん:2013/11/02(土) 19:12:12.86
補完の時にメンバ変数がまとまってる利点ってなんだよ

197 :デフォルトの名無しさん:2013/11/02(土) 19:12:40.03
>>193
いくらなんでも警告出るだろ

198 :デフォルトの名無しさん:2013/11/02(土) 19:12:43.14
むしろ取り違えの危険性があるのでデメリットしか感じない

199 :デフォルトの名無しさん:2013/11/02(土) 19:13:33.04
>>193
コンストラクタで代入してんのかよ

200 :デフォルトの名無しさん:2013/11/02(土) 19:14:01.86
>>193
それは初期化ではなくて代入だC++erなら初期化と代入は区別すべきコンストラクタでの初期化はそのための構文を使え
結論:>>193は頭が悪い

201 :デフォルトの名無しさん:2013/11/02(土) 19:17:25.66
>>199-200
別にメンバ初期化子でも同じだけどな
hoge_(hoge_) にしても警告でない環境なんぞ普通にある
g++ 4.6.0 -std=c++0x -pedantic-errors -Wall で無警告

202 :デフォルトの名無しさん:2013/11/02(土) 19:19:00.38
じゃあ、m_hoge が一番良いのか。
かっこわるいけど

203 :デフォルトの名無しさん:2013/11/02(土) 19:19:26.39
格好は悪いけど、一番理にかなってる

204 :デフォルトの名無しさん:2013/11/02(土) 19:20:54.16
何でもかんでも警告出ると思ったら大間違いだ!

205 :デフォルトの名無しさん:2013/11/02(土) 19:21:44.31
>>201
それがなにか?
環境依存の話をされても
コンストラクタ内の記述で代入を使うのはどーかといっているだけだがな‥‥

206 :デフォルトの名無しさん:2013/11/02(土) 19:22:04.42
m_は醜すぎてコード見る気しなくなる

207 :デフォルトの名無しさん:2013/11/02(土) 19:23:35.76
>>205
話の流れ理解してる?
メンバ初期化子であっても同じ現象が起こるから
問題であることに変わりないって言ってるんだが

208 :デフォルトの名無しさん:2013/11/02(土) 19:25:57.57
_ ポストフィックスだと
メンバ変数かどうかの確認にワンテンポかかるんだよな
m_ は主張が強くて一瞬で分かる

209 :デフォルトの名無しさん:2013/11/02(土) 19:26:53.16
"m"にはメンバ変数以外の意味があるが
末尾_には意味が無い

末尾_を使うのがあらゆる場面でメンバ変数であることを約束できる唯一の方法

210 :デフォルトの名無しさん:2013/11/02(土) 19:27:10.53
組織、プロジェクト等の命名則に従えで良いだろ

211 :デフォルトの名無しさん:2013/11/02(土) 19:28:46.67
末尾 _ は構造体コンストラクタの引数につけることがあるわ

212 :デフォルトの名無しさん:2013/11/02(土) 19:30:01.23
"m_" プリフィクスをメンバ変数以外に付けてるの見た事ない
"_" ポストフィクスはそれ以外で付けてるのを見た事がある

m_ の勝利

213 :デフォルトの名無しさん:2013/11/02(土) 19:30:34.41
>>201
gcc 4.8.1なら出るぞハゲ
warning: 'Hage::hoge_' is initialized with itself [-Winit-self]

214 :デフォルトの名無しさん:2013/11/02(土) 19:30:48.03
>>213
環境依存の話はいいです

215 :デフォルトの名無しさん:2013/11/02(土) 19:32:20.84
出ない環境が1つでもあれば気をつけるべき
出る環境の事なんてどうでもいい

216 :デフォルトの名無しさん:2013/11/02(土) 19:32:25.29
>>207
話の流れとは関係ない
>>199-200 そもそもコンストラクタの記述に代入演算子を使うのが非常識と主張している
>>193 はC++の基礎からやり直すべき

217 :デフォルトの名無しさん:2013/11/02(土) 19:34:17.25
なんだアスペか
相手して損した

218 :デフォルトの名無しさん:2013/11/02(土) 19:35:47.21
>>217
アスペルガー批判をする暇があるならC++を勉強してくれ

219 :デフォルトの名無しさん:2013/11/02(土) 19:38:46.13
俺は、Attribute の a_hoge が良いと思う

220 :デフォルトの名無しさん:2013/11/02(土) 19:39:54.54
だからアルファベットを使うと何かと被るって

221 :デフォルトの名無しさん:2013/11/02(土) 19:44:14.77
C++の規格中でattributeは別の意味を持ってるしだめだな

222 :デフォルトの名無しさん:2013/11/02(土) 19:46:50.45
被るって本当に?

223 :デフォルトの名無しさん:2013/11/02(土) 19:48:08.02
_ だけでも被るんだなこれが

224 :デフォルトの名無しさん:2013/11/02(土) 19:49:18.60
キに
スる
ダけ
ムだ

225 :デフォルトの名無しさん:2013/11/02(土) 20:07:39.75
接頭接尾字は付けずに自動変数と紛らわしいときだけthis->を付けるという手も

226 :デフォルトの名無しさん:2013/11/02(土) 20:08:37.65
>>225
一貫性がないな〜

227 :デフォルトの名無しさん:2013/11/02(土) 20:12:37.33
パッと見でメンバ変数かどうか分からないと
知らないコードの動きを見る時に凄く不便なんだよ

228 :デフォルトの名無しさん:2013/11/02(土) 20:15:05.84
>>225
大きなクラスをつくらない、の掟を守ってる限りは実際それもありだと思う
しかし得てして実装は肥大化していくもので
メンバ変数がグローバル変数ばりのスコープの広さをもったとき破たんする

229 :デフォルトの名無しさん:2013/11/02(土) 20:17:43.82
メンバはIDEサイドで色分けしてほしいけど
それも一種の環境依存なのかな

230 :デフォルトの名無しさん:2013/11/02(土) 20:38:48.15
環境依存だな
メンバ変数の色分けは難しすぎる中年

231 :デフォルトの名無しさん:2013/11/02(土) 20:40:37.49
#define self (*this)

232 :デフォルトの名無しさん:2013/11/02(土) 20:57:56.06
全部にthis->つけてるんだけどだめなの?
たしかに横に長くなるけど確実じゃね?

233 :デフォルトの名無しさん:2013/11/02(土) 21:13:20.67
手間の割に確実性に欠ける

234 :デフォルトの名無しさん:2013/11/02(土) 21:14:41.93
this->全部付けられりゃいいけど、絶対忘れる所出てくるでしょ
そうなると気持ち悪い

235 :デフォルトの名無しさん:2013/11/02(土) 21:14:52.80
m_も確実性なんてないけどな

236 :デフォルトの名無しさん:2013/11/02(土) 21:15:23.49
>>232
何を確実にしたいんだ?

237 :デフォルトの名無しさん:2013/11/02(土) 21:23:40.38
>>235
this->と違って、定義のときだけ気をつけていればあとはコンパイラが保証してくれる。

238 :デフォルトの名無しさん:2013/11/02(土) 21:27:08.24
>>234
せめてthis必須のコンパイラオプションとかあればな

239 :デフォルトの名無しさん:2013/11/02(土) 21:27:25.13
m_はダメだろ
mから始まる関数名を補完しようとしたら、m_系が大量に出てくる

240 :デフォルトの名無しさん:2013/11/02(土) 21:31:58.02
打つ速度が遅ければね。
普通はちょうどいい感じに出てくる。

241 :デフォルトの名無しさん:2013/11/02(土) 21:45:55.02
>>240
補完の速度を遅くしすぎ?

242 :デフォルトの名無しさん:2013/11/02(土) 21:46:15.49
お前らが大好きな「exceptional C++」はhoge_だな
「C++ coding standards」もhoge_

m_hogeで有力な本とかライブラリって何よ

243 :デフォルトの名無しさん:2013/11/02(土) 21:47:18.84
自分のソース

244 :デフォルトの名無しさん:2013/11/02(土) 22:06:03.77
Googleのコーディング規約もfoo_
m_fooは、昔のVC++だな

245 :デフォルトの名無しさん:2013/11/02(土) 22:08:31.20
>>244
Googleのって例外の使用禁止とかのアレ?
だとしたら、アレって普通の人が参考にしていいようなもんなの?

246 :デフォルトの名無しさん:2013/11/02(土) 22:10:56.28
ポストフィクスと例外禁止に何の関係が?

247 :デフォルトの名無しさん:2013/11/02(土) 22:16:11.14
bulletはm_hoge
Qtはm_hoge
collada-domはhoge
ORGEはmHoge

結構いろいろあるな

248 :デフォルトの名無しさん:2013/11/02(土) 22:41:01.72
>>245
詭弁過ぎて話にならん

249 :デフォルトの名無しさん:2013/11/02(土) 22:45:27.29
アンスコかm_ルールのなんてチームで明文化されてればそれでいいだろ

250 :デフォルトの名無しさん:2013/11/02(土) 23:13:20.17
>>160
システムハンガリアンは当然詰め込むとして、アプリケーションハンガリアンも詰め込もうぜ。
this->m_dwyenHoge_

251 :デフォルトの名無しさん:2013/11/02(土) 23:17:49.13
>>192
えっと>>181に書いてある事をいくら読んだところで>>188以外の解釈に至らないんだがそれでオケ?

252 :デフォルトの名無しさん:2013/11/02(土) 23:21:49.43
>>251
「Global names」にはマクロも含むんだろ

253 :デフォルトの名無しさん:2013/11/02(土) 23:29:48.54
「なんとも言えない。」=「自由とも言えない。」≒「(自由である保証が無い限り)自由じゃない。」
じゃねーの?

254 :デフォルトの名無しさん:2013/11/02(土) 23:36:13.76
>>253
「なんとも言えない。」=「自由でないともいえない」≒「(自由でない保証が無い限り)自由である。」
の可能性はどこにいった?

255 :デフォルトの名無しさん:2013/11/02(土) 23:42:01.76
>>254
括弧の中に消えた。
安全側に倒そうと思ったら、そっちにはしたくないと思うんだ。

256 :デフォルトの名無しさん:2013/11/03(日) 00:28:37.99
>>251
箇条書きの最後にだけ "in the global namespace" って書いてあるでしょ。
ほかはそうじゃないって事。

257 :デフォルトの名無しさん:2013/11/03(日) 05:23:10.16
>>256
それとは別の項目に
・ローカル引数において〜の場合は前置/後置アンダースコアを使用しないこと
って書いてあっても>>181の文と何の矛盾もないだろ
>>251はそういうことを言ってるんだよ

258 :デフォルトの名無しさん:2013/11/03(日) 06:16:22.29
使う側にとって大事なのは安全である保証だけで安全でない保証はいらんだろ常識的に考えて

259 :デフォルトの名無しさん:2013/11/03(日) 07:02:00.62
_小文字はダメで _大文字はOKなんていう見た目にハッキリしないルールは守られない
_で始まる識別子は一律で禁止しとくのがメジャーだし合理的

260 :デフォルトの名無しさん:2013/11/03(日) 07:39:34.34
>>259
逆だろ

261 :デフォルトの名無しさん:2013/11/03(日) 07:42:31.52
>>260
結論は正解って事を自ら証明したんだろ。

262 :デフォルトの名無しさん:2013/11/03(日) 07:54:17.40
_大文字はprivateメンバ関数に使ってるな

263 :デフォルトの名無しさん:2013/11/03(日) 08:07:43.33
>>259
そう思うならそう言う言語を作って使えばいい。

264 :デフォルトの名無しさん:2013/11/03(日) 08:10:56.65
>>261
マッチポンプもいいとこだけどなー
一律禁止には同意

265 :デフォルトの名無しさん:2013/11/03(日) 10:40:52.90
global namespace
の意味わからないのか? 英語読めないバカは日本語の規格書読んどけ
- 下線で始まる名前は,大域的名前空間における名前として,処理系用に予約する。

266 :デフォルトの名無しさん:2013/11/03(日) 10:49:47.66
>>265
グローバル以外の名前空間ならアンスコ自由に使っても合法と言う事でオケ?

267 :デフォルトの名無しさん:2013/11/03(日) 10:49:50.93
>>265
何がいいたいのかわからんけど、(誰かを馬鹿にしたいだけ?)とりあえず訳間違えてるよ

268 :デフォルトの名無しさん:2013/11/03(日) 10:56:32.33
間違えてないだろ。
つか、誤訳だというなら日本工業標準調査会に指摘しろよ。

269 :デフォルトの名無しさん:2013/11/03(日) 10:59:05.15
>>257
>って書いてあっても
なんで規格読まずにそんなバカなこと言ってるの

270 :デフォルトの名無しさん:2013/11/03(日) 11:02:14.09
>>266
グローバルで(空間ではない。つまりどこでも)でアンダースコアで始まって大文字とアンダースコア二連続が予約されてる。
で、global namespaceでアンダースコアで始まる名前が予約されてる。

271 :デフォルトの名無しさん:2013/11/03(日) 11:18:46.48
規格の話はさ、こんな吹き溜まりでブチブチやるより、twitterで暇そうな規格策定者に呟いた方が早いと思うよ

272 :デフォルトの名無しさん:2013/11/03(日) 11:28:44.63
>>270
ん?ああ、そう言うことか
日本語でも勘違いしてたかもしれん
グローバルに予約しているから、当然ローカルでも使えんと言う事か

273 :デフォルトの名無しさん:2013/11/03(日) 11:29:52.09
んじゃ、>>267は規格翻訳者に「間違ってるよ」とtweetして、ここで報告する事。

274 :デフォルトの名無しさん:2013/11/03(日) 12:29:38.21
メンバ変数の_小文字はOKだから。
global namespaceがクラススコープも含ならその前の文要らないだろw
でも、この程度の文章も読めない人達はアンスコ始まりは一律に
禁止したほうが良いかもね。

275 :デフォルトの名無しさん:2013/11/03(日) 12:40:05.07
MSDNより:
Use of two sequential underscore characters ( __ ) at the beginning of an identifier,
or a single leading underscore followed by a capital letter, is reserved for C++ implementations in all scopes.
You should avoid using one leading underscore followed by a lowercase letter for names with file scope
because of possible conflicts with current or future reserved identifiers.

276 :デフォルトの名無しさん:2013/11/03(日) 12:40:50.76
>>274
読めない人達は禁止にしないでしょ、現にglobal namespace以外は好きにアンダースコア使っていいと勘違いしてた人も居るんだし。
読めない、読まない人達のために禁止にするんだよ。

277 :デフォルトの名無しさん:2013/11/03(日) 12:52:51.98
>>275
これが規格に書いてあれば勘違いしなかったわ

278 :デフォルトの名無しさん:2013/11/03(日) 13:02:20.55
規格ではダブルアンダースコア「を含む名前」が予約だけど、msdnではダブルアンダースコア「で始まる識別子」なんだな
なおさないとまずいだろう msdn

279 :デフォルトの名無しさん:2013/11/03(日) 14:38:05.75
>>278
why?
「Visual C++はダブルアンスコは先頭にしか使わないので
途中のダブルアンスコはVisual C++と衝突しませんよ」
という製品仕様の説明だろ?
規格上問題ない

280 :デフォルトの名無しさん:2013/11/03(日) 15:22:54.67
そうだそうだ

281 :デフォルトの名無しさん:2013/11/03(日) 17:10:36.45
17.6.4.3.2 グローバル名 [global.names]
1 特定の名前や関数のシグニチャは処理系により予約されている:
・ 2連続のアンダースコア __ かアンダースコアの次の大文字が続く名前 (2.12) はあらゆる用途において処理系により予約されている
・ 1つのアンダースコアで始まる名前はグローバルな前空間に所属する名前としては処理系により予約されている

マクロの制限は規格の別の所に書いてあったような・・・

282 :デフォルトの名無しさん:2013/11/03(日) 17:12:45.31
×グローバルな前空間
○グローバル名前空間

このへっぽこIMEめ・・・

283 :デフォルトの名無しさん:2013/11/03(日) 18:27:40.66
>>279
「Visual C++」じゃなくて「C++」と書いてあるじゃん

284 :デフォルトの名無しさん:2013/11/03(日) 18:43:41.49
本製品ではC++実装のために
ってことだろ

285 :デフォルトの名無しさん:2013/11/03(日) 19:32:51.64
> 本製品ではC++実装のために
> ってことだろ

MSはC++規格に追従していない
ダブルアンダースコアで始まる識別子が予約されていたのはC++98,
C++03ではダブルアンダースコアを含むと改訂されたが、MSは追従
せずに、そのまま残っている。
つまり件の記述は今は規格外となっているが、書かれた当時はC++標準
(ISO/IEC FDIS 14882)を指していたもの。「本製品のC++実装」の事ではない。

英語読めないなら日本語の規格読んでろ。

286 :デフォルトの名無しさん:2013/11/03(日) 19:55:52.14
>>269
これだけ読むと云々ってレスへのフォローだろ
落ち着けよ

287 :デフォルトの名無しさん:2013/11/04(月) 00:42:47.56
>>285
手元のC++98と同等と思われる文書を見る限り特に変わりは無いようだが、それはどこソースの情報だい?

288 :デフォルトの名無しさん:2013/11/04(月) 00:58:36.34
>C++標準(ISO/IEC FDIS 14882)を指していたもの。「本製品のC++実装」の事ではない。

>>285の脳内ではそうなのだろうけど
どうしてそこまで妄想の決め付けが激しいのか

289 :デフォルトの名無しさん:2013/11/04(月) 01:03:19.45
土方/hogeは妄想がコア

290 :デフォルトの名無しさん:2013/11/04(月) 01:06:58.73
だがそれがいい
そるこそがスレを加速させる力

291 :デフォルトの名無しさん:2013/11/04(月) 01:39:17.39
質問させてもらいます。

#include <iostream>
#include <fstream>
using namespace std;
void main(){
char* buffer;
int size;

ifstream in( "text.txt", ifstream::binary );

if( !in ){
cout << "ファイルがありません。" << endl;
}
else{
in.seekg( 0, ifstream::end );
size = static_cast<int>( in.tellg() );
in.seekg( 0, ifstream::beg );
buffer = new char[ size ];
in.read( buffer, size );
}
cout << buffer << endl;
}
text.txtの中身
こんにちは!

実行結果
こんにちは!■■■
となるのですが何故でしょうか…?

292 :デフォルトの名無しさん:2013/11/04(月) 01:41:24.81
文字列の愁嘆が無いんじゃね?

293 :デフォルトの名無しさん:2013/11/04(月) 01:54:49.98
詩的だな

294 :デフォルトの名無しさん:2013/11/04(月) 01:58:46.02
>>292
ありがとうございます。
buffer[size] = '\0';
といれれば解決しました。

しかし、"こんにちは。"は全角文字なので size = 12バイトとなりますが、
未確保のbuffer[12]に文字を入れても大丈夫でしょうか…?

何度も質問すみません…

295 :デフォルトの名無しさん:2013/11/04(月) 01:59:49.05
new char[ size + 1 ]

296 :デフォルトの名無しさん:2013/11/04(月) 02:04:20.42
>>287
| This is a PDF version of WG21/N1043, a draft standard for C++98,
| which was used as the 1997 Public review document.
って奴だな。

17.3.3.1.2 Global names [lib.global.names]
|1 Certain sets of names and function signatures are always reserved to the implementation:
| Each name that begins with an underscore and either an uppercase letter or another underscore (2.11) is
|reserved to the implementation for any use.
| Each name that begins with an underscore is reserved to the imple
で、お前の「手元のC++98と同等と思われる文書」とはどういう素性のものだ?

>>288
英語読めないバカは引っ込んでろよ。「本製品のC++実装」爆笑

297 :デフォルトの名無しさん:2013/11/04(月) 02:06:21.80
>>295
先ほど、それをやってみたのですが、
こんにちは!ヘ
となってしまいました…

298 :デフォルトの名無しさん:2013/11/04(月) 02:07:13.62
現在のコードです。

#include <iostream>
#include <fstream>
using namespace std;

void main(){
char* buffer;
int size;

ifstream in( "text.txt", ifstream::binary );

if( !in ){
cout << "ファイルがありません。" << endl;
}
else{
in.seekg( 0, ifstream::end );
size = static_cast<int>( in.tellg() );
size += 1;
in.seekg( 0, ifstream::beg );
buffer = new char[ size ];
in.read( buffer, size );
buffer[size] = '\0';
}
cout << buffer << endl;
}

299 :デフォルトの名無しさん:2013/11/04(月) 02:07:45.65
>>297
そうじゃなくて、size+1で13バイトを確保すれば
buffer[12]に文字を入れても大丈夫でしょ?
もっとちゃんと勉強してから手を付けたほうが良いレベル

300 :デフォルトの名無しさん:2013/11/04(月) 02:08:56.96
そのコードじゃ+1した意味ねーだろwww

301 :デフォルトの名無しさん:2013/11/04(月) 02:11:53.42
>>297
フじゃなくてヘが入るのは珍しいなってちょっと思った

どなたか終端文字つっこむとき '\0', L'\0', TEXT('\0') とかじゃくて
0つっこむ派のお仲間はいらっしゃいませんか?

302 :デフォルトの名無しさん:2013/11/04(月) 02:14:54.53
>>299
>>300

意味わかりました!
まず、buffer = new char[ size + 1 ];
で13バイト確保して、文字を読み込み。
13バイト目に'\0'を入れればいいんですね!

303 :デフォルトの名無しさん:2013/11/04(月) 02:16:08.68
>>302
理解してるとは思うんだけど12バイト目っていっとくれ

304 :デフォルトの名無しさん:2013/11/04(月) 02:17:44.88
いやそれは日本語としておかしい

305 :デフォルトの名無しさん:2013/11/04(月) 02:17:47.45
>>302
次はnew使わない書き方覚えな。
危なっかしくて見てられん

306 :デフォルトの名無しさん:2013/11/04(月) 02:18:29.18
0〜12だからですね!以後気を付けます!

307 :デフォルトの名無しさん:2013/11/04(月) 02:19:31.42
>>304
序数は0から数えるのが少なくともC/C++の文脈では暗黙の了解

308 :デフォルトの名無しさん:2013/11/04(月) 02:21:25.57
0バイト目って言ったらインデックス-1
イテレータでいうrendの位置だと思ってた

309 :デフォルトの名無しさん:2013/11/04(月) 02:22:12.85
あとそう、void main()がどっかの入門書の受け売りならいますぐその本燃やせ

310 :デフォルトの名無しさん:2013/11/04(月) 02:22:39.39
>>307はまず日本語を勉強すべき
インデックスが0オリジンなのと
「nバイト目」の日本語は別

311 :デフォルトの名無しさん:2013/11/04(月) 02:23:07.66
>>309
こういうやついるよね

312 :デフォルトの名無しさん:2013/11/04(月) 02:27:38.86
>>310
いやしかしメモリのオフセットを相手に伝えるとき1から表現するかお前?

313 :デフォルトの名無しさん:2013/11/04(月) 02:30:25.32
>>312
オフセットが0オリジンなのと
nバイト「目」とかn「番目」の日本語は別。
規格でもfirst element of the arrayという表現はあっても
0th elementという表現は無い

314 :デフォルトの名無しさん:2013/11/04(月) 02:31:05.19
0番とはいうが0番目はちょっと違和感があるかな
でも正直どっちでもいいし今回も通じたんだから突っ込むよなことではないだろと思う

315 :デフォルトの名無しさん:2013/11/04(月) 02:34:00.13
>>313
説き伏せられた
第一要素の、的な噛み砕いた文章になると確かにそうだな

316 :デフォルトの名無しさん:2013/11/04(月) 02:37:19.23
309がスルーされた件

317 :デフォルトの名無しさん:2013/11/04(月) 02:41:18.98
>>316
お前うざい

318 :デフォルトの名無しさん:2013/11/04(月) 02:41:58.13
>>316
>>311

319 :デフォルトの名無しさん:2013/11/04(月) 02:45:45.74
「p[〜]」を日本語で言う場合どう表現する?
「p大括弧〜大括弧閉じの要素」
「pのインデックス〜の要素」
「pのオフセット〜の要素」
「pの序数〜の要素」
「pプラス〜の要素」

320 :デフォルトの名無しさん:2013/11/04(月) 02:47:32.73
mainの戻り値考慮しない悪書はままあるからなぁ・・・
int main()でreturn無しとかreturn;とかorz

321 :デフォルトの名無しさん:2013/11/04(月) 02:48:53.46
メイン関数の掟
1.戻り値の型はintでなければならない
2.戻り値以外は処理系依存の形式
3.ただし処理系はint main()とint main(int, char **)の
 どちらも許可しなければならない
4.returnが無い場合、0を返したと見なされる

322 :デフォルトの名無しさん:2013/11/04(月) 02:54:47.49
int main()
try
{
throw "うんこ";
}
catch(...)
{
}  ←コレもreturn 0とみなされるの?

323 :デフォルトの名無しさん:2013/11/04(月) 03:00:59.79
>>319
「pのn番目」かなぁ。nは0から。あれ?
口頭だとぴーぜろ、ぴーいち

324 :デフォルトの名無しさん:2013/11/04(月) 03:16:20.34
return ← これなんて読むの?

325 :デフォルトの名無しさん:2013/11/04(月) 03:17:35.65
レットラン

326 :デフォルトの名無しさん:2013/11/04(月) 03:21:07.90
リトゥーム

327 :デフォルトの名無しさん:2013/11/04(月) 03:24:35.32
なんでたまにretrunになるんだろう
retrまで左手でタイプして右手が追い付かないのか

328 :デフォルトの名無しさん:2013/11/04(月) 04:30:42.83
>>327
左右の指を交互に1本ずつ折り伸ばししていくのが意外と難しいということ

329 :デフォルトの名無しさん:2013/11/04(月) 05:03:07.23
>>313
普通に0番目の要素とか使ってるぞ
そして、0以外の場合は必ず0オリジンか1オリジンか添えてる

330 :287:2013/11/04(月) 08:14:17.51
>>296
先頭ページに"ISO/IEC 14882 First edition 1998-09-01"とあるな。
N1043ってことは1997/01頃のドラフトだから、そこから規格成立までの間に変わったって事か。

ってことで検索したらN1111にNBコメントへの対応として記録があったよ。
> Change [lib.global.names] from:
> ? Each name that begins with an underscore and either an uppercase letter or another underscore (2.11) is
> reserved to the implementation for any use.
> To:
> ? Each name that contains a double underscore (__) or begins with underscore and an uppercase letter
> (2.11) is reserved to the implementation for any use
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1111.ps

331 :デフォルトの名無しさん:2013/11/04(月) 17:25:35.22
>>327
同時押し状態が存在するとキーボードによっては状態を正しく認識できない

332 :デフォルトの名無しさん:2013/11/04(月) 18:17:48.80
「プログラムの女神」 美しすぎるプログラマーが話題に!! 職場にいたら仕事が手に付かないレベル! | International速報
http://lolen235.blog.fc2.com/blog-entry-816.html

333 :デフォルトの名無しさん:2013/11/04(月) 18:46:31.61
俺の書いたコードのほうが美しいな

334 :デフォルトの名無しさん:2013/11/04(月) 19:53:01.64
仕事手につかないどころか、捗っちゃうよ
いいとこ見せたい

335 :デフォルトの名無しさん:2013/11/04(月) 19:57:02.83
美しすぎない 普通

336 :デフォルトの名無しさん:2013/11/04(月) 20:04:22.80
美しくても意味がない

337 :デフォルトの名無しさん:2013/11/04(月) 20:10:58.97
コードの美しさの方が大事

338 :デフォルトの名無しさん:2013/11/04(月) 20:14:55.25
でもこの人ハンガリアン記法らしいよ

339 :デフォルトの名無しさん:2013/11/04(月) 20:29:09.31
かわいい子が汚いコード書いてるとか、興奮するじゃないか

340 :デフォルトの名無しさん:2013/11/04(月) 20:37:53.83
>>339
美しすぎるうんコードなんて誰も注意できないな。最恐・・・

341 :デフォルトの名無しさん:2013/11/04(月) 20:52:56.83
>>340
バカだなあ
叱りつける→優しくする→ギシアンだろ

342 :デフォルトの名無しさん:2013/11/04(月) 21:49:28.48
疑心暗鬼ですね。

343 :デフォルトの名無しさん:2013/11/04(月) 23:29:45.83
>>339
いいねえ実は引き出しの中はごみためだったとか

344 :デフォルトの名無しさん:2013/11/05(火) 01:57:33.34
メソッドの呼び出しについて質問があります。
下記のTestクラス内で、値を返す int getNum() const と、参照を返す int& getNum() を定義したのですが、
int getNum() const が呼ばれることはあるのでしょうか。
呼ばれる場合はどのような処理になるのかもご教授いただきたいです。よろしくお願いします。

class Test
{
public:
 int num;

public:
 int getNum() const { return num; }
 int& getNum() { return num; }
};

345 :デフォルトの名無しさん:2013/11/05(火) 04:59:50.04
>>344
Test t;
static_cast<const Test>(t).getNum();

というかそれ戻り値が違うからオーバーロードされてるわけじゃなくて(C++では出来ない)
const/非constメンバだからじゃん

346 :344:2013/11/05(火) 06:09:17.38
>>345
呼ぶことができました!ありがとうございます。
でもこれってオーバーロードされてないんですか?

347 :デフォルトの名無しさん:2013/11/05(火) 06:25:05.09
>>345-346 これもオーバーロードだよ。暗黙の this ポインタも引数とみなされる形で。

348 :デフォルトの名無しさん:2013/11/05(火) 06:38:04.94
int&f(Test&a){return a.getNum();}

349 :デフォルトの名無しさん:2013/11/05(火) 06:39:59.87
>>345
普通にconst Test t;で良くない?

>>346
constメンバー関数としてオーバーロードされてる。
呼ぶクラスがconstの場合そっちが呼ばれる
>>348
返り値の型参照にしちゃだめだろ…

350 :デフォルトの名無しさん:2013/11/05(火) 06:40:45.18
わからんか?本物のバカだな

351 :デフォルトの名無しさん:2013/11/05(火) 06:46:14.68
>>350
毎日張り付いてるクソニート

352 :344:2013/11/05(火) 06:54:07.31
const Test test1; test1.getNum();
↑でconstメンバ関数の呼び出しを確認しました。
constメンバ関数の必要性がやっと理解できました...
ありがとうございました!

353 :デフォルトの名無しさん:2013/11/05(火) 07:05:18.37
>>349
> 返り値の型参照にしちゃだめだろ…
自己レス
参照でも問題無かった。
constメンバー関数をいかに呼ぶかの話だったから引数にconst付いてると勝手に空目してた

354 :デフォルトの名無しさん:2013/11/05(火) 12:07:11.30
getNumという名前に結びつけられた関数の趣旨が
constと非constの違いで大きく変わるのが良くない

355 :デフォルトの名無しさん:2013/11/05(火) 12:58:33.20
本筋ではないが名前と機能の関係以前に
メンバ変数への参照を返すメンバ関数はメンバ変数に直接アクセスするのとどう違うのか?って話になるな

356 :デフォルトの名無しさん:2013/11/05(火) 13:01:27.10
外部から変更される可能性があるよってフラグを立てるくらい

357 :デフォルトの名無しさん:2013/11/05(火) 13:13:21.92
>>355
あとで内部ポインタ化と遅延評価が可能。

358 :デフォルトの名無しさん:2013/11/05(火) 13:30:48.32
全くわからん。具体的な例を示してくれんか

359 :デフォルトの名無しさん:2013/11/05(火) 13:32:38.82
たくさんのクラスから呼ばれるString型の値範囲チェックルーチンを作りたい。
C言語的なファイルにルーチンを置いておいて、各クラスから呼び出すようにすると
「それは手続き型だ」って言われるんだけど、オブジェクト指向的にするには、
文字列チェックのルーチンはどこに置けばいいの?

360 :デフォルトの名無しさん:2013/11/05(火) 13:36:22.51
「それは手続き型だ」って言うJaバカに聞けば?

361 :デフォルトの名無しさん:2013/11/05(火) 13:42:25.56
>>358
class NewsArticle {
Datetime& dt_;
Datetime& dt() { return dt_; }

ってやっておけば、あとから

class NewsArticle {
time_t t_;
Datetime* dt_;
Datetime& dt() { if(!dt_)dt_=new Datetime(t_); return *dt_; }

と変更することだって可能だろ。

362 :デフォルトの名無しさん:2013/11/05(火) 13:49:09.83
>>360
聞けない環境なのだ。

363 :デフォルトの名無しさん:2013/11/05(火) 14:32:21.93
>>361
何で生なの?

364 :デフォルトの名無しさん:2013/11/05(火) 14:45:21.78
>>363
どれが生?

365 :デフォルトの名無しさん:2013/11/05(火) 15:09:18.93
生ポ

366 :デフォルトの名無しさん:2013/11/05(火) 15:43:41.60
>>363
例なんだからそんな枝葉は本質じゃないような

367 :デフォルトの名無しさん:2013/11/05(火) 16:06:20.43
これって、どこがスレッドセーフなの?どこで同期とってるの?
http://d.hatena.ne.jp/FunnyBunnyDizzy/20081003/1223038421

368 :デフォルトの名無しさん:2013/11/05(火) 16:13:50.62
>>367
だめだそれは

369 :デフォルトの名無しさん:2013/11/05(火) 16:18:33.37
「食わせる」なんて言葉使うやつって初心者が多いよなhw

370 :デフォルトの名無しさん:2013/11/05(火) 16:18:39.08
全然スレッドセーフじゃないよね?

371 :デフォルトの名無しさん:2013/11/05(火) 16:30:52.69
「食わせ者」なんだよきっと

372 :デフォルトの名無しさん:2013/11/05(火) 16:45:26.38
メモリーイーター「mallocおいしいです」

373 :デフォルトの名無しさん:2013/11/05(火) 16:46:30.49
>>367
5年も前の糞日記だ。ほっといてやれ
黒歴史放置されるとかなり迷惑だけどな

374 :367:2013/11/05(火) 16:47:12.93
了解、ありがとう。

375 :デフォルトの名無しさん:2013/11/05(火) 16:52:36.11
>>367
もうこれでアウト。
> * Logger::info("いんふぉ", __FILE__, __LINE__);
> * Logger::debug("でばっぐ", __FILE__, __LINE__);
> * Logger::warn("わーん", __FILE__, __LINE__);
> * Logger::error("えらー", __FILE__, __LINE__);

376 :デフォルトの名無しさん:2013/11/05(火) 19:39:07.38
>>361
ああ
> 内部ポインタ化と遅延評価
ってそういう意味でいってたのか

377 :デフォルトの名無しさん:2013/11/05(火) 19:51:25.35
>>375
そんなゆうたらお前
> * Logger::configure("./logger.ini");
カレントディレクトリについて一通りの知識があるのかも微妙やで

378 :デフォルトの名無しさん:2013/11/05(火) 21:32:32.75
ロガーなのに自分のは
> // 例外はスルー

クッソワロタ
でもこれ以上黒歴史さらすのはかわいそうになってきた

379 :デフォルトの名無しさん:2013/11/05(火) 21:35:45.66
ライブラリーの中でロガーは最大の堅牢さを求められる

380 :デフォルトの名無しさん:2013/11/05(火) 21:46:20.10
平時にファイル閉じっぱなしのロガーライブラリーは…

アプリの方でEMFILE ENFILEを起こしたとき、
その旨を記録しようとロガーを呼び出すと、
十中八九ロギングが失敗する。
送り先がsyslogでも同じ。

事前にダミーでルートディレクトリを開いて、非常用の数を確保しておけ。
その準備をしていないロガーライブラリーは、全部ゴミ。

381 :デフォルトの名無しさん:2013/11/05(火) 21:50:23.33
>>375
そこは耐えたが LOTATE_SIZE と LOTATE_GENERATION はさすがにダメだった。

382 :デフォルトの名無しさん:2013/11/05(火) 22:00:55.91
>>379
異常事態になったときのLogだめぽじゃだめだからな

383 :デフォルトの名無しさん:2013/11/05(火) 23:19:36.59
shared_ptrってマルチスレッドで使っても大丈夫なのかしら
なんかタイミング悪く2重開放とか2重確保とかしちゃったりいない?

384 :デフォルトの名無しさん:2013/11/05(火) 23:24:30.18
>>383
atomic保証

385 :デフォルトの名無しさん:2013/11/05(火) 23:29:59.52
間違えて途中で送ってしまったけど、内容的に十分だった。

標準仕様の方で、参照カウンタのatomicityは保証されてるから、MTSafeだよ。
ただし、中身のすげかえは別。

386 :デフォルトの名無しさん:2013/11/05(火) 23:55:07.87
>>385
ほほう
すげかえと言いますと?

387 :デフォルトの名無しさん:2013/11/06(水) 00:01:31.96
shared_ptrの参照先はスレッドセーフとは限らない(テンプレート引数の型がスレッドセーフに実装されているかに依る)

388 :デフォルトの名無しさん:2013/11/06(水) 00:06:20.11
>>387
それがすげかえの意味ですか?

389 :デフォルトの名無しさん:2013/11/06(水) 00:12:30.05
>>382
ロガー弱いと障害発生後に
「ログが残ってないので調査不可能。原因不明のまま調査終了」
となって、後が面倒だよなー

それをやって客にブチキレられて
ボーナス無くした部署があってだな
あれ以来ロガーだけはガチガチの社内ライブラリに頼ってる我が現場

390 :デフォルトの名無しさん:2013/11/06(水) 01:21:43.09
それは悲惨だなあ
でも、それ以前にお客さんブチ切れ寸前だったんだと思うよ(笑)

391 :デフォルトの名無しさん:2013/11/06(水) 01:26:00.23
「ログが残ってないので調査不可能」なんて言った時点でブチキレられるのは当然

392 :デフォルトの名無しさん:2013/11/06(水) 01:33:30.75
>>389
そういうときは嘘でも理由つけて"解決"するもんだ
ああ、ダメだって解っているさ。でも現場なんてそんなもん

393 :デフォルトの名無しさん:2013/11/06(水) 09:08:45.56
でも、彼は何故スレッドセーフなどと思ったのだろう?

394 :デフォルトの名無しさん:2013/11/06(水) 09:24:21.38
doxygenのメソッドコメントとかって、ヘッダーファイルと実装(cpp)、どっちに書くのが正しい?

395 :デフォルトの名無しさん:2013/11/06(水) 09:31:18.52
>>394
ヘッダの方が統一感あって良い気がする
ヘッダだけで完結出来るしね

が、俺はcppの方にできる限り書いてる

396 :デフォルトの名無しさん:2013/11/06(水) 09:35:52.07
ヘッダに書きたいけど実装に書いた方が楽なんだぁ
サマリーだけヘッダに書く手もあるけど

397 :デフォルトの名無しさん:2013/11/06(水) 09:46:24.69
ヘッダの文章をちょっと書き換えただけで、全部リコンパイル

398 :デフォルトの名無しさん:2013/11/06(水) 09:54:18.78
>>394
面倒だから実装に書いちゃってるけど、ヘッダに書くのが正しい気がする

399 :デフォルトの名無しさん:2013/11/06(水) 09:56:24.60
結局QT形式とjavadoc形式、どっちが正義なの?

400 :デフォルトの名無しさん:2013/11/06(水) 11:04:12.06
アスタリスク書いてられんからQt

401 :デフォルトの名無しさん:2013/11/06(水) 12:50:36.57
>>394
俺はcppのほうだな
ヘッダは画面に収めて俯瞰したいのと
日本語(ascii範囲外)の文字を入れたくないから
コメントを全部英語で書ける人ならいいが

402 :デフォルトの名無しさん:2013/11/06(水) 13:35:41.38
>>401
ASCII範囲外の文字が入っていたら、どういう不都合があるの?

403 :デフォルトの名無しさん:2013/11/06(水) 13:57:52.05
最近のdoxygenって.NETのxmlコメントにも対応してるの?

404 :デフォルトの名無しさん:2013/11/06(水) 19:45:04.49
>>402
//コメントで改行した末尾文字がシフトJISで0x5cだと別環境で悲惨な事になる

405 :デフォルトの名無しさん:2013/11/06(水) 19:49:43.34
へー、doxgenって今時英語以外に対応できないウンコなんですね

406 :デフォルトの名無しさん:2013/11/06(水) 19:52:14.67
この板ではうんこはQzの代名詞なので別の表現にしなさい

407 :デフォルトの名無しさん:2013/11/06(水) 19:52:43.97
>>404
それはヘッダーからcppファイルに移すことで解決するの?

408 :デフォルトの名無しさん:2013/11/06(水) 19:52:48.07
>>402
VCのリソースコンパイラがUTF-8に対応してないとか
純ASCIIだったら気にする必要がない

409 :デフォルトの名無しさん:2013/11/06(水) 19:54:45.30
SJIS問題はCP932で解決するんだっけ

410 :デフォルトの名無しさん:2013/11/06(水) 20:19:10.45
世界で最も不合理なコードだな

411 :デフォルトの名無しさん:2013/11/06(水) 20:31:23.63
>>410
ほんと誰が考えたんだろうね。この糞文字コード

412 :デフォルトの名無しさん:2013/11/06(水) 20:54:30.27
業務の環境からSJIS消えて、早くも10年

いや、そんなに経ってないか

mysqlでは一通りのトラブルに遭遇させていただきました
libmysqlclientのわずかなバージョンの違いがSJIS扱いをバグらせたり

413 :デフォルトの名無しさん:2013/11/06(水) 21:03:23.35
auto i = std::equal_range( first, last, val );
でvalが存在しない場合の挙動で
i.first == last && i.second == last
であるのは保証されてますか?

414 :デフォルトの名無しさん:2013/11/06(水) 21:33:57.63
lower_bound と upper_bound のペアが返されるんだから i.first == i.second だけ
val が挿入されるべき位置

415 :デフォルトの名無しさん:2013/11/06(水) 21:41:33.78
>>413
ありえない

416 :デフォルトの名無しさん:2013/11/06(水) 21:52:25.79
じゃあvalが一番大きい時はlastになりますか?

417 :デフォルトの名無しさん:2013/11/06(水) 22:09:29.10
>>413
http://www.cplusplus.com/reference/algorithm/equal_range/

The behavior of this function template is equivalent to:

template <class ForwardIterator, class T>
pair<ForwardIterator,ForwardIterator>
equal_range (ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator it = std::lower_bound (first,last,val);
return std::make_pair ( it, std::upper_bound(it,last,val) );
}

これで考えてみればわかるだろ

418 :デフォルトの名無しさん:2013/11/06(水) 22:13:02.60
>>416
http://ideone.com/CToAnG

419 :デフォルトの名無しさん:2013/11/06(水) 22:19:12.75
良く見たらC++11あった

>>416
こっちで
http://ideone.com/XCoEww

420 :デフォルトの名無しさん:2013/11/06(水) 22:52:54.09
>>410
UTFの方が、夫々の言語体系を無視してるってだけの話。

421 :デフォルトの名無しさん:2013/11/07(木) 01:30:08.19
しかし半角カナなんてものを1バイト領域に残す価値なんて
S-JIS策定当時からあったのだろうか

422 :デフォルトの名無しさん:2013/11/07(木) 01:34:23.39
互換性のために必要だったんだろ。

423 :デフォルトの名無しさん:2013/11/07(木) 16:17:06.48
コピーコンストラクタで、constメンバを初期化するのって、どうすればいいの?

424 :デフォルトの名無しさん:2013/11/07(木) 16:32:30.80
>>423
http://ideone.com/vdOkRp

425 :デフォルトの名無しさん:2013/11/07(木) 16:36:27.81
MS-DOSの日本語版作るのに急いでやんなきゃならなかったんだろ

426 :デフォルトの名無しさん:2013/11/07(木) 16:38:54.36
むしろ既存のデータと互換性のない文字コードに当時何の価値が

427 :デフォルトの名無しさん:2013/11/07(木) 16:41:47.03
>>524
コピーコンストラクタにもイニシャライザを書けるのか!ありがとう!

428 :デフォルトの名無しさん:2013/11/07(木) 16:51:09.40
>>426
同時期にでけたEUC-JPが種々の問題をスルーしてることを考えたら
糞っぷりには何の疑いもない

429 :デフォルトの名無しさん:2013/11/07(木) 16:53:19.38
すでに1バイトカナのデータが蓄積されていて
それを2バイトに変更するとプログラムの修正を一気に行わねばならず
また漢字に3バイト使えるほど記憶容量の余裕が無かった
ってとこかな

430 :デフォルトの名無しさん:2013/11/07(木) 16:55:02.96
EUC-JPってDECだっけ
カナのデータなんて無かったんじゃないの

431 :デフォルトの名無しさん:2013/11/07(木) 16:56:12.92
>>428は会話のキャッチボールができないコミュ障

432 :デフォルトの名無しさん:2013/11/07(木) 16:56:31.34
あったよ、3バイトで表現

433 :デフォルトの名無しさん:2013/11/07(木) 17:03:22.58
>同時期にでけたEUC-JP
え?
そう思ってるのはシフトJISをShift_JISにすり替える安岡信者だけでしょ

434 :デフォルトの名無しさん:2013/11/07(木) 17:57:17.06
>>432
3バイトカナは知らない人も多かった
そもそもEUCで3バイトはあり得ない!
とか言われたこともある
辛い記憶が

435 :デフォルトの名無しさん:2013/11/07(木) 21:18:32.87
3バイトは奇数アドレスでアクセスするとバスエラーになるハードウェアがあるからじゃね?
つまり3バイトでpack出来ないマシンがあるわけだ

だから「本当は4バイトもいらないんだけど、1バイト無駄になるなら4バイトにしてしまえ」と
言う事っしょ

436 :デフォルトの名無しさん:2013/11/07(木) 21:23:06.16
>>435
何言ってんだ?

437 :デフォルトの名無しさん:2013/11/07(木) 21:31:02.78
>>435
そりゃ3バイト固定長文字コードがもしあればの話だ
可変長文字コードじゃどうあっても1バイトアクセス

…3バイト固定長って内部表現としてそう悪くないんじゃないかと思うんだけどどうよ
弄るのも計るのも楽だし、UCS-4ほど嵩張らないしさ

438 :デフォルトの名無しさん:2013/11/07(木) 21:54:01.23
>>435
インテルx86は奇数アドレスに多バイト整数アクセスしても
バスエラーにはならないが、やる奴はシロウト。
まっとうなプログラマーはそんなKUSOで
動作未定義でクソ遅いコードは書かない。

439 :デフォルトの名無しさん:2013/11/07(木) 21:55:02.23
>>436
packの意味も分からないって・・・
だから3バイト毎に配列作ったとするよ、一つ置きに奇数アドレスからのアクセスになるだろ?
まだわかんねーのか

440 :デフォルトの名無しさん:2013/11/07(木) 21:55:55.39
>>438
いたずらにバスサイクル増やすだけだしな

441 :デフォルトの名無しさん:2013/11/07(木) 22:05:23.10
>>435
ワードが奇数アドレスにあっちゃダメってのはわかるけど、単に奇数アドレスアクセスでエラーになってたらどうすんだよ?

442 :デフォルトの名無しさん:2013/11/07(木) 22:08:53.34
>>435
頭悪い発言させるスレ立ててそっちでやってくれ

443 :デフォルトの名無しさん:2013/11/07(木) 22:10:54.80
void foo(int* begin, int* end);
って関数にstd::vector<int> v のbeginとendを入れたいときどう書いてる?
foo(&*v.begin(), &*v.begin() + v.size()); は悲しくなる。

444 :デフォルトの名無しさん:2013/11/07(木) 22:15:08.22
>>443
一番素直な書き方じゃね?
ただ要素数ゼロの時がまずいような

445 :デフォルトの名無しさん:2013/11/07(木) 22:18:46.55
じゃあ
if ( v.size() == 0 )
throw "unko";
foo(&v[0], &v[0] + v.size());

446 :デフォルトの名無しさん:2013/11/07(木) 22:20:16.44
まずくないだろ
foo内で for ( auto it = begin; it < end; ++it ) ってなってると思われる。

447 :デフォルトの名無しさん:2013/11/07(木) 22:27:00.17
要素が空のときv.begin()を逆参照したらいかんだろ
fooに渡す以前の話

448 :デフォルトの名無しさん:2013/11/07(木) 22:27:00.99
>>443
foo(&v.front(), &v.back());

449 :デフォルトの名無しさん:2013/11/07(木) 22:31:56.73
foo(v.data(), v.data() + v.size());

450 :デフォルトの名無しさん:2013/11/07(木) 22:37:26.91
>>448
空の時にfrontは呼び出してはいけませぬ

451 :デフォルトの名無しさん:2013/11/07(木) 22:38:40.01
呼び出すとどうなるの?ケツから味噌汁でも出てくるの?

452 :デフォルトの名無しさん:2013/11/07(木) 22:39:31.64
yes

453 :デフォルトの名無しさん:2013/11/07(木) 22:40:14.23
そもそもbackはendの代わりにならないんですがそれは・・・

454 :デフォルトの名無しさん:2013/11/07(木) 22:40:51.04
んなこたーみんなわかってる

455 :デフォルトの名無しさん:2013/11/07(木) 22:44:06.29
fooのインタフェースを変更する

456 :デフォルトの名無しさん:2013/11/07(木) 22:45:37.38
vector::iterator だけを対象にしてるわけじゃないだろ

457 :デフォルトの名無しさん:2013/11/07(木) 22:51:38.12
>>445
俺これ嫌い
> if ( v.size() == 0 )

458 :デフォルトの名無しさん:2013/11/07(木) 22:53:54.98
_____________________>>435
            ∩_ 
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /

459 :136:2013/11/07(木) 23:05:25.41
base()だめなの?
ポインタとは限らないから?

460 :デフォルトの名無しさん:2013/11/07(木) 23:06:53.23
別スレのが出てしまった。忘れてくれ。

foo( v.begin().base(), v.end().base() );

461 :デフォルトの名無しさん:2013/11/07(木) 23:16:08.24
>>459-460の精神構造がやばい
baseってなんだよ

462 :デフォルトの名無しさん:2013/11/07(木) 23:31:45.13
素直ならこうだろ
foo(&v[0], &v[v.size()-1]);

463 :デフォルトの名無しさん:2013/11/07(木) 23:32:50.61
>>461
gnu-stlの実装依存だった。
revervse-iteratorだけが持ってる奴とは知らなかった。

464 :デフォルトの名無しさん:2013/11/07(木) 23:40:07.97
つまりgnu何とかとやらは
普通のイテレーターとreverseで
base()の意味が異なる糞という訳ですね。

465 :デフォルトの名無しさん:2013/11/07(木) 23:40:44.20
GNUが事実上の標準。
C++規格は紛い物。

466 :デフォルトの名無しさん:2013/11/07(木) 23:48:44.46
>>464
普通のイテレータに、勝手につけてるだけだと思う。
意味が異なるわけじゃない。

467 :デフォルトの名無しさん:2013/11/07(木) 23:55:50.36
まさかGNU何とかとやらは
vector<unko>::rbegin()で返されるイテレーターのbase()がunkoになるのでしょうか

468 :デフォルトの名無しさん:2013/11/07(木) 23:57:07.82
>>439
頭おかしいのか?
packの意味が分からないなんて話がどこから出てきてる?

469 :デフォルトの名無しさん:2013/11/07(木) 23:58:22.08
>>462
範囲の一番後ろの一つさらに後ろをendにするんだから
それじゃおかしいだろ

470 :デフォルトの名無しさん:2013/11/08(金) 00:01:56.26
どっちにしろvectorが空のとき参照はずしがダメだってならどれもNGだな

471 :デフォルトの名無しさん:2013/11/08(金) 00:02:59.61
>一番後ろの一つさらに後ろをendにする
>>469の脳内ではそうなのだろう
>>443はそんなこと一言も言っていない

472 :デフォルトの名無しさん:2013/11/08(金) 00:05:26.79
>>471
コード上はそうなってるが。

473 :デフォルトの名無しさん:2013/11/08(金) 00:07:18.67
>>471
いやいや、言ってるし

474 :デフォルトの名無しさん:2013/11/08(金) 00:07:59.30
>>467
どういう流れで実体が返ると思ったの

475 :デフォルトの名無しさん:2013/11/08(金) 00:08:06.93
参照はずしって何だ?
ポインタとか配列とか、使わなさすぎて忘れちゃったか?

476 :デフォルトの名無しさん:2013/11/08(金) 00:09:41.36
まさかgnu何とかとやらは
vector<unko>::rbegin()で返されるイテレーターのbase()がunko*型になるのでしょうか

477 :デフォルトの名無しさん:2013/11/08(金) 00:10:47.40
>>443
> void foo(int* begin, int* end);
> って関数にstd::vector<int> v のbeginとendを入れたいときどう書いてる?

template<typename T> void foo(T begin,T end);

> foo(&*v.begin(), &*v.begin() + v.size()); は悲しくなる。

foo(v.begin(), v.end());

478 :デフォルトの名無しさん:2013/11/08(金) 00:12:36.15
参照はずし?逆参照?

479 :デフォルトの名無しさん:2013/11/08(金) 00:13:07.90
>>477
void foo(int* begin, int* end); って関数

480 :デフォルトの名無しさん:2013/11/08(金) 00:21:04.84
>>476
GNUはISO規格より自分が正しいと盲信する処理系だからきっとbase()の仕様が違う

481 :デフォルトの名無しさん:2013/11/08(金) 00:30:33.38
>>479
それとvectorは相性が悪いな

482 :デフォルトの名無しさん:2013/11/08(金) 00:33:48.23
void foo(int* begin, int* end);

void foo(vector<int>::iterator begin, vector<int>::iterator end)
{
if(begin!=end)foo(&*begin,&*end);
}

foo(v.begin(), v.end());

483 :デフォルトの名無しさん:2013/11/08(金) 00:35:52.88
>>476
試してみた。
vectorのrbegin()で取ってきたのは、iteratorが返ってくる。
型指定してポインタ渡して生成すると、ポインタが返ってくる。
C++03の仕様も見てきたけど、中身返すだけだからこれで問題ないはず。

484 :デフォルトの名無しさん:2013/11/08(金) 00:37:25.73
無理にiterator使おうとするから変になる
operator[]が一番直感的じゃないか

485 :デフォルトの名無しさん:2013/11/08(金) 00:43:01.78
>>483
base()が返すのは中身じゃなくてイテレータじゃないのか?

>>482
それはbegin==endの時に元のfooと挙動が変わるからNG

486 :デフォルトの名無しさん:2013/11/08(金) 00:47:46.20
普通begin==endなら何もしないだろ?
 foo(&*v.begin(), &*v.end());
でいいだろ

487 :デフォルトの名無しさん:2013/11/08(金) 00:48:46.58
普通って何だ

488 :デフォルトの名無しさん:2013/11/08(金) 00:52:30.68
普通っていうかfooはそうなっているべきだろ
begin==endは空という意味以外にありえないと思うけど

489 :デフォルトの名無しさん:2013/11/08(金) 00:53:06.11
>>486にプログラムの改修を任せると
妄想で勝手な修正をするので危険

490 :デフォルトの名無しさん:2013/11/08(金) 00:54:01.38
>>485
中身かつイテレータが返されるようだから、
「中身じゃなくて」は間違いで、「イテレータが返される」は正しい。
仕様にはポインタもイテレータとして扱えることが保証されると書いてある。

491 :デフォルトの名無しさん:2013/11/08(金) 00:54:33.36
&*v.end()
って大丈夫なんだっけ?

492 :デフォルトの名無しさん:2013/11/08(金) 00:59:04.92
ダメれす

493 :デフォルトの名無しさん:2013/11/08(金) 01:00:00.45
>>489
じゃあ空の時にどうやってfooを呼び出すっていうのよ?
fooのbegin==end時の振る舞いが明記されていない様な糞環境なら
482でいいだろ

494 :デフォルトの名無しさん:2013/11/08(金) 01:00:02.49
>>490
>仕様にはポインタもイテレータとして扱える
扱えたら>>460が正しいコードだと言いたいのかおまいは

495 :デフォルトの名無しさん:2013/11/08(金) 01:04:27.19
>>493
おまえアホか
要素数1でbegin()とbegin()を渡されたらどうすんだ
第一、中身が不明だからこそ
元の挙動が最低限保持されるように修正するんだろjk

496 :デフォルトの名無しさん:2013/11/08(金) 01:04:43.73
beginとendを渡される関数は
「begin==endのときは何もしない」が正しい設計

497 :デフォルトの名無しさん:2013/11/08(金) 01:09:22.00
>>496
begin==endの時に出すようにしていたログが出なくなりました
とか
begin==endはあり得ないパターンなのでassertで落とすようにしてましたが動きがおかしくなりました
と苦情が出たらどうするんた低農

498 :デフォルトの名無しさん:2013/11/08(金) 01:11:14.96
>>491
vectorが使えねー理由の最大はそこだよな。

499 :デフォルトの名無しさん:2013/11/08(金) 01:11:41.91
>>497
そういうのは設計がおかしいんだろ

500 :デフォルトの名無しさん:2013/11/08(金) 01:13:58.31
は! &*v.endはダメなのか。。。
じゃあ空チェックした上で
foo(&*v.begin(), &*v.begin() + v.size());
しかないね

501 :デフォルトの名無しさん:2013/11/08(金) 01:13:56.78
>>497
意味が分からない

502 :デフォルトの名無しさん:2013/11/08(金) 01:15:48.36
そういうのは設計がおかしい(とボクは考える)
 ↓
(ボクの考える)おかしな設計はあり得ない前提でプログラム修正する

こういうクズは他人に迷惑をかける前に死んだ方がいい

503 :デフォルトの名無しさん:2013/11/08(金) 01:16:14.20
vectorを丸ごとコピーして修正して
そのあたりの問題を解消した新vector使ってしまえば解決だろ

504 :デフォルトの名無しさん:2013/11/08(金) 01:17:11.82
>>500
>>445

505 :デフォルトの名無しさん:2013/11/08(金) 01:17:40.17
>>502
> (ボクの考える)おかしな設計はあり得ない前提でプログラム修正する

日本語でヨロシク

506 :デフォルトの名無しさん:2013/11/08(金) 01:17:44.55
if(!v.empty())
 foo(&v[0], &v[v.size()]);
の方が短いか

507 :デフォルトの名無しさん:2013/11/08(金) 01:19:06.66
>>497
> begin==endはあり得ないパターンなのでassertで落とすようにしてましたが動きがおかしくなりました

この部分、何を言いたいのか全然分からん

508 :デフォルトの名無しさん:2013/11/08(金) 01:22:11.85
落ちる筈の所で落ちなくなったということ

509 :デフォルトの名無しさん:2013/11/08(金) 01:22:25.73
>>506
そうなってしまうなら、>>482のコードで済むんじゃね?

510 :デフォルトの名無しさん:2013/11/08(金) 01:23:06.29
>>508
意味不明

511 :デフォルトの名無しさん:2013/11/08(金) 01:26:08.38
>>502
なにファビヨってるの?
もしbegin==end時の挙動が明記されてない糞関数を関数使わなきゃいけないハメになったら
実際に確かめるか、空チェックするから、心配なく

512 :デフォルトの名無しさん:2013/11/08(金) 01:26:54.73
>>494
正しいなんて一言も言ってないが。
だから、gnu-stlの実装だけと言ってる。

513 :デフォルトの名無しさん:2013/11/08(金) 01:28:28.01
>>506
v[v.size()]は範囲外アクセスになるじゃねーか

514 :デフォルトの名無しさん:2013/11/08(金) 01:28:36.94
>>496

515 :デフォルトの名無しさん:2013/11/08(金) 01:28:40.87
>>510
おまえ本当に頭が悪いな。
begin==endだと困る関数fがあったとして
begin==endをチェックしてプログラムを落とすようになっていたとして
>>482の糞改修によって
end()でない同一のiteratorが渡されたときに
エラーチェックが発動しなくなったら困るだろ?

516 :デフォルトの名無しさん:2013/11/08(金) 01:30:12.09
返り値があるならまだしも
void foo(Type begin, Type end);
の姿になってる関数は、begin==endのときは呼ばないのと同じ結果になるべき

517 :デフォルトの名無しさん:2013/11/08(金) 01:31:35.23
>>515
> begin==endだと困る関数fがあったとして
> begin==endをチェックしてプログラムを落とすようになっていたとして

ありえんだろ。そんな設計

518 :デフォルトの名無しさん:2013/11/08(金) 01:33:03.83
業務ロジック上同一になることがあり得ないという妄想がどこから来たのか

519 :デフォルトの名無しさん:2013/11/08(金) 01:34:13.25
>>513
なるほど
begin==endで問題が出るようなfooちゃんなら、endがアクセスできない時もどうなるか分かったもんじゃないな

520 :デフォルトの名無しさん:2013/11/08(金) 01:34:16.05
>>515
そういうレアな要求があるなら、その要求に合わせて>>482で追加された関数にもチェックを入れて落とすようにすれば済むだけじゃないの?
チェック入れれば済むだけのことなのに、君は何で新たに追加された関数にチェックを絶対に入れるもんかの精神になってるんだ?

521 :デフォルトの名無しさん:2013/11/08(金) 01:35:54.97
>>515
そういうおかしな関数を設計する人は少数派なので、
そいつを辞めさせれば解決する問題

522 :デフォルトの名無しさん:2013/11/08(金) 01:40:06.33
>>520
fooの中にどんな処理があるか不明なのに
追加した呼び出し側にわざわざコピペするという方針は変だろ。

どうして「可能な限り元の挙動やセマンティクスを保持する」
ことを嫌うのか不思議。

523 :デフォルトの名無しさん:2013/11/08(金) 01:41:33.12
>>519
お前はさっきから何を言ってるんだ

524 :デフォルトの名無しさん:2013/11/08(金) 01:44:23.29
>>522
fooの仕様を知らないのにfooのラッパー関数を書けるわけがないと言っているようだが、
それならfooの仕様も知らずにそれを呼び出すコードだって書けるはずがないよな。
これから呼び出して使おうとしている関数の仕様を知らないという前提で物事考えてるのはおかしくないか?

525 :デフォルトの名無しさん:2013/11/08(金) 01:45:13.82
もし、fooで空チェックして特別な処理する仕様(エラーメッセージ出すとか、ログするとか)
なら当然それが明記されていなければいけないわけで。。。
挙動がわけ分からんfooちゃんを「正しく」使うなど不可能だから

526 :デフォルトの名無しさん:2013/11/08(金) 01:45:26.55
>>522
> どうして「可能な限り元の挙動やセマンティクスを保持する」
> ことを嫌うのか不思議。

それを実現しようとした場合、どんなコードになる?

527 :デフォルトの名無しさん:2013/11/08(金) 01:46:10.13
>>515が言ってるのは、元のfoo()の中でaseert(begin!=end)してたらって話だと思うよ。
レアでもないだろう。

528 :デフォルトの名無しさん:2013/11/08(金) 01:48:44.70
>>527
引数チェックにassert使うのはそもそも間違いなのだが。

529 :デフォルトの名無しさん:2013/11/08(金) 01:54:02.36
>>526
if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[v.size()]);

>>528
挙動が変わって困る例の揚げ足を取るなよ
例外スローならお気にめすのかい?

530 :デフォルトの名無しさん:2013/11/08(金) 01:58:29.09
>>529
そんなチェッカー付きの呼び出しをあちこちに書くくらいなら
ラッパー関数方式を採用してラッパー関数の中にチェッカー入れた方がマシだな

531 :デフォルトの名無しさん:2013/11/08(金) 02:00:15.72
>>449 が正解だろ?その後のグダグダは何なの?

532 :デフォルトの名無しさん:2013/11/08(金) 02:00:17.41
>>528
なぜに?

533 :デフォルトの名無しさん:2013/11/08(金) 02:00:54.47
>>529
お前は>>482の関数にチェッカー入れることに対してはナンダカンダの理由付けて否定しておきながら
同じチェックを呼び出し側に入れるのは平気なんだな。
わけからんよ

534 :デフォルトの名無しさん:2013/11/08(金) 02:01:20.72
>>531
C++11限定だからかな

535 :デフォルトの名無しさん:2013/11/08(金) 02:01:39.20
>>531
サイズゼロでは使えないだろ

536 :デフォルトの名無しさん:2013/11/08(金) 02:02:01.12
>>524
>これから呼び出して使おうとしている関数の仕様を知らないという前提で物事考えてるのはおかしくないか?

全くおかしくない。
関数呼び出しは関数インターフェースという、
呼び出す側と呼ばれる側とのcontractによってなされるべきもので
関数の中身まで全知全能という前提は止めるべき。

537 :デフォルトの名無しさん:2013/11/08(金) 02:03:35.73
>>536
それは>>529のコードを否定してるわけだね

538 :デフォルトの名無しさん:2013/11/08(金) 02:03:46.85
>>535 使えるでしょ。 data() も size() も空の vector に呼び出して問題なし。

539 :デフォルトの名無しさん:2013/11/08(金) 02:05:34.82
>>536
begin==endで呼ぶとどうなるかは関数仕様の基本的な要素。
呼ぶ側がそれを知ることを全知全能呼ばわりしてはいけない。

540 :デフォルトの名無しさん:2013/11/08(金) 02:05:58.31
>>538
デリファレンスもないし完璧だけど、C++11だからスルー。

541 :デフォルトの名無しさん:2013/11/08(金) 02:07:43.74
>>538
NULLポインターを渡すことになるのでは?
fooがそういう呼び出しを許容していることが確定してるならいいけど

542 :529:2013/11/08(金) 02:08:39.61
>>533
>同じチェックを呼び出し側に入れるのは平気
そりゃ要素数0の時にfが何を期待してるかにクリティカルに依存するからね
もともと要素数ゼロに対応しないように見える関数だから
ちなみに>>482は要素数ゼロとbegin==endか等価ではないよ

543 :デフォルトの名無しさん:2013/11/08(金) 02:12:05.00
>>528
このまま流れが立ち切れる前に、ぜひ理由を教えてくれ。
外側のAPIでもない限り、使っても問題ないと思うんだが。

544 :デフォルトの名無しさん:2013/11/08(金) 02:12:37.57
>>529
> if ( v.empty() )
> もとのfの仕様を確認必要
> else
> foo(&v[0], &v[v.size()]);

このような呼び出し元チェックなら問題なくて、

void foo(vector<int>::iterator begin, vector<int>::iterator end)
{
if(begin==end)
もとのfの仕様を確認必要
else
foo(&*begin,&*end);
}

foo(v.begin(), v.end());

というラッパー方式は駄目だと言ってんだよな?
理由が全然分からんけど

545 :529:2013/11/08(金) 02:15:46.31
>>544
yes
その通りですよ?

546 :デフォルトの名無しさん:2013/11/08(金) 02:16:20.43
>>545
アホ確定ですね

547 :デフォルトの名無しさん:2013/11/08(金) 02:16:49.37
C++11なら if(! v.empty()) foo(v.data(), v.data() + v.size()); の一択

548 :529:2013/11/08(金) 02:17:20.51
>>546
要素数ゼロとbegin==endが等価ではないからね

549 :デフォルトの名無しさん:2013/11/08(金) 02:18:16.80
>>545
なんだそりゃ。
擁護してたのが馬鹿みたいだ。

550 :デフォルトの名無しさん:2013/11/08(金) 02:19:57.21
おおう、スレ更新してなかった
ゴミ書いてすまん

551 :デフォルトの名無しさん:2013/11/08(金) 02:19:58.75
>>548
(1)「要素ゼロ」かつ「begin!=end」
(2)「要素ゼロではない」かつ「begin==end」

のいずれがありえるの?

552 :デフォルトの名無しさん:2013/11/08(金) 02:23:07.74
>>544
でもって、ラッパー方式が駄目なのは、fooの仕様が分からないから
ラッパー内のチェッカーが書けるはずがないから。

553 :529:2013/11/08(金) 02:25:13.92
>>546
補足しておくと、482において
・f(v, v+1) のケースは問題ない
・vが要素数ゼロの時はそもそも対応していないように見えるので確認が必要
・f(v,v)は挙動が変わる

この最後のケースが問題だと言っている

554 :デフォルトの名無しさん:2013/11/08(金) 02:31:27.47
>>553
vの型はstd::vector<int>だよな

555 :529:2013/11/08(金) 02:32:06.50
ああ間違えた
544ならおk
begin==endで無条件にスルーしなければ

556 :529:2013/11/08(金) 02:35:19.81
>>554
紛らわしい変数名を使ったすまぬ。
↓ 訂正

>>546
補足しておくと、482において
・f(array, array+1) のケースは問題ない
・vが要素数ゼロの時はそもそも対応していないように見えるので確認が必要
・f(array, array)は挙動が変わる

この最後のケースが問題だと言っている

557 :デフォルトの名無しさん:2013/11/08(金) 02:36:49.18
もうそれ確認以前に、fooラッパーも外でチェックすればいいじゃないの?
fooは元々そういう想定なんでしょ?

558 :デフォルトの名無しさん:2013/11/08(金) 02:39:56.21
fが同一の有効ポインタを渡されたときに何をしたいか不明なのに何をチェックするのよ?

559 :デフォルトの名無しさん:2013/11/08(金) 02:47:43.19
>>548
> 要素数ゼロとbegin==endが等価ではないからね

何が違うんだ?

560 :デフォルトの名無しさん:2013/11/08(金) 02:51:15.65
>>555
お前、520じゃねーの?
やたらと矛盾だらけに見えるんだが

561 :デフォルトの名無しさん:2013/11/08(金) 02:53:50.52
>>556
いやいや、その話は既に>>520で指摘されてるはずだが。
ラッパー内にチェッカーを入れれば済むだけのことだろうと。
それに対して522=529が否定してたんだよな?

562 :555:2013/11/08(金) 02:54:15.33
>>559
3つ前のレスくらい読んでくれ

>>560
いや520は別人だ
520のアンカー先が折れ

563 :デフォルトの名無しさん:2013/11/08(金) 02:59:20.44
>>562
で、結局
(1)「要素ゼロ」かつ「begin!=end」
(2)「要素ゼロではない」かつ「begin==end」

のいずれがありえるの?

564 :デフォルトの名無しさん:2013/11/08(金) 03:02:03.82
>>562
> 3つ前のレスくらい読んでくれ

どこを読んでも
「要素数ゼロ」と「begin==end」が一致しない理由なんか書かれてないわけだが

565 :デフォルトの名無しさん:2013/11/08(金) 03:03:46.75
>ラッパー内にチェッカーを入れれば済むだけ
fの中に(同一の要素へのポインタを渡されたときに)
どんな壮大なコードがあるかもわからないのに
チェッカーを入れるだけって、、

>>563
後者だよ。
vが要素数1でも&v[0]を二つ渡せばbegin==endでしょ。

566 :デフォルトの名無しさん:2013/11/08(金) 03:04:40.09
訂正

vが要素数1でもv.begin()を二つ渡せば

567 :デフォルトの名無しさん:2013/11/08(金) 03:06:19.24
>>555
> 544ならおk

いやいや、それはおかしいだろ。
544に書かれてる「おまえはこれを否定してるわけだよな」の話はお前の今までの意見をまとめ上げたもので、
それをいきなりひっくり返したら
497以降のおまえの発言は全部自己矛盾だぞ。

568 :デフォルトの名無しさん:2013/11/08(金) 03:08:01.09
これでいいじゃん

template <class T>
T wrapFunc( const std::function<T(T*,T*)>&amp; func, std::vector<T>&amp; v ){
 return func( v.data(), v.data() + v.size() );
}

...

 if( v.empty() )
  ;// 論外の話なのでスルー
 else
  wrapFunc<int>( foo, v );

569 :デフォルトの名無しさん:2013/11/08(金) 03:08:04.59
>>565
> >ラッパー内にチェッカーを入れれば済むだけ
> fの中に(同一の要素へのポインタを渡されたときに)
> どんな壮大なコードがあるかもわからないのに
> チェッカーを入れるだけって、、

ならば、どういうコードにすべき?

570 :デフォルトの名無しさん:2013/11/08(金) 03:09:00.29
ラッパー内にチェッカはないわ
入れねえだろ普通

571 :デフォルトの名無しさん:2013/11/08(金) 03:10:21.59
>>569

if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[v.size()]);

こうすればいい

572 :デフォルトの名無しさん:2013/11/08(金) 03:12:31.37
>>571
v[v.size()]が領域外を示してる

573 :デフォルトの名無しさん:2013/11/08(金) 03:14:31.25
>>565
> vが要素数1でも&v[0]を二つ渡せばbegin==endでしょ。

vの要素数は関係ない。
begin==endで渡されたら、beginとendとの間の要素数はゼロ。

if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[0]);

おまえの想定する状況はこれだ。
vの要素数を確認することに意味がないことくらい分かるだろう。

574 :デフォルトの名無しさん:2013/11/08(金) 03:20:31.90
>>522
> fooの中にどんな処理があるか不明なのに
> 追加した呼び出し側にわざわざコピペするという方針は変だろ。

話が枝葉に散らばってるが、発端はこの論の是非なんだろ?

で、この主張してる人が

// 良いコード例
if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[v.size()]);

// 悪いコード例
void foo(vector<int>::iterator begin, vector<int>::iterator end)
{
if(begin==end)
もとのfの仕様を確認必要
else
foo(&*begin,&*end);
}
foo(v.begin(), v.end());

この例でいうところの、前者は問題ないが、後者には問題あると修正してる。
これはあってるよな?

575 :デフォルトの名無しさん:2013/11/08(金) 03:22:45.08
ラッパーにチェッカー入れるのは悪いこと
ラッパー書かずに呼び出し元にチェッカー入れるのは良いこと

ということなんだろ

576 :デフォルトの名無しさん:2013/11/08(金) 03:32:35.53
>>575
fooの中にどんな処理があるか不明なのに
ラッパーにチェッカーをわざわざコピペするという方針は変だろ。

577 :デフォルトの名無しさん:2013/11/08(金) 03:34:41.55
ラッパー否定論者さんは、どの発言を読んでも他の複数の発言との間で矛盾してるようですね。
プログラマに向いてないのでは?

578 :デフォルトの名無しさん:2013/11/08(金) 04:22:21.08
チェックしないラッパーを書いて、呼び出し元でチェックでいいだろ
なんでラッパーの中でチェックすんだよ
一貫性無いだろ

579 :デフォルトの名無しさん:2013/11/08(金) 04:28:10.46
>>578
直接元のfooを呼ぶ場合はfooの中にあるチェッカーを利用して、
ラッパーfooを呼ぶ場合は呼び出し元が元のfooがやってるチェックをするってこと?

580 :デフォルトの名無しさん:2013/11/08(金) 04:31:27.59
>>579
それが正しい。
理由は>>515>>522>>536で既に書かれてるので議論の余地無し。

581 :デフォルトの名無しさん:2013/11/08(金) 04:59:47.84
なんか盛り上がってんな
俺もまじゃりんこしていいの?

582 :デフォルトの名無しさん:2013/11/08(金) 06:51:41.57
>>574
それは>>555でokと言われれるだろ

583 :デフォルトの名無しさん:2013/11/08(金) 07:01:30.93
>>566
要素数1でv.begin()を二つ渡すって?
じゃあ要素数がn個のときはv.begin()とv.begin()+n-1 を渡すのかよ
どんなアホがそんなことするんだ?

584 :582:2013/11/08(金) 07:03:22.98
okと言われていたのは==でなくてemptyチェックか、
スレ汚し失礼…

585 :デフォルトの名無しさん:2013/11/08(金) 07:49:50.12
>vの要素数は関係ない
いやあるよな
「データが1件以上あるけどfに渡したい範囲がたまたま空だった」

「データが1件も無い」
は別に決まってる
前者は配列版でもあり得るけど後者はvectorにしたから起こり得る
いずれにせよ前者の時の挙動を真似するコードをラッパーにコピペはいただけない

586 :デフォルトの名無しさん:2013/11/08(金) 08:17:30.98
誰か>>543に答えてやれ。
俺は関数内部(原因は関数自身)の矛盾がassertで、
呼び出し側の問題は例外や戻り値が良いのではないかと思う。

587 :デフォルトの名無しさん:2013/11/08(金) 08:27:22.81
実行時チェックを省くことに価値がある部分なら
「空の要素数で渡すな」って約束しておけばassertでもいいだろ
あと関数内部の矛盾ってなんだよ。矛盾起こすなよ

588 :デフォルトの名無しさん:2013/11/08(金) 08:52:40.09
>>585
意味不明だな

589 :デフォルトの名無しさん:2013/11/08(金) 17:17:57.42
>矛盾起こすなよ
キチガイあらわる

590 :デフォルトの名無しさん:2013/11/08(金) 19:50:38.92
assertせずになるべく例外投げてくださいお願いします

極端な奴だとリリースで消えることすら知らなかったりする

591 :デフォルトの名無しさん:2013/11/08(金) 20:00:18.72
Javaなら不正な値が渡されたかいちいちチェックして例外投げるけど
C++なら不正な値が渡されたら未定義動作でいいと俺は思っている

592 :デフォルトの名無しさん:2013/11/08(金) 20:03:10.70
消えないassert()をdefine すればいいだけ

593 :デフォルトの名無しさん:2013/11/08(金) 20:30:03.21
>>592
違う意味になる関数ならわざわざ名前をぶつけなくていいじゃないか

594 :デフォルトの名無しさん:2013/11/08(金) 20:36:13.05
ガベコレとかポインタの循環参照とか例外とか、
アマチュア(自分)が普通気にしないような話をちゃんと書いてある本でお薦めありませんか?
言語は特にこだわりません。
スレチだったらごめんなさい。

595 :デフォルトの名無しさん:2013/11/08(金) 20:39:06.86
スレチ

596 :デフォルトの名無しさん:2013/11/08(金) 20:39:26.52
スダチ

597 :デフォルトの名無しさん:2013/11/08(金) 20:45:00.23
アマチュアでもそれくらいは気にしとけw

598 :デフォルトの名無しさん:2013/11/08(金) 20:46:43.17
自分はC++使ってるんですけど、言語固有の問題じゃない気がして、何かいい勉強の種はないかなぁと。

599 :デフォルトの名無しさん:2013/11/08(金) 20:52:27.54
すみませんでした。推薦図書っていうすれがあるんですね。移動します!

600 :デフォルトの名無しさん:2013/11/08(金) 21:00:38.98
そんなスレあったのかw

601 :デフォルトの名無しさん:2013/11/08(金) 21:02:27.86
ガベコレとかポインタの循環参照とかはlispを作る話かな

602 :デフォルトの名無しさん:2013/11/08(金) 21:16:06.39
言語の根幹を知りたいなら言語の作り方を調べればいいよ

603 :デフォルトの名無しさん:2013/11/08(金) 21:17:39.09
俺のガベージコレクションを見てくれ!とか言われて見に行ったら
川で拾った石ころとか浜に流れ着いた木の棒とか見せられる。
そんな感じだと思った。

604 :デフォルトの名無しさん:2013/11/08(金) 21:28:25.26
GCのリファレンスカウンタとか循環参照の取りこぼしにはマークスイープだとかそういうことが知りたいなら
>>602は決して極論じゃないからな

605 :デフォルトの名無しさん:2013/11/08(金) 21:46:13.91
template <class IT>
typename IT::pointer iter_cast(IT it)
{
  IT zero = IT();
  typename VIT::pointer null(0);
  return null + (it - zero);     <--- A
}

std::vector<int> v;
int*p iter_cast(v.begin()):

これでイテレータをポインタに変換できると思ったら A の引き算箇所で実行時エラーになるのな。
どこまでも頑ななやつw

606 :デフォルトの名無しさん:2013/11/08(金) 21:59:26.29
foo(POINT* begin, POINT* end); //何か描画

こういうのがけっこうあるんだよなあ。

607 :デフォルトの名無しさん:2013/11/08(金) 22:00:43.97
Compound Literalsで行こう

608 :デフォルトの名無しさん:2013/11/09(土) 03:47:00.82
ふと思ったんだが
std::vector<int*>
std::vector<void*>
がある場合、両方とも具体化されるんだよな
ポインタのサイズは固定だから余計なものが作られないようにはならんかな

609 :デフォルトの名無しさん:2013/11/09(土) 04:59:58.84
>>608
自分で共通ポインタ型作ればいいんじゃないの

610 :デフォルトの名無しさん:2013/11/09(土) 05:10:56.61
最適化フェーズでどうにかならないのかな

611 :デフォルトの名無しさん:2013/11/09(土) 05:30:39.32
std::string str = "a:\\b\\c\\d\\e\\f\\g.txt";
からg.txtを抜き出そうとしましたが泥臭いやりかしか出来ません・・・

std::string str = "a:\\b\\c\\d\\e\\f\\g.txt";
std::string::iterator itr,itrFound;
itrFound = str.begin();
while((itr = std::find(itrFound+1,str.end(),'\\')) != str.end())
itrFound = itr;
std::string s(itrFound+1,str.end());

カッコいいやり方はありませんか?
vs2008です

612 :デフォルトの名無しさん:2013/11/09(土) 05:51:03.27
rbegin/rend

613 :デフォルトの名無しさん:2013/11/09(土) 07:01:32.67
boost::filesystem::path p("a:\\b\\c\\d\\e\\f\\g.txt");
std::cout << p.filename();

614 :片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/09(土) 08:05:12.08
str.substr(str.find_last_of("\\/"))
ただし、Shift_JISのようなマルチバイト文字列だと\問題が起こって使えない

615 :デフォルトの名無しさん:2013/11/09(土) 13:24:32.02
Win限定ならPathStripPath

616 :デフォルトの名無しさん:2013/11/09(土) 13:34:40.54
2008ならregexも使えるか。ただし、Shift_JIS〜

static const std::regex re("[^\\\\]+$");
std::string s;
std::smatch m;
if (std::regex_search(str, m, re)) {
 s.assign(m[0].first, m[0].second);
}

617 :デフォルトの名無しさん:2013/11/09(土) 13:54:35.03
複数配列a[3][4]などのメモリ上の並び方ってなんか覚え方あるかしら

618 :デフォルトの名無しさん:2013/11/09(土) 14:10:57.52
一番右から並んでいく

619 :デフォルトの名無しさん:2013/11/09(土) 14:20:23.20
>>617
変数から遠い順に型なんです

int a[3][4]
これは
int (a[3][4])
えーと、a[][]に該当するのがint型なんです
続いて
int (a[3])[4]
えーと、a[]に該当するのは、intが4つ並んだ配列という型なんです
続いて
int (a)[3][4]
えーと、aに該当するのは、「intが4つ並んだ配列」が3つ並んだ配列という型なんです

620 :デフォルトの名無しさん:2013/11/09(土) 14:23:29.31
画像とかは、a[y][x]で格納することが多いね
a[y=0][x=0],a[y=0][x=1]
の順に並んでいく

621 :デフォルトの名無しさん:2013/11/09(土) 14:39:27.63
画像なんかは単純な配列で表現するわ
関数に渡すときに一貫性がなくなるから。

622 :デフォルトの名無しさん:2013/11/09(土) 16:54:50.50
>>608>>610
同一内容関数を複数のシンボルで共有するって最適化が掛かってれば消えるな。
型に依存する定数や関数を参照してたら多分消せないけど、そういうのが無い部分はOK。
昔から存在してる最適化だし今でも有効だろ。

623 :デフォルトの名無しさん:2013/11/09(土) 17:26:23.78
std::vector<int> v;
if(v.end() == std::find(v.begin(),v.end(),elem))
{
v.push_back(elem);
}

if()の中身長くなりすぎじゃね
なんとかならんかったのか

624 :デフォルトの名無しさん:2013/11/09(土) 17:33:42.90
if (boost::find(v, elem) == v.end())
v.push_back(elem);

625 :デフォルトの名無しさん:2013/11/09(土) 17:40:40.90
いちいちO(n)探索すんな、みたいなのはまあ別の話

626 :デフォルトの名無しさん:2013/11/09(土) 17:42:01.07
for (auto elem : v) {
if (elem == v.end())
v.push_back(elem)
}

627 :デフォルトの名無しさん:2013/11/09(土) 17:42:42.13
>>625
そのコストが気になるなら別のやり方するでしょ

628 :デフォルトの名無しさん:2013/11/09(土) 17:45:35.70
>>626
そのforはなんか落ち着かないわ今でも

629 :デフォルトの名無しさん:2013/11/09(土) 18:03:51.16
>>625
algorithmなんて大層な名前ついてるのにO(n)なの?

630 :デフォルトの名無しさん:2013/11/09(土) 18:04:54.17
テンプレだからソース見りゃわかるが
すごい簡単なことしてるだけだからな

631 :デフォルトの名無しさん:2013/11/09(土) 18:09:29.36
なんか大層なことをやってるのかと思ったら
そんくらいならvectorに入れておいてくれよ・・・

632 :デフォルトの名無しさん:2013/11/09(土) 18:11:57.33
vectorには入れなくていいだろ

633 :デフォルトの名無しさん:2013/11/09(土) 18:15:27.58
いや、なんでベクターにないのか素直にわからん
外でできることは外でやるポリシー?

634 :デフォルトの名無しさん:2013/11/09(土) 18:21:32.87
vectorに入れたらほかのコンテナにもないとおかしいだろ?
そうしたらコードが重複して無駄になるし、コードを修正するときにほかのコンテナに組み込んだソースも修正しなきゃならん
>>633は便利だからってクラスに機能詰め込んで一つのクラスが膨れ上がってるんじゃないか?

635 :デフォルトの名無しさん:2013/11/09(土) 18:23:05.56
>>633
おんなじ実装がlistやその他 iterator と operator== 装備してるクラスで使えるから
メンバにする理由がない

636 :デフォルトの名無しさん:2013/11/09(土) 18:30:25.52
何でもメンバーにしたがるのは一種のオブジェクト指向病

637 :デフォルトの名無しさん:2013/11/09(土) 18:39:33.49
>>622
thx

638 :デフォルトの名無しさん:2013/11/09(土) 18:51:20.11
>>634
>ほかのコンテナにもないと
なんで?普通にlistにあってvectorにないメソッドとかあるよね?

>>635
あーなるほど
しかしなんか釈然としないな

>>636
逆じゃね?

639 :デフォルトの名無しさん:2013/11/09(土) 18:55:31.63
コンテナとアルゴリズムを組み合わせるのがC++流なんだよわかれ

640 :デフォルトの名無しさん:2013/11/09(土) 19:06:54.32
O(n)以下にしたいならmapとかsetとかbinary_searchでも使えば?

641 :デフォルトの名無しさん:2013/11/09(土) 19:07:46.07
listにのみ存在するメソッドは、listの実装の都合上<algorithm>の関数のコンセプトを満たせないことがあるから特別に実装されている
アルゴリズムがM種類、コンテナがN種類存在するとき、それぞれのコンテナに全てのアルゴリズムを実装すると全部でM*N種類の実装が発生するが、コンテナとアルゴリズムの間にイテレータを挟むことで実装個数をM+N個まで削減することが出来る

642 : ◆QZaw55cn4c :2013/11/09(土) 20:46:49.18
>>641
たしかに list のソートとか別にあるね

643 :デフォルトの名無しさん:2013/11/09(土) 23:17:50.84
std::listはmergesortだっけ
std::stable_sort()の必要要件がRandomAccessIteratorだからメンバ関数で持つ必要があったわけね

644 :デフォルトの名無しさん:2013/11/10(日) 12:44:33.44
なんか汚いよな
<algorithm>の方を特殊化で対応するわけにはいかなかったんだろうか?

645 :デフォルトの名無しさん:2013/11/10(日) 13:06:59.58
いちいち特定コンテナに構ってたらalgorithmのほうが複雑化するだろ

646 :デフォルトの名無しさん:2013/11/10(日) 15:19:51.22
std::advanceってどのようなときに使うの?
イテレータに+−じゃ駄目なの?

647 :デフォルトの名無しさん:2013/11/10(日) 15:26:11.99
std::listやstd::mapのイテレータはランダムアクセスイテレータでないので、+や-演算子で特定の数だけイテレータを進めることが出来ない(ループで書く必要がある)
std::advanceは、引数がランダムアクセスイテレータならば直接加減算、その他の場合はループで進めてくれる便利な関数である

648 :デフォルトの名無しさん:2013/11/10(日) 15:38:31.54
operator+じゃだめなの?

649 :デフォルトの名無しさん:2013/11/10(日) 15:49:42.00
そもそもstd::list::iterator等には二項operator +,operator -が存在しない
http://ideone.com/0sXVPn

イテレータに対してどのような操作が出来るかをイテレータカテゴリとして標準は規定しているので、それを調べると良い
http://en.cppreference.com/w/cpp/iterator (英語)

650 :デフォルトの名無しさん:2013/11/10(日) 15:50:12.98
InputIteratorには+はないじゃん

651 :デフォルトの名無しさん:2013/11/10(日) 18:13:05.64
>>638
ばーか

652 :デフォルトの名無しさん:2013/11/10(日) 22:15:29.90
>>644
> <algorithm>の方を特殊化で対応するわけにはいかなかったんだろうか?
listのsortはコンテナ内のノードのリンクに対する変更であって格納されてる値そのものは変更されない
(なので(あまり意識されてなかったけど)コピー(・ムーブ共に)不可のクラスのlistでもsortできる)

一方algorithmのsortはイテレータの参照先の値そのものを変更するところがlistのsortと根本的に違う

そのためalgorithmのsortの作法に従うと特殊化してもlistのsortの利点を無くすし
listのsortの利点を残すためには加えてイテレータの高機能化が必要だけどそれは結果に対してコスト他で割に合わない
といった理由がある

653 :デフォルトの名無しさん:2013/11/11(月) 00:04:26.40
この辺はちゃんとデータ構造とアルゴリズムの勉強してないと疑問に思っちゃうんだろうな
ゆとりはプログラム組む前に勉強しろ

654 :デフォルトの名無しさん:2013/11/11(月) 00:06:55.86
>>653
なんかオススメの書物くれ

655 :デフォルトの名無しさん:2013/11/11(月) 00:07:57.04
大学の講義でも一本うけてこい

656 :デフォルトの名無しさん:2013/11/11(月) 00:37:01.45
ちゃんと勉強、ってほどの内容じゃないけどな

657 :デフォルトの名無しさん:2013/11/11(月) 00:42:05.33
じゃあeffective stlでいいか・・・

658 :デフォルトの名無しさん:2013/11/11(月) 01:04:37.68
>>656
データ構造とアルゴリズムが勉強じゃなけりゃ何が勉強なんだろう・・・
しっかり学として学ばないとすぐに迷信に堕ちるぞ

659 :デフォルトの名無しさん:2013/11/11(月) 02:08:11.70
データ構造とアルゴリズムは、他の言語でも応用が利くから学んどいても損はないな

660 :デフォルトの名無しさん:2013/11/11(月) 07:07:34.74
>>658
いや数日で終わるようなことを「ちゃんと勉強」というのかってこと

661 :デフォルトの名無しさん:2013/11/11(月) 07:10:40.17
>>660
ぐぬぬ・・・

662 :デフォルトの名無しさん:2013/11/11(月) 14:08:32.97
地道な積み重ね

663 :デフォルトの名無しさん:2013/11/11(月) 20:40:43.08
「線形代数を復習しなきゃ・・・」
「確率・統計の基礎をおさえとかなきゃ・・・」

664 :デフォルトの名無しさん:2013/11/12(火) 20:05:15.09
mfcでメイン画面に複数のボタンを設置して
それぞれ全く別の画面を表示させて処理をするようなシステムを作っています。
規模的にはそんなに大きくはないのですが、
機能は全く別なので、それぞれdllにして分けた方がいいのでしょうか?
また、分けるならそれぞれのdllでシングルドキュメントの実装ができればと思っているのですが、可能でしょうか?
ダイアログベースでもいいのですが、なかなか融通が利かなくて
使いづらいというか、win32でやってた方がやりやすいような気がするのですが、
ダイアログベースのうまい使い方とかあれば是非教えていただきたいです。

665 :デフォルトの名無しさん:2013/11/12(火) 20:27:26.87
dllって普通モジュールやコンポーネントをまとめるもんじゃない?
外装ごとにdllつくるってなんか違う気がする

666 :デフォルトの名無しさん:2013/11/12(火) 21:12:33.23
めんどい

667 :デフォルトの名無しさん:2013/11/12(火) 21:20:49.29
微妙にわからんが、DLL単位で交換できるメリットを出せるなら

668 :デフォルトの名無しさん:2013/11/12(火) 21:25:04.32
ビヤーネ・ストルブストルップがC++を開発したってどういう意味なんですか?
彼がコンパイラを作ったって意味?

彼作のコンパイラなんて見かけないですが・

669 :デフォルトの名無しさん:2013/11/12(火) 21:27:24.16
仕様を考えたって意味だろう

670 :デフォルトの名無しさん:2013/11/12(火) 21:59:12.89
cfrontをぐぐれ

671 :デフォルトの名無しさん:2013/11/12(火) 23:57:26.54
>>668
C,C++は朝鮮人のhogeという奴が作った。覚えとくように

672 :デフォルトの名無しさん:2013/11/13(水) 00:02:20.72
>>671
ハァ?C++はデンマーク人のhageなhigeが作ったんだよ。忘れんな

673 :デフォルトの名無しさん:2013/11/13(水) 07:49:28.00
>>672
hageなhigeを専門用語でhogeというんだよ

674 :デフォルトの名無しさん:2013/11/13(水) 08:16:52.57
>>673
連鎖あぼーんに参加

675 :デフォルトの名無しさん:2013/11/13(水) 08:19:59.77
>>674
俺も混ぜてくれ

676 :デフォルトの名無しさん:2013/11/13(水) 08:28:14.17
>>675
連鎖すげー
何連鎖だよ

677 :デフォルトの名無しさん:2013/11/13(水) 08:44:24.68
>>676
ばよえーん

678 :デフォルトの名無しさん:2013/11/13(水) 12:33:36.91
>>677
ありゃりゃ

679 :デフォルトの名無しさん:2013/11/13(水) 14:27:52.49
>>678
ばたんきゅー

680 :デフォルトの名無しさん:2013/11/13(水) 14:40:21.12
>>679
::TerminateThread(hoge, 0);

681 :デフォルトの名無しさん:2013/11/13(水) 16:14:19.77
長い長い連鎖あぼーんだこと

682 :デフォルトの名無しさん:2013/11/13(水) 19:57:12.18
c++11で導入されたSTL使ったプログラムをg++4.8.1でコンパイルすると「-std=c++11」つけろって怒れたので、オプションつけたら
g++: fatal error: no input files
compilation terminated.
って言われたんですが、ubuntuでg++でc++11をコンパイルするにはどうすればいいんですか?

683 :デフォルトの名無しさん:2013/11/13(水) 20:01:26.01
>>682
はあ?
他人でも再現できるように説明しろよ

684 :デフォルトの名無しさん:2013/11/13(水) 20:02:39.80
>>682
今のubuntuでc++11ならg++は使わないよ
clang++だよ

>>680
std::thread(hoge,"hoge");

685 :デフォルトの名無しさん:2013/11/13(水) 20:17:30.63
>>684
解決しましたありがとうごさいます

686 :デフォルトの名無しさん:2013/11/13(水) 20:46:38.29
//WinDef.h
...
#define far
#define near
...

なんなんだよおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお

687 :デフォルトの名無しさん:2013/11/13(水) 21:18:16.16
mfcのコンボボックスって動的に生成すると高さ変えれないんですか?
CViewクラスのOnCreateで
CComboBox *combo = new CComboBox();
combo->Create(WS_VISIBLE, CRect(0, 0, 100, 20), this, ID);
として生成してるんですが、
CRectの値を変えても、SetWindowPosしても、MoveWindowしても変えれなくて、
BS_OWNERDRAWを設定してOnMeasureItemでitemHeightの値を設定しても全然高さが変わってくれません…
他のエディットテキストやスタティックテキスト等のコントロールより高さが微妙に高くて
見た目が悪いのでスマートな細さにしたいんですが、何か方法はないですか?
ちなみにフォントも小さくしてみたのですが、変化が無くどうしたらいいのやらさっぱりです…

688 :デフォルトの名無しさん:2013/11/13(水) 21:43:09.91
>>686
Win16の名残
多くのポインタ類にNearとFarの区別があった

689 :デフォルトの名無しさん:2013/11/13(水) 21:48:16.41
>>687
コンボボックスの中にエデットコントロールがある

690 :デフォルトの名無しさん:2013/11/13(水) 21:50:00.54
以下の条件を満たす場合は、デストラクタが例外を投げることが許される。

・解放する必要のある資源をひとつも持っていない。
・他で発生した例外に巻き込まれている渦中においては、自身のデストラクタで例外を投げることは決してない。

691 :デフォルトの名無しさん:2013/11/13(水) 21:51:03.95
ゲームだと全く例外使わないんだけどお前ら何に使ってるの?

692 :デフォルトの名無しさん:2013/11/13(水) 21:52:31.75
>>688
初めて知った

693 :デフォルトの名無しさん:2013/11/13(水) 22:03:18.34
>>689
中にエディットコントロールとはどういう事ですか?
そのエディットコントロールの高さも変えないとコンボボックスの高さも変わらないってこと?

694 :デフォルトの名無しさん:2013/11/13(水) 22:13:03.62
>>682
ISO/IEC 14882の1998,2003,2011のいずれにも
STLなどというものは登場しませんが
何のことを言っているの?

695 :デフォルトの名無しさん:2013/11/13(水) 22:17:39.56
>>693
子ウィンドウになってる
GetWindow
CBEM_GETEDITCONTROL

696 :デフォルトの名無しさん:2013/11/13(水) 22:36:54.88
STLは俗称として普通に使っても良いとは思うけど、
682が何のことを言っているのかは確かに分らんわ

697 :デフォルトの名無しさん:2013/11/13(水) 22:44:45.61
int a[N];
int b[N];

とサイズの等しい配列が2つあった場合、それぞれの配列の合計を算出したい場合
std::accumulate(a,
std::accumulate(b,

と後輩が書きやがりました。あたかもC++知ってますと言わんばかりに・・・

for
{
suma +=
sumb +=
}
としたほうが、ループを1回しか回らないので明らかに速いと思うのですが
どう思われますか?

VS2008(2010以降ではありません)

698 :デフォルトの名無しさん:2013/11/13(水) 22:46:23.14
とりあえず時間を計ってみる
あんま変わらんと思うけど

699 :デフォルトの名無しさん:2013/11/13(水) 22:49:16.61
普通に考えたら後者の方が速くなることが期待できるだろう。
見さすさや保守性、バグの起きにくさ、要求仕様との対比
まで考慮した上で速けりゃいいかどうかは
別だとは思うけど。

700 :デフォルトの名無しさん:2013/11/13(水) 22:52:32.60
後輩の方がC++知ってて悔しかったのかな

701 :デフォルトの名無しさん:2013/11/13(水) 22:53:11.14
>>698
計測する必要はないでしょ
前者のほうが速いなんてことはありえない

ループを倍回るし、呼び出しのオーバーヘッドもあるし

702 :デフォルトの名無しさん:2013/11/13(水) 22:55:39.10
前者のほうが見やすいから前者の勝ち
intの足し算なんて量が多けりゃ読み出しが追い付かないし
少なけりゃ速度を気にする必要はない

703 :デフォルトの名無しさん:2013/11/13(水) 22:59:59.39
>>701
>呼び出しのオーバーヘッド
えっ?

704 :デフォルトの名無しさん:2013/11/13(水) 23:02:22.35
キャッシュに入りきらないような巨大な配列の場合
2回に分けたほうが速いってことは無いんかな

705 :デフォルトの名無しさん:2013/11/13(水) 23:03:57.33
ヘッダに書いてあるからと言って

706 :デフォルトの名無しさん:2013/11/13(水) 23:06:11.10
キャッシュに入りきらない事態が2度起こるって考えると・・・

707 :デフォルトの名無しさん:2013/11/13(水) 23:07:11.58
>>690
例外を投げるデストラクタはいかなる場合でも許されない

ってじっちゃが言ってた。

708 :デフォルトの名無しさん:2013/11/13(水) 23:07:39.03
>>703
インラインとか関数オブジェクトとか無い世界から来たんだろう

709 :デフォルトの名無しさん:2013/11/13(水) 23:08:25.74
キャッシュを設計する人の気分になったら
この例でキャッシュヒット率は同じ筈

710 :デフォルトの名無しさん:2013/11/13(水) 23:10:51.18
っつうかそんなクリティカルな動作が必要な箇所なのかと
昔Cは遅いからアセンブラでって言ってた人思い出したわ

711 :デフォルトの名無しさん:2013/11/13(水) 23:16:42.36
a[N]とb[N]がともにでかくてキャッシュに入りきらない場合、
for (
suma += a[i];
sumb += b[i];
}
のa[i]とb[i]は必ずメモリ上遠い位置にあるだろう。
すべてのiについて毎回そうなるけど、そうなるとどうなるんだろ?

712 :デフォルトの名無しさん:2013/11/13(水) 23:18:09.89
>>708
インラインはそう保証されてないだろ?
関数オブジェクトは呼び出しコストの話とは関係ないし。

713 :デフォルトの名無しさん:2013/11/13(水) 23:25:06.51
>>712
本当に関係ないのかな?

714 :デフォルトの名無しさん:2013/11/13(水) 23:31:52.14
インライン展開が大前提の技術で保証がないとか言われてもねぇ
「お前テレビ買ってきたようだが映らない可能性はゼロではない」
ぐらいの言いがかり

715 :デフォルトの名無しさん:2013/11/13(水) 23:33:24.96
言語設計者でもないんだから、下手な考え休むに似たり。
計測すればいいだけ。

716 :デフォルトの名無しさん:2013/11/13(水) 23:36:52.62
やってみた
ttp://codepad.org/jDnOTDt3
VS2013Express
最大限の最適化/Ox 64bitバイナリ
結果
test1 : 504 test2 : 559
test1 : 450 test2 : 574
test1 : 574 test2 : 543
test1 : 492 test2 : 535
test1 : 483 test2 : 526
だいたいforの方が1割ぐらい早いかな

717 :デフォルトの名無しさん:2013/11/13(水) 23:38:01.11
>>715
それは処理するデータの量と実行環境で簡単に逆転するから半分ウソ
基本は記述性を優先

718 :デフォルトの名無しさん:2013/11/13(水) 23:43:27.64
インライン展開されてもループ制御命令の実行コストが余分に掛かるけどね。
意味が明確でコードがコンパクトだし速度重視でなければそれも良いと思うけど、
デバッグビルドでインライン展開とか最適化とか積極的に掛けるかというと微妙。

末尾最適化もそうだけど、そういう設定が適用される前提が共有できない状況で最適化に頼るコードに太鼓判押す奴はクソだと思う。
「(末尾最適化・インライン展開が有効なコンパイラ・コンパイルオプションならば)」って前提も無くそれに頼るなと。
頼るなら明示しろ。

719 :デフォルトの名無しさん:2013/11/13(水) 23:43:36.68
>>713
全く無関係

720 :デフォルトの名無しさん:2013/11/14(木) 00:04:49.59
>>707
そんなこたあない。
なぜ普通はダメなのか考えれば、それにあてはまらないパターンがあることもわかるはず。

721 :デフォルトの名無しさん:2013/11/14(木) 00:06:17.16
>>714
実際にインライン展開されるかどうかは保証されてないよ

722 :デフォルトの名無しさん:2013/11/14(木) 00:38:32.67
intrin使うとどうなるかな

723 :デフォルトの名無しさん:2013/11/14(木) 00:51:37.21
>>716
C++はCに比べて遅いからな
だから、いまでもC++よりCがたくさん使われるんだよな

724 :デフォルトの名無しさん:2013/11/14(木) 00:58:11.57
JSはCの二倍速い。

725 :デフォルトの名無しさん:2013/11/14(木) 01:03:32.49
>>723
C++コンパイラだけど

726 :デフォルトの名無しさん:2013/11/14(木) 03:28:27.15
>>723 んなこたーない。

727 :デフォルトの名無しさん:2013/11/14(木) 09:43:47.30
遅いのはC++じゃない。iostreamだ。

728 :デフォルトの名無しさん:2013/11/14(木) 18:56:41.27
C++は言語仕様が大きすぎるので
調子に乗った奴がクソコードを書かないよう
「Cの範囲で」とガードをかけるのが吉。
それ以外にCの存在意義はない。

729 :デフォルトの名無しさん:2013/11/14(木) 18:59:27.80
Cもインライン展開とかってしてくれるの?

730 :デフォルトの名無しさん:2013/11/14(木) 18:59:33.37
C++の言語仕様がでかいとか
ほかの言語に触ったことない人なのかな

731 :デフォルトの名無しさん:2013/11/14(木) 19:03:16.05
>>728
> C++は言語仕様が大きすぎるので

そんな頭弱いこという子に用はありません

732 :デフォルトの名無しさん:2013/11/14(木) 19:04:18.45
いや…C++の言語仕様はでかいね
でかいし掴みどころがない
あとiostreamは失敗作。ノータッチで

733 :デフォルトの名無しさん:2013/11/14(木) 19:10:32.02
lambdaのグロさに愛想を尽かした
どうすればコンピュータサイエンスの真髄をあんなグロい表記に出来るのだ

734 :デフォルトの名無しさん:2013/11/14(木) 19:14:24.13
仕様の隅々まで把握しないと使い物にならんという意味ではデカ過ぎる

735 :デフォルトの名無しさん:2013/11/14(木) 19:14:29.17
strstreamなら割と使うな
なんでも突っ込めるし
ラムダはもう慣れたわ

736 :デフォルトの名無しさん:2013/11/14(木) 19:23:16.92
それよりもsstream使うべし

737 :デフォルトの名無しさん:2013/11/14(木) 19:59:44.30
>>695
エディットコントロールを取得することはできたんですが、
エディットコントロールとコンボボックスをいじってみても高さを変えることができません
あれこれ調べてはみてるのですが、プルダウンの高さを調整する方法しか出てこなくて…

738 :デフォルトの名無しさん:2013/11/14(木) 20:07:51.90
>>737
SetItemHeight のインデックス(-1)は試した?

739 :デフォルトの名無しさん:2013/11/14(木) 20:10:38.47
自分のときはフォントの大きさ帰るだけで小っちゃくなったけどなあ

740 :デフォルトの名無しさん:2013/11/14(木) 20:14:29.72
>>738
はい、-1を指定してもかわらなくて、
0を指定するとプルダウンしたときのリストの幅が狭くなりました。
SDIで動的に生成しているのですが、ダイアログベースじゃないと変更できないんでしょうか?
試しにフォントをかなり小さくしたりして試してみたのですが、全然小さくなりませんでした
出来ればエディットやスタティックと同じ20位に統一したいのですが、どうやっても25くらいの高さになってしまいます…

741 :デフォルトの名無しさん:2013/11/14(木) 20:25:52.64
>>716 >>718
http//ideone.com/QxAmoA

742 :デフォルトの名無しさん:2013/11/14(木) 20:42:40.26
>>741
逆転したのも興味深いけど
最近の話題をそこはかとなく混ぜてくるセンス嫌いじゃない

743 :デフォルトの名無しさん:2013/11/14(木) 23:41:04.08
>>716
とどのつまりどっちがいいのかしらん

744 :デフォルトの名無しさん:2013/11/15(金) 02:09:30.59
>>743
結論としては、記述性と可読性が最優先。
パフォーマンスは全体を計測してみてネックと思われる部分を集中的に手当てするの正解。

745 :デフォルトの名無しさん:2013/11/15(金) 05:34:35.14
>>744に同意
>>697は老害と言われないよう肝に銘じておけ

746 :デフォルトの名無しさん:2013/11/15(金) 05:43:49.19
趣味や研究ならガッチガチにトリッキーなコード書くのもおもしろいけどね
お仕事なら干されるけどね

747 :デフォルトの名無しさん:2013/11/15(金) 09:35:11.63
意味のないトリッキーなコードは公然猥褻罪が適用されるべき公開オナニー

748 :デフォルトの名無しさん:2013/11/15(金) 12:07:27.02
記述性と可読性はもちろん大事だが
真性バカの隠れ蓑であることにも注意が必要

どんなに小手先の最適化をしても
全体的な構成がおバカでは際限ないイタチごっことなる

システム全体を広く深く洞察できる高スキルな人にとっての
記述性・可読性は、真性バカの主張とは大きくずれる

749 :デフォルトの名無しさん:2013/11/15(金) 15:38:28.45
仰々しく言ってるけど言ってることは抽象的で薄い

750 :デフォルトの名無しさん:2013/11/15(金) 16:46:36.94
>>749
濃いこと言おうぜ

751 :デフォルトの名無しさん:2013/11/15(金) 19:09:22.21
「可読性は大事だが、低スキルも言い訳に使うから困る」
レスが自己言及かってぐらい長すぎだろ

752 :デフォルトの名無しさん:2013/11/15(金) 19:21:45.10
>>749
抽象化が大事だぜ

753 :デフォルトの名無しさん:2013/11/15(金) 19:55:41.65
来週からMFC使う事になって予習してるんだが、
使いずらくてかなわんな…
CDatabaseとかCListとか関数の戻り値にしたいんだが
cobject::cobject 〜 private でアクセスできませんとかで、ポインタじゃないと戻り値にできないいんだが、
MFCってみんなこんななの?
C#だとコンボボックスにオブジェクト入れれるんだけど
テキストしかセットできないし…
まぁコンボボックスは継承して自分でオブジェクト入れれるようにできればいいんだけど、
cobject〜ってのがよくわからん
関数内で
CList<hoge> fuga;
return fuga;
ってできないのは何故?

754 :デフォルトの名無しさん:2013/11/15(金) 20:04:01.17
MFCがそう言うものじゃなくて、C++がそう言うもの
C#だけの知識でC++使うのは相当に厳しい
来週からなんて無理

755 :デフォルトの名無しさん:2013/11/15(金) 20:13:16.68
試してないができるだろ
どうせアホなことしてるだけだろうけど

756 :デフォルトの名無しさん:2013/11/15(金) 20:14:22.74
MFCでつまずくとこそこじゃないだろ
いわゆるポインタがわかってない人ですかい

757 :デフォルトの名無しさん:2013/11/15(金) 20:45:05.96
C++のクラスは参照型じゃなくて構造体とほぼ同じもの
&つけて参照にできるけど ポインタで統一したほうが楽かなぁ

758 :デフォルトの名無しさん:2013/11/15(金) 20:47:46.36
などと意味不明な供述をしており

759 :デフォルトの名無しさん:2013/11/15(金) 20:52:44.28
ポインタと参照をそんなレベルで語るなよ

760 :デフォルトの名無しさん:2013/11/15(金) 20:54:24.42
>>757
参照型とかJava脳用語はやめてくれ‥‥

761 :デフォルトの名無しさん:2013/11/15(金) 20:57:40.26
>>754,>>755,>>756,>>757
C++は少しはやったことあるんだけど
確かに分かってるとは言えないレベルです・・・
ポインタは少しは理解してるつもりなんですが、
戻り値にポインタってあまり使わないと思うんだけど、
c++はそれが普通ってこと?
>>755
アホなことはしてないと思いたいんだけど、関数内で
struct hoge {
int a;
};
hoge xxx;
xxx.a = 1;
CList<hoge> fuga;
fuga.AddTail(xxx);
return fuga;
ってな具合で処理してるっていっても例に挙げたくらい簡単なものにしても
cobject::cobject〜ってなるんです
ネットで調べたりしてみてはいるんだけど、
とくに小難しいことはしてないのになぜエラーになるのかいまいちわかりません
APIとか見てもポインタの戻り値ってあまりないと思うんだけど、
積極的に使ってもいいものなの?

762 :デフォルトの名無しさん:2013/11/15(金) 21:00:06.82
ちゃんとソースコード出して

763 :デフォルトの名無しさん:2013/11/15(金) 21:09:30.37
アホには無理
十年早い

764 :デフォルトの名無しさん:2013/11/15(金) 21:13:09.82
だから C/C++ では参照型にならないと言っている
明示的に & を付けるか ポインタにするか

765 :デフォルトの名無しさん:2013/11/15(金) 21:13:45.34
>>761
何で関数内にstructがあるんだよ

766 :デフォルトの名無しさん:2013/11/15(金) 21:25:10.79
単Ttd:: listはコピー返し出来るけどCListはコピー返し出来ないってだけの話だろ。
参照型にできないとか見当はずれにも程がある。

767 :デフォルトの名無しさん:2013/11/15(金) 21:33:54.40
>>761
>戻り値にポインタってあまり使わないと思うんだけど、
>c++はそれが普通ってこと?
誤解を恐れずに言うが、C#やJavaのオブジェクト型はポインタだよ。
だからMFCでの書き方は、普通のC++よりはC#に近いはずだよ。

C++では確かに戻り値にポインタは使わないけど、
それはJavaやC#のいわゆる「参照型」ですらない。
たぶん全然理解できずに言ってると思う。仕様を疑ってる場合じゃない。

768 :デフォルトの名無しさん:2013/11/15(金) 21:45:03.92
> C++では確かに戻り値にポインタは使わないけど、

え??

769 :デフォルトの名無しさん:2013/11/15(金) 21:48:43.03
メモリイメージを意識するんだ!

770 :デフォルトの名無しさん:2013/11/15(金) 21:49:18.07
>>767
誤解しか産まないんですがそれは

771 :デフォルトの名無しさん:2013/11/15(金) 21:51:21.01
>>767
どうやったらそこまでアホになれるんだよ

772 :デフォルトの名無しさん:2013/11/15(金) 21:54:41.23
100%ポインタを使わないって意味じゃないよ。
基本的に引数で参照を受け取るし、
戻り値で返す場合でも値のが多いよ。

ポインタ扱う場合でもスマポ=値型で返すでしょ。

773 :デフォルトの名無しさん:2013/11/15(金) 21:55:58.87
>戻り値で返す場合でも値のが多いよ。

うーん、この

774 :デフォルトの名無しさん:2013/11/15(金) 21:56:37.32
まずCでの構造体を考えろ
struct T x,y; のとき、x=y; として、y をいじると、それでももとのxは不変なんだよ
C++のクラスでも同様。下手にx=y; 式のことをやると、
ポインタが紛れ込んでるとカオスになる
Javaぽくやるなら、struct T &x,y; x=y;

などと、最近やっとJavaの本を安く ぶくおくで買って読んでいる俺が供述しており

775 :デフォルトの名無しさん:2013/11/15(金) 21:57:53.05
>>773
言いたい事があるならはっきり言いなよ。

776 :デフォルトの名無しさん:2013/11/15(金) 21:59:43.36
無知で申し訳ないです…
でも皆さんの意見は大変勉強になります
structは関数の外で定義してます。分かりずらい書き方してすみません
>>767
確かにそういわれてみればC#に近い気がする
c++だとガベージコレクションがないから
newすることに気を使いすぎているのかもしれません…
関数でデータベースから値をとってきて返したいのですが、
戻り値の型を気にしてしまって
配列にすればいいのかコレクションにすればいいのか
配列に限らず汎用的な戻し方ってのは何に気を付ければいいんですか?

777 :デフォルトの名無しさん:2013/11/15(金) 22:00:43.09
コピーコンストラクタ禁止してるなら、スマポ返しも無理じゃね

778 :デフォルトの名無しさん:2013/11/15(金) 22:02:54.59
> Javaぽくやるなら、struct T &x,y; x=y;

つっこみどころ多すぎて、どこから手をつければよいやら・・・

779 :デフォルトの名無しさん:2013/11/15(金) 22:03:14.76
>>773
ウンコウンコうるせえ

780 :デフォルトの名無しさん:2013/11/15(金) 22:05:04.59
C言語じゃあるまいし、ナマポで返り値返すとか普通しないでしょ。
>>776
1.CListなんぞ捨ててstd::list使う
2.どうしてもCListを使わなければならないなら、CListの実態は呼ぶ側で作ってもらって、引数でそのCListを参照渡しして、それに要素を詰め込む。

781 :デフォルトの名無しさん:2013/11/15(金) 22:05:55.27
>>777
コピーコンストラクタ禁止って、デフォルト以外も?
どんな環境よ。

782 :デフォルトの名無しさん:2013/11/15(金) 22:07:23.55
std::unique_ptr<CList<hoge>> fuga(new CList<hoge>);
return fuga;

はい、できました。解決。終わり終わりw

783 :デフォルトの名無しさん:2013/11/15(金) 22:07:33.16
>>728
実行モジュールのコンパクトさも利点だよ。

大量に、スレッドとかプロセス生成したり、頻繁に破棄と生成繰り返すようなときは、最近のサーバーでも負荷が変わってくる。

784 :デフォルトの名無しさん:2013/11/15(金) 22:12:32.70
> C言語じゃあるまいし、ナマポで返り値返すとか普通しないでしょ。

何と戦ってるんだ?

785 :デフォルトの名無しさん:2013/11/15(金) 22:13:17.04
また荒らしに来たのか低能

786 :デフォルトの名無しさん:2013/11/15(金) 22:39:17.96
MFCやるって言ってるのをわかってない奴がいる

787 :デフォルトの名無しさん:2013/11/15(金) 22:44:33.13
たぶんnewしたオブジェクトのナマポのことに限定してるんだと思う

788 :デフォルトの名無しさん:2013/11/15(金) 22:49:24.01
すまないが TRY - CATCH - END_CATCH なんてクソ汚い入れ墨を彫ってる奴以外は帰ってくれないか

789 :デフォルトの名無しさん:2013/11/15(金) 22:50:06.54
みんなよく
> cobject::cobject 〜 private でアクセスできませんとかで、
の日本語が理解できるな。
さっぱり意味が分からん

790 :デフォルトの名無しさん:2013/11/15(金) 22:52:49.12
MFCつかWin32がreinterpret_castしまくる

791 :デフォルトの名無しさん:2013/11/15(金) 23:04:43.25
>>789
noncopyableのエラーじゃね
shared_ptr使えばいいだけ

792 :デフォルトの名無しさん:2013/11/15(金) 23:22:44.52
MFC使わさせられるような環境で、shared_ptr使えるのか?
boost入れるのも環境によってはハードルあるし。

793 :デフォルトの名無しさん:2013/11/15(金) 23:31:45.77
CListってコピコンがprivateなのか。
今手元にexpressしかないからわからん。
ところでshared_ptrやunique_ptrとMFCて排他的な関係でもあんの?

794 :デフォルトの名無しさん:2013/11/15(金) 23:35:07.37
そこだな
STL禁止でMFCしか使えないのか
MFCでI/F組むことが強制されているのか
単にMFC言われて思考停止してるのか
それによって何を学ぶべきかが変わる

795 :デフォルトの名無しさん:2013/11/15(金) 23:35:50.65
>>782
>>791
コピーコンストラクタがprivateなやつをどうやってuniqueやらshared_ptrにするんだ

796 :デフォルトの名無しさん:2013/11/15(金) 23:57:26.60
>>795
はい

797 :デフォルトの名無しさん:2013/11/16(土) 00:02:57.33
>>795
おまえは何を言ってるんだ

798 :デフォルトの名無しさん:2013/11/16(土) 00:09:13.98
unique_ptrの潔さが好きだ・・・

799 :デフォルトの名無しさん:2013/11/16(土) 00:28:12.92
「スマートポインタは甘え」と唱えて迫害されたい

800 :デフォルトの名無しさん:2013/11/16(土) 00:38:37.23
>>795
kwsk(死語)

801 :デフォルトの名無しさん:2013/11/16(土) 00:41:39.99
stl禁止とかどういった事情でそうなるものなの?

802 :デフォルトの名無しさん:2013/11/16(土) 00:42:20.99
コンパイラが対応してない

803 :デフォルトの名無しさん:2013/11/16(土) 00:49:20.52
組み込みならrttiも例外もstlも禁止
さらに仮想関数や継承禁止、挙句に最適化なしまで入(ry

804 :デフォルトの名無しさん:2013/11/16(土) 00:58:32.98
それってnewも禁止?
個人的な優先順位は、

STL > 継承=仮想関数 > 例外 > RTTI

かなあ・・・

805 :デフォルトの名無しさん:2013/11/16(土) 01:00:15.40
>>803
っつうかC使えよ
って言えないのか

806 :デフォルトの名無しさん:2013/11/16(土) 01:02:41.62
潔さってことで言うと、
コピコン禁止、代入禁止、コンストラクタprivate
メソッドがひとつだけ
ってクラスが今のお気に入りw

807 :デフォルトの名無しさん:2013/11/16(土) 01:42:23.21
今時 MFC とか言ったら VC6が出てきても驚かない
try catchが事実上対応してなくて TRY CATCHとかいうマクロで代用させられるようなシロモノだぞ

808 :デフォルトの名無しさん:2013/11/16(土) 01:44:08.00
>>795
馬鹿

809 :デフォルトの名無しさん:2013/11/16(土) 01:58:13.03
>>808
どうやってコンパイル通すか教えてくれ
バカだから分からん
http://ideone.com/LX0Wof

810 :デフォルトの名無しさん:2013/11/16(土) 02:10:21.16
http://ideone.com/LN5DLi

811 :デフォルトの名無しさん:2013/11/16(土) 02:16:06.27
>>809
馬鹿すぎワロタw unique_ptr以前に生成自体ができてねーよw
ideone.com/WBhLx0
ideone.com/EZkOCB

812 :デフォルトの名無しさん:2013/11/16(土) 02:24:51.20
>>810-811
おおう、ありがとう
1から勉強します

813 :デフォルトの名無しさん:2013/11/16(土) 02:25:47.15
環境はGCC 4.8.1で、

Rangeをvectorのconst_iterator型へ変換する時に、

template <class Range>
struct v_it {
typedef typename vector<typename Range::value_type>::iterator type;
};
v_it<set<int>>::type it;

こっちはいけて

template <class Range>
auto f_v_it(Range &&r)
-> vector<typename Range::value_type>::const_iterator;
decltype(f_v_it(set<int>())) it;
こっちはいけない
error: expected type-specifier
って言われる、型は合ってるだけにエラーを見ても原因が分からん・・・

814 :デフォルトの名無しさん:2013/11/16(土) 02:27:10.95
const_iteratorじゃなくてiterator、
itratorの方がタイプ数少なかったんで変更したんだけどここだけ変え忘れてた

815 :デフォルトの名無しさん:2013/11/16(土) 02:31:11.53
自己解決しました

template <class Range>
auto f_v_it(const Range &r)
-> typename vector<typename Range::value_type>::const_iterator;
decltype(f_v_it(set<int>())) it2 = vector<int>().cbegin();

typename抜けてただけだったんだぜ☆

816 :デフォルトの名無しさん:2013/11/16(土) 08:51:47.51
>>801
例外が使えないコンパイラだろ。
そういうコンパイラ向けにstlもどきのフリーのライブラリがあるから
それ使えばいいわけで。

817 :デフォルトの名無しさん:2013/11/16(土) 09:44:13.29
>>816
例外が使えないC++コンパイラなんてあるの?遭遇したことないんだけど。

818 :デフォルトの名無しさん:2013/11/16(土) 10:36:33.63
>>801
大抵は過去に別のプロジェクトで事故って、プログラムをよくわかんない人がそれを参考にしたとか。コピペしたとかそんなんじゃないかと思う。

あとは、いろんなOSに移植すること前提とか。

819 :815:2013/11/16(土) 11:19:59.91
起きて冷静になったら書き込み色々めちゃくちゃですまんかった

820 :デフォルトの名無しさん:2013/11/16(土) 12:06:20.43
>>817
AndroidのNDKとか初期は例外が使えなかったとかなんとか

821 :デフォルトの名無しさん:2013/11/16(土) 13:06:58.85
>>817
コンパイラ自体じゃなくて、例外をサポートするためのランタイム環境が整備されていないRTOSが昔は多かった

822 :デフォルトの名無しさん:2013/11/16(土) 13:23:41.53
規格なんて努力目標にすぎないのよ あなたも大人になれば分かるわ

823 :デフォルトの名無しさん:2013/11/16(土) 19:01:55.99
>>803
STL禁止じゃC++使う意味ないな。だから今でも組み込みはCなんだろな
小メモリのワンチップマイコンなんかでは、最大使用メモリの管理
が大変とかでnewなんかも禁止なんかな。
富豪的プログラミングだとゆとり言語が使えていいよな

824 :デフォルトの名無しさん:2013/11/16(土) 19:12:21.00
> STL禁止じゃC++使う意味ないな。

だから何でそんなに飛躍するんだよ

825 :デフォルトの名無しさん:2013/11/16(土) 19:22:20.94
ゆとりなんだろ

826 :デフォルトの名無しさん:2013/11/16(土) 19:24:37.78
>>823
C++の強さは、既にあるSTLが使えることではなくて、
STLのようなライブラリでさえも、
欲しけりゃ自分でゼロから作り込むことが出来るところにあるんだよ。

827 :デフォルトの名無しさん:2013/11/16(土) 19:25:07.58
昔EC++とかいう誰が使うんだろうって規格があってだな

828 :デフォルトの名無しさん:2013/11/16(土) 19:45:42.09
STLに相当するより高性能なライブラリはどの会社でも持ってるもんだと思ってたわ

829 :デフォルトの名無しさん:2013/11/16(土) 19:47:57.03
だから組み込みってどの程度の規模か知らんが、C++なんか使わんって

830 :デフォルトの名無しさん:2013/11/16(土) 19:54:53.55
組み込みでもC++使ってるわ。なんで嘘つくの

831 :デフォルトの名無しさん:2013/11/16(土) 20:02:17.46
組み込みって言ってもピンキリだし、ナビとか Java ですら使ってるのに C++ ないとか、いつの時代だよ (w

832 :デフォルトの名無しさん:2013/11/16(土) 20:06:07.09
ナビのアプリなんか組み込みじゃねえわ

833 :デフォルトの名無しさん:2013/11/16(土) 20:40:35.22
オレオレ帝技の前に敵なし

834 :デフォルトの名無しさん:2013/11/16(土) 21:02:15.05
最近のマイコンはワンチップでもクロック100MHz越えでオンチップROMが1MBとかあるからなあ
しかも安くてデバッグ用機能もバッチリ
組み込みでもC++を避ける理由なんて最早ないわ

835 :デフォルトの名無しさん:2013/11/16(土) 21:07:02.71
これ最後のtryのところでRuntime Errorになるんだけど、おかしくない?
http://ideone.com/JdEveI

同じコードをVC2010でやってみると、エラーにならずに"catch destructor"が
出力されるんだけど、ideone.の方は
stderr
terminate called after throwing an instance of 'char const*'
になってしまう。

836 :デフォルトの名無しさん:2013/11/16(土) 21:24:58.97
おまえらはどの組み込みマイコンでC++を実際に使っているの?

837 :デフォルトの名無しさん:2013/11/16(土) 21:25:54.46
>>835
あんたのこーどがあほです

838 :デフォルトの名無しさん:2013/11/16(土) 21:36:16.21
>>836 arm, sh, ppc

839 :デフォルトの名無しさん:2013/11/16(土) 21:37:51.71
>>838
具体的品名は?

840 :デフォルトの名無しさん:2013/11/16(土) 21:39:11.40
nvidiaのボード使った映像端末

841 :デフォルトの名無しさん:2013/11/16(土) 22:31:19.40
Linux入ってるような組み込みもあるんだし
使える環境だってあるだろ

842 :デフォルトの名無しさん:2013/11/16(土) 23:21:19.09
OSより上の層は組み込みじゃない

843 :デフォルトの名無しさん:2013/11/16(土) 23:37:57.11
>>835
やっちゃダメってことをわざとやってるようだけど?

844 :デフォルトの名無しさん:2013/11/16(土) 23:38:59.66
>>842
定義上はそれは間違い

845 :デフォルトの名無しさん:2013/11/16(土) 23:49:07.45
OSが載らないような環境でもコンパイラさえあればC++使うだろ。Cで縛る意味がない。

846 :デフォルトの名無しさん:2013/11/17(日) 00:03:49.18
>>845
OSの載せないような環境ならコンパイラあってもC++なんか使わない

847 :デフォルトの名無しさん:2013/11/17(日) 00:06:02.99
AVRはgcc使えたはずだけど、コイツでg++使うのは変態だと思う。

848 :デフォルトの名無しさん:2013/11/17(日) 00:06:30.39
組み込みなんてろくにやったことないのに組み込みの話してるんじゃないのか?

849 :デフォルトの名無しさん:2013/11/17(日) 00:11:38.79
あまり興味深い世界とも思われない。
知らないだけなんだろうけど。

850 :デフォルトの名無しさん:2013/11/17(日) 00:19:03.96
>>846
OSが載ってたらいいのか?判断基準は何なの?

851 :デフォルトの名無しさん:2013/11/17(日) 00:20:39.19
>>846
OSない環境でもC++は生産性に大きく寄与するよ(当たり前だけど)
お前さんには使えないってだけ

852 :デフォルトの名無しさん:2013/11/17(日) 00:24:05.44
>>851
とてもじゃないが使えないっつうか、使おうとも思わないって人が多いと思う

853 :デフォルトの名無しさん:2013/11/17(日) 00:27:05.70
だいたいOS載らないってことは小規模かクリティカルなもんだろ
やっぱC++なんか使わんわ
CだろうがC++だろうが、ちゃんと書けば生産性なんか変わらん

854 :デフォルトの名無しさん:2013/11/17(日) 00:27:17.84
>>835
おかしくない。規格どおり
・デストラクタが例外を投げたらそのオブジェクトは破棄されたことにならない
 (デストラクタの正常終了をもってそのオブジェクトが破棄されたとみなす)
・スタック巻き戻しによる破棄はそのブロックで正常に構築されて未だに破棄されてない自動変数が対象
・例外送出によるスタック巻き戻しの最中にデストラクタが例外を投げたらstd::terminateが呼ばれる

>>895のソースでは
1 56行でTemporary_t型の一時変数(自動変数)のデストラクタ内で例外が投げられる
2 その一時変数は例外送出時点で破棄されていない(とみなされる)
3 スタック巻き戻しで一時変数のデストラクタが呼ばれる。そして例外が投げられる
4 上記のルールによりstd::terminateが呼ばれる
となってる

855 :デフォルトの名無しさん:2013/11/17(日) 00:30:24.00
>>852
使えない奴が多いのは知ってるよ

856 :デフォルトの名無しさん:2013/11/17(日) 00:36:03.40
いまどきPCのブート直後の処理でさえC++製なのに

857 :デフォルトの名無しさん:2013/11/17(日) 00:37:36.64
C++って若い時は万能間感じるけど熟練になるとスマポと参照だけあれば他はCのままで良いじゃんと気が付くよね

858 :デフォルトの名無しさん:2013/11/17(日) 00:39:33.55
例外処理もほしい…そうなるとやっぱりポリモも必要

859 :デフォルトの名無しさん:2013/11/17(日) 00:41:40.64
>>856
PCもC++erからすれば組み込みだよな

860 :デフォルトの名無しさん:2013/11/17(日) 00:43:57.96
組み込みだと真っ先に例外が削られるわ

861 :デフォルトの名無しさん:2013/11/17(日) 00:47:14.57
>>860
昔はね

862 :デフォルトの名無しさん:2013/11/17(日) 00:49:40.75
>>835
一時変数しか作れないようにして、あとで発生した例外処理には絶対巻き込まれないようにしたってことか。
VCでエラーにならないってのは変だな。

863 :デフォルトの名無しさん:2013/11/17(日) 00:51:17.87
>>854
> おかしくない。規格どおり
> ・デストラクタが例外を投げたらそのオブジェクトは破棄されたことにならない
> (デストラクタの正常終了をもってそのオブジェクトが破棄されたとみなす)

規格にそんな記述あったっけ?
オブジェクトの「生存期間」はデストラクタ開始時点で終了してるんだけど。
「破棄されたかどうか」っていうタイミングが別にあるの?

864 :デフォルトの名無しさん:2013/11/17(日) 01:09:26.76
いまや8bitの小さなマイコンでも例外が必須でC++だよな

865 :デフォルトの名無しさん:2013/11/17(日) 01:10:27.79
>>854
~Temporary_t() に明示的な例外仕様が無いからデストラクタの特例で noexcept が適用されて、
そこから例外飛ばそうとしてるから std::terminate() ってだけじゃないの?

866 :デフォルトの名無しさん:2013/11/17(日) 01:19:16.44
>>835のソースでは
56行  temporary_t(s) << "ABCDEFGHI " << 123456789;
           (1)    (2)           (3)      (4)
(5) 57行以降のどこか

のうち(2)〜(5)の4カ所で例外が発生する可能性がある。1はない。

(2)と(3)では実際どうなのか知らんが、一応operator << が失敗しうる。
(5)57行以降のどこかで例外が発生した場合のスタック巻き戻しの処理では、temporary_t(s)は
もう破棄されているから無関係。例外多重発生は起こらない。
(4)のデストラクタ内での例外発生に関しては>>854の言う通りだったらダメだな。

867 :デフォルトの名無しさん:2013/11/17(日) 03:13:45.55
>>851>>861>>864
8bitのAVRやPICでC++使ってる例を出してくれ。
無論、RAM32バイトのチップでもC++使うんだよな?

868 :デフォルトの名無しさん:2013/11/17(日) 03:59:54.96
>>867
アホみたいな極論しか言えないのかこの低脳

869 :デフォルトの名無しさん:2013/11/17(日) 04:03:18.30
>>867
そんな貧困環境向けの極小プログラムなど何で作ろうがどうでも良い

870 :デフォルトの名無しさん:2013/11/17(日) 04:09:36.29
32バイトしかないならそりゃアセンブラで30年以上昔のやりかたでやるしかないだろうなあ(笑)

871 :デフォルトの名無しさん:2013/11/17(日) 04:37:01.12
>>868-870
なんだよ出来ねぇのか、使えねぇ回答者だなお前ら。

872 :デフォルトの名無しさん:2013/11/17(日) 04:46:10.89
いいからお前はレトロ環境でシコシコしてろよ

873 :デフォルトの名無しさん:2013/11/17(日) 05:26:19.72
無能で十分説明されることに悪意を見出すな

874 :デフォルトの名無しさん:2013/11/17(日) 05:41:17.08
他でやらかす前に学習できてよかったな。
対人だとしばらくは馬鹿扱いされるだろうし、
業務でやったら最悪損害が出てしまうからな。

875 :デフォルトの名無しさん:2013/11/17(日) 05:50:15.26
RAM32バイトで出来ることなんてたかがしれてるからどうでもいいわ

876 :デフォルトの名無しさん:2013/11/17(日) 08:28:39.93
32もあればC++動かすには十分だろ

877 :デフォルトの名無しさん:2013/11/17(日) 09:55:25.59
>>867
さすがに8bit〜ってのは皮肉だろ

878 :デフォルトの名無しさん:2013/11/17(日) 09:58:41.18
RAMが32バイトだと、コールスタックも大した数積めないだろうしね

NVRAMじゃねーのいまどき

879 :デフォルトの名無しさん:2013/11/17(日) 18:59:18.04
C++関連スレって基地外スレ化しているよな
hogeみたいな基地外がいっぱいの言語じゃしょうがないが

880 :デフォルトの名無しさん:2013/11/17(日) 19:03:33.93
C++なんて基地外ばっかだろw

boost見てみろよ
まじキモイソースじゃん

881 :デフォルトの名無しさん:2013/11/17(日) 19:06:26.59
STLの方がキモイだろ
あのキモイソースよく見れるなと毎回思ってるわ

882 :デフォルトの名無しさん:2013/11/17(日) 19:17:56.36
安定したものを素早く書けるなら美醜なんてどうでもよいわ
メジャーになったらどうせ尻尾振って賞賛するような価値観だろうし。

883 :デフォルトの名無しさん:2013/11/17(日) 20:08:19.87
キモかったとしても糞ではないからなぁ(iostreamを除く)
糞コードに溢れてる実務の癒やしの部分。

884 :デフォルトの名無しさん:2013/11/17(日) 20:22:57.97
C++は実は気合を入れて実装するとキモくなるんだよ
C++って建て増し言語だからね

885 :デフォルトの名無しさん:2013/11/17(日) 21:52:45.75
だからといって新築しようとすると傍流に堕ちるからな

886 :デフォルトの名無しさん:2013/11/17(日) 23:10:33.27
STLのソースコードみたことないですごめんなさい(`・ω・´)

887 :デフォルトの名無しさん:2013/11/17(日) 23:12:15.11
見たことないとかないだろテンプレートなんだから

888 :デフォルトの名無しさん:2013/11/17(日) 23:18:07.06
ゆとり世代はboostすら読まないらしいな
あの程度の基礎知識もなしにどうやってプログラムするんだろう

889 :デフォルトの名無しさん:2013/11/17(日) 23:25:28.18
>>888
そんなことはないと思うけど。
boostのソースからヒントを得ました
なんて若い世代かなり多いと思う。

890 :デフォルトの名無しさん:2013/11/17(日) 23:32:03.24
>>888
そういう新しいのを渋るのは年取ってる人の方が多いんじゃないか?

891 :デフォルトの名無しさん:2013/11/17(日) 23:34:49.59
>>889
メタプログラミングを覚える過程として、boostの写経という名のコピペは欠かせないな。
でも、手探りでとりあえず動いてるだけのコード群には地雷が一杯。
そして、メタプログラミング禁止令が出て、テンプレートを書いても許される層と使うこと
だけが許されてる層へと役割の細分化が進むw

892 :デフォルトの名無しさん:2013/11/17(日) 23:45:38.35
テンプレートを書くことが許されないってことあるの?

893 :デフォルトの名無しさん:2013/11/18(月) 00:03:12.80
やる気のない奴には書けないし
無駄にやる気のある奴はゴッテゴテの訳わからないライブラリを作り出す
それがテンプレート

894 :デフォルトの名無しさん:2013/11/18(月) 00:11:31.98
Qtを使ってる人って少ないの?Qtがお気に入りなんだけどさ。

895 :デフォルトの名無しさん:2013/11/18(月) 00:14:59.31
>>886
ゆっくり時間かけて見ていいよ

896 :デフォルトの名無しさん:2013/11/18(月) 00:54:18.97
>>894
LGPLってのがな

897 :デフォルトの名無しさん:2013/11/18(月) 01:00:52.10
>>894
ここスレ住人はMFC命だろ

898 :デフォルトの名無しさん:2013/11/18(月) 01:21:11.47
FA業界で装置制御GUIは未だにMFC + intel c++ compilerでやってるな

凝ったこと(最近の見栄えの良いGUI)しなければ、MFCもVC#も大差ないからな

899 :デフォルトの名無しさん:2013/11/18(月) 01:31:44.15
>>898
FAの装置制御GUIでCLじゃなくてICC使う理由が良く分らん。
最適化が重要な処理があるとか、CLのバグ避けとか…?

900 :デフォルトの名無しさん:2013/11/18(月) 02:44:11.18
>>897
GTK命です

901 :デフォルトの名無しさん:2013/11/18(月) 02:49:37.88
ドラマの話かよw

902 :デフォルトの名無しさん:2013/11/18(月) 06:57:29.41
iostreamって何がダメなの

903 :デフォルトの名無しさん:2013/11/18(月) 07:10:24.32
ダメって言っておいた方が何かかっこいいだろ
言わせんな、恥ずかしい

904 :デフォルトの名無しさん:2013/11/18(月) 10:46:03.84
>>902
「遅いから」
その一言に尽きる

設計自体は継承のデモンストレーションになっているために実際の使用に対しては
柔軟性は確かにあるが、実用性は「?」な部分が多い

今boostのメンバーに一から作らせたら全く違う物を作るだろう
boost.iostreamsのようにね

905 :デフォルトの名無しさん:2013/11/18(月) 10:50:22.77
>>904
ベンチマークとると遅くないけどな

906 :デフォルトの名無しさん:2013/11/18(月) 11:31:38.34
>>905
いや全体的に遅いし
結局出力はC関数限定になるし

907 :デフォルトの名無しさん:2013/11/18(月) 11:35:14.22
>>904
遅いってことを証明できるコード見せて

908 :デフォルトの名無しさん:2013/11/18(月) 11:53:22.37
iostreamが遅くてもstdio.hよりは速いけどな

909 :デフォルトの名無しさん:2013/11/18(月) 12:22:40.44
io.hと言わないところがミソですね

910 :デフォルトの名無しさん:2013/11/18(月) 12:37:47.08
アセンブラ厨への道を歩きたい人以外は、お薦め出来ない。

911 :デフォルトの名無しさん:2013/11/18(月) 12:48:47.88
左シフト演算子とかないわー

912 :デフォルトの名無しさん:2013/11/18(月) 13:58:44.64
>>909
io.hなんかPOSIX規格には無いはずだが

913 :デフォルトの名無しさん:2013/11/18(月) 14:03:02.18
コンソール入出力なんてちょっとしたツール作るとき位にしか使わないから
遅かろうがどうでもいいわ

914 :デフォルトの名無しさん:2013/11/18(月) 14:07:33.64
cin >> var;
という書き方がキモいです。

915 :デフォルトの名無しさん:2013/11/18(月) 14:12:29.12
>>912
Posixがいいならunistd.hで

916 :デフォルトの名無しさん:2013/11/18(月) 17:16:21.50
http://d.hatena.ne.jp/s-yata/20100726/1280138663

こういうのもあるけどな

std::ios::sync_with_stdio(false) で速くなるメンバ関数もあるという話

917 :デフォルトの名無しさん:2013/11/18(月) 18:38:24.71
速度は問題じゃなくてformatの指定が使う気にならんとか、locale設定が使い物にならないとか。std::ios_base::binaryが各プラットフォームでどういう挙動になるのかよくわかんねぇとか。
その辺使わなきゃいいんだけどね。

918 :デフォルトの名無しさん:2013/11/18(月) 18:42:07.57
localってそもそも日本じゃ使い物になってない気が

919 :デフォルトの名無しさん:2013/11/18(月) 22:58:50.18
ちょっとした図形のシミュレーションをやるプログラムを作っていて、
マウスの動きで時間を進めたり戻したりしようと思いました。
マウスを直線的に動かすとすぐ画面外にはみ出ちゃうんで、
時計回り->時間が進む、反時計回り->時間が戻る、としたいです。

回転の向きを捕えるのはこんな感じで簡単に実装できました(関数mouseConvexity)。
http://ideone.com/JvT6Ck

で、マウスのふらつきを吸収するための調整項が中途半端に残ってます。(「要調整」のコメント部分)
とりあえず機能はするんですが、こういう調整項を実行時に動的に最適化するような
プログラムってC++でうまく作れないでしょうか?

920 :デフォルトの名無しさん:2013/11/18(月) 23:38:00.88
>>919
こういうときの"点の採取"ってのは低域通過してからやるもんで
平たく言うとサンプリングした過去n点を足してnで割っとけ
nを動的にするアルゴリズムとかもある
C++関係なくね?

921 :919:2013/11/18(月) 23:47:57.22
>>920
あーサンプリングですか。そうですね。
関数側でそのための領域を保持しておきたいところですが、
呼び出し側に確保するしかないのがいまいちスマートじゃないですね。
(既存のstaticデータもそうだけど)

C++関係なさそうなだけど、どこがいいのかわかんなくてすいませんでした。

922 :919:2013/11/19(火) 00:04:43.41
俺すげーアホだわw
関数じゃなくてファンクタにすればいいんだわ。 >そのための領域確保

まあそのファクンタはstaticにしなきゃならんけど。

923 :デフォルトの名無しさん:2013/11/19(火) 00:06:28.56
>>921
簡単にいうとデータとそれに関係する関数群の関係付けしてるものがクラスだよ。
だからフィルターするクラスを作るんだ。
生の位置を突っ込んだら補正した結果を返しつつ突っ込んだ生データを内部のメンバに保持するような。

924 :デフォルトの名無しさん:2013/11/19(火) 00:21:32.72
アルゴリズム的に「〜って言語で〜は作れない」見たいなケースはまず無い。

それはそれとして、その辺の設定値はふらつきだけじゃ無くて速度も変わる。
速度の目標値が無いのにふらつきだけ消そうとしても、自動では上手く行かないだろ。
スレショルドは一応決められるけど、円の直径と速度の目標が定まらないとやっぱ安定しない。

中心決めて、10度で1カウントとか円周上XXpxで1カウントとかにしたほうが手っ取り早い気がするな。
中心は決めうちの方が楽だけど、移動範囲が縦横XXpx以上での移動範囲の中心を使っても良さげ。
XXpxとかはUIの解像度から決める値にしておけば、自動調整項自体が式から消える。

925 :デフォルトの名無しさん:2013/11/19(火) 00:22:17.66
>>921
マウスはひとつしかないんだし、ウィンドウプロシージャの case WM_MOUSEMOVE: でしか呼び出す場所ないんだろ?
関数側に過去データ確保しておけばいいじゃん。

926 :デフォルトの名無しさん:2013/11/19(火) 00:29:26.16
>>925
操作終わった時のリセットがわからんとか。
staticだと、その関数の引数で過去の移動記録破棄を指示するとか、関数のstatic変数を外から触るとか、若干キモイ事になる。

927 :デフォルトの名無しさん:2013/11/19(火) 00:35:10.31
>>926
一般論ではそう。
だけどこれは過去の点は2つしかとってないし、新しい操作との不整合はすぐ押し流されてしまって検知できないレベルだよ。

928 :デフォルトの名無しさん:2013/11/19(火) 00:43:57.92

リセットなんかせずに放置でいい、って意味ね。

929 :デフォルトの名無しさん:2013/11/19(火) 00:50:03.75
>>922
オブジェクトにデータ持たせることが目的になってるしタダのクラスだよなそれ。
確保した領域のクリアもするならそれこそ関数オブジェクトではなくなるし。

>>927
これは>>920で保存するデータ増やす事も想定した話だからまぁいいんじゃね?

930 :デフォルトの名無しさん:2013/11/19(火) 00:50:35.25
staticにする必要ないだろ
WM_なんちゃらって書いてるって事はメッセージループ周ってるんだろうからループスコープのの外に書けばいいだけ。

>staticだと、その関数の引数で過去の移動記録破棄を指示するとか、関数のstatic変数を外から触るとか、若干キモイ事になる。
関数内のstatic変数を外から合法的に触る方法なんて無いし(そりゃあ中から渡せば別)
関数の引数で中のstatic変数の破棄を指示とか若干どころかキモイの極み
そんなコード書くやつが同じプロジェクトにいたら殺意沸くわ。

931 :デフォルトの名無しさん:2013/11/19(火) 01:14:00.10
>>930
C++だとキモイの極みだが、Cでは……

strtok:第一引数がNULLならば前回からの続きを処理し、非NULLならば前回までのデータを破棄して最初から処理する。

932 :デフォルトの名無しさん:2013/11/19(火) 01:17:40.18
Cでもコンテキストを関数内で書くような奴と一緒にやりたくない
最低でも構造体渡し

933 :デフォルトの名無しさん:2013/11/19(火) 01:21:39.21
strtokはマルチスレッドが当たり前の現在の環境では恐ろしくて使えないよね

934 :デフォルトの名無しさん:2013/11/19(火) 01:31:36.58
マルチスレッド対応の_rが整備されてるだろ

935 :デフォルトの名無しさん:2013/11/19(火) 01:40:04.71
素人の質問だけど
if文で
if(条件式) 実行文;
if(条件式) 実行文;
・・・・
・・・・
とやるのと
if (条件1) {
文1;
}
else if (条件2) {
文2;
}


else if (条件n) {
文n;
}
else {
文;
}
とやるのどっちが速いんだろうか

936 :デフォルトの名無しさん:2013/11/19(火) 01:43:10.58
>>935
そもそも可換であることが少ないだろそれ
後者で書けるなら後者で書くけど

937 :デフォルトの名無しさん:2013/11/19(火) 01:51:18.04
>>936
今やってる物理学のプログラミングでどうしても気になって プログラムは門外漢なもんで
http://codepad.org/2Z1dy4Gp
この関数を何万回も計算させるんだけど速度を向上させるのにはどうすればいいんだろうか
もっといいやり方があるような気がするんだけどアホだから分からん

938 :デフォルトの名無しさん:2013/11/19(火) 01:53:14.10
>>935
後者の方が余計な条件式の判定を行わないけれど、
条件式の内容と最適化次第ではどちらも同じコードなったりする。

条件式に時間が掛かる処理を含むのでも無い限り、見通しが良い方で書いたほうが良さげ。

939 :デフォルトの名無しさん:2013/11/19(火) 01:56:28.58
>>938
そういうものか 単なる不等号の判定だからどっちでもいいのかな?

940 :デフォルトの名無しさん:2013/11/19(火) 01:57:42.80
>>934
んなこたわかってるけど、それだと内部のstaticがなんちゃらと話がつながらんだろ

941 :デフォルトの名無しさん:2013/11/19(火) 02:00:04.24
>>937
ループ構造がアホだからそこから修正。
例えば、8行目のi==(L-1)は6行目のfor文の中では不変なのだから、7行目のfor文の外で判定できる。
最適化がちゃんと効いてれば修正不要だが、効いてるか調べるか手で直すかどっちかやるべき

942 :デフォルトの名無しさん:2013/11/19(火) 02:02:22.91
>>940
>>934>>933に対するレスで、
>>933>>931で出てきたstrtokそれ自体に対する感想だし、
>>931までの流れとは関係ないんじゃね。

>>939
コンパイラ次第。

943 :デフォルトの名無しさん:2013/11/19(火) 02:05:05.82
>>941
成程 最適化が効いてるかどうか調べるには実行速度を調べればいいの?

944 :デフォルトの名無しさん:2013/11/19(火) 02:05:52.93
>>942
strtokとか関数内部でstaticを不用意に使ってるとマルチスレッドで死ぬっていういい例じゃん?

945 :デフォルトの名無しさん:2013/11/19(火) 02:09:16.07
>>943
吐き出されたコードを見るのが一番だけど、無理なら実際組んで比べてみるとか。
あと、ループ全部一緒に見えるんだけど、纏めれないの?

946 :デフォルトの名無しさん:2013/11/19(火) 02:15:15.84
>>937
こういうのはSIMDにしたい病がうずうずする
Eはオーバーフローしないのかこれ?spinが限定された値域なのかもしれんが

947 :デフォルトの名無しさん:2013/11/19(火) 02:15:49.98
>>945
>吐き出されたコードを見るのが一番だけど、無理なら実際組んで比べてみるとか。
アセンブラ見るのか? 実際組んで比べたほうがいいっぽいな。。
>あと、ループ全部一緒に見えるんだけど、纏めれないの?
配列の内容が[x][y][z][方向]で各軸で[方向]が違うのと 後 条件文で周期的境界条件を課してるから違うと思うよ
プログラム的に同じにできるってんなら俺には分からない範囲

948 :デフォルトの名無しさん:2013/11/19(火) 02:18:58.57
>>946
>Eはオーバーフローしないのかこれ?spinが限定された値域なのかもしれんが
spinは実は1,-1,0のみを取る配列
実行結果は論文の理論値と一致してるからアルゴリズム自体が間違ってるっていう可能性は低いかなーと思ってる
問題は単純に下手で実行速度が遅い点
SIMDつーのも勉強したいな

949 :デフォルトの名無しさん:2013/11/19(火) 02:21:31.19
>>948
なる。3値ならいいんだ。SIMDの出る幕でもない

950 :デフォルトの名無しさん:2013/11/19(火) 02:23:37.72
>>947
結果はそれら全部足してるだけじゃん?

951 :デフォルトの名無しさん:2013/11/19(火) 02:31:59.31
>>950
いやよく見りゃ分かるけど各軸のforの中は違うと思うよ

952 :デフォルトの名無しさん:2013/11/19(火) 02:35:12.27
>>937
ifを4個書いてるのは端末処理かよ
速度重視するときこういうのはループの外に出すもんだ

953 :デフォルトの名無しさん:2013/11/19(火) 02:46:01.71
>>952
ありがとう
ifで分岐させた後にループすべしって事か
そうする

954 :デフォルトの名無しさん:2013/11/19(火) 02:50:22.17
>951
ん?まずこうできないの?って聞いてるんだけど。
codepad.org/IYfLhMKL


おまけLが大きいなら並列化
codepad.org/7XhkkqRd
とか適当に書いたから3個までしかスケールしないけど

リンク禁止とか言われるからスラッシュ二つまでつけてくれ

955 :デフォルトの名無しさん:2013/11/19(火) 02:59:59.68
>>954
これは恥ずかしい
こっちのほうをなんで思いつかなかったんだろw
並列化ってのがあるんだな知らなかった
どうもありがとう

956 :デフォルトの名無しさん:2013/11/19(火) 03:14:19.67
失礼します。
変な質問になりますが、
 for(int i=0; i<2; i++){
  ●ここですぐiの中身を確認する
 }
のように、for文の式でまず変数「i」を宣言し、同時に0を代入するも
「17515237」などとわけもわからない値が入っている場合があります。
別のなにかが作用してそうなるのならまだしも、宣言してすぐにそんな値が入っているんです。
 for(int i=0; i<2; i++){
  →ここですぐiの中身を確認してみました
 }
代入させたはずの0では無く、別の値が入るというのは、
どういう原因が考えられますか?
ループなりなんなりしたのであれば調べる箇所も目星はつけられますが
宣言後すぐ調べても変な値が入っているので原因がわからず、途方にくれています。

957 :デフォルトの名無しさん:2013/11/19(火) 03:19:24.00
確認のつもりで printf("%d", i); を printf("%d",&i); とでもしてるとか

958 :デフォルトの名無しさん:2013/11/19(火) 03:41:19.16
>>957
レスありがとうございます。
しかし、そのようなことはしておりません。
ちなみに確認はブレークポイントをつけて、デバッグにて確認しています。

959 :デフォルトの名無しさん:2013/11/19(火) 03:47:12.55
>>956
デバッガーじゃなく、printfで表示させるとどうなる?

960 :デフォルトの名無しさん:2013/11/19(火) 03:49:47.88
>>937
これを>>941>>952>>953すると
  for(k=0;k<L;k++){
    for(i=L-1,j=0;j<L-1;j++){◆1}//(L-1)回、右端?
    for(i=0,j=L-1;i<L-1;i++){◆2}//(L-1)回、下端?
    for(i=L-1,j=L-1;i<L;i++){◆3}//1回、右下?
    for(i=0;i<L-1;i++){
      for(j=0;j<L-1;j++){◆4}//(L-1)回×(L-1)回、その他?
    }
  }
こうか。ifはきえる。

961 :デフォルトの名無しさん:2013/11/19(火) 04:02:17.11
>>959
上下左右それぞれのキーを押すと
そのfor文箇所が実行されるようになっていますが、
それと同時にfor文の「i」の変数をprintfで表示も実行させてみました。
すると、押した(iが作成された)瞬間に例のすさまじい桁の値が表示されます。
ビルドしなおしてみるに、毎回「i」の中身の数値は違っているようです。
なぜか「-0」の時もあります。

どういうことなんでしょうか、、、。

962 :デフォルトの名無しさん:2013/11/19(火) 04:09:05.36
"%d"で-0はでねー

963 :デフォルトの名無しさん:2013/11/19(火) 04:14:34.30
>>961
前後のコード晒せよ
隣の変数からオーバーランしてきてる可能性もあるし文章じゃ解らん

964 :デフォルトの名無しさん:2013/11/19(火) 04:25:11.46
>>962
すみません、そこは癖で%fで表示させています。
intを表示するなら問題はないかと思います。

>>963
それが出来れば話が早そうですが
ちょっと量がすさまじいので、、、すみません。

自分が知りたいのは、そういう例があるか否か、
経験豊富な方が経験されていないかな、と思って。

965 :デフォルトの名無しさん:2013/11/19(火) 04:26:23.17
int i=0;で作成した途端に、オーバーランしてきたのが影響を与えるって
あり得るんでしょうか?

966 :デフォルトの名無しさん:2013/11/19(火) 04:29:16.99
>>964
おい、ちょっと待てよ

967 :デフォルトの名無しさん:2013/11/19(火) 04:32:08.57
>>964
問題ありまくりだよ
なんか色々と根本的な知識不足がありそうだな・・・

968 :デフォルトの名無しさん:2013/11/19(火) 04:49:49.95
え、%fだと問題ありますか??
でも、まあ表示の仕方がわかってないのと、
今回のバグは関係ないですよね

969 :デフォルトの名無しさん:2013/11/19(火) 04:51:12.26
なんだ釣りかよ

970 :デフォルトの名無しさん:2013/11/19(火) 04:53:07.93
ちょっと待ってください。
逆に気になりました。

わかりました。
%fがまずい理由を解説してくださいませんか?
お願いします、、、

971 :デフォルトの名無しさん:2013/11/19(火) 04:58:34.40
>>970
printfの使い方くらい調べなよ
まずい理由を説明する以前の問題だ

972 :デフォルトの名無しさん:2013/11/19(火) 05:01:34.78
調べましたよ。
自分の思った通りの解説ばかりです。
%f [-]dddd.ddddddの形式で出力する
これがint型を表示するのになにか問題があるんですか?

マジでわかりません。

973 :デフォルトの名無しさん:2013/11/19(火) 05:08:46.52
>>972
マジで悩んでるなら初心者スレに逝け
ほとんどの処理系で8バイトdoubleを受ける%fに
4バイトintをあてがって問題がないと考えるロジックがわからん

974 :デフォルトの名無しさん:2013/11/19(火) 05:10:33.28
>>972
C言語入門書を一から読み直しなさい

975 : ◆QZaw55cn4c :2013/11/19(火) 05:13:36.79
>>964
%f に紐付ける変数は double (かC99 なら float)
%f に整数型を渡すな、渡すなら (double)でキャストする

976 :デフォルトの名無しさん:2013/11/19(火) 05:14:16.23
>>973
いや、細かいこと言えば、doubleやint、floatなどで
合わせたほうがいいけど、
ただ、変数の中身を表示させるだけですよ?
普段はよくdoubleの表示でつかっているんで、%fで打ってるのを
面倒だからint相手でも%f使っただけです。
容量的な問題を言ってるなら、それこそ重箱の隅、
もしくは揚げ足とりなだけに聞こえるんですけど。
intをdoubleで表示して数値が変わるわけでもなし。

977 :デフォルトの名無しさん:2013/11/19(火) 05:17:53.42
絶対釣りだと思うんすよ
だってここまでの奴こんな所来ないもの

978 :デフォルトの名無しさん:2013/11/19(火) 05:18:50.88
ぶったぎってすみません。
RPGのプレイヤーが壁に当たる処理において
壁にめり込んだ→壁の外に戻す、の処理をさせてるんですが
めり込んだのが表示されてから
ずいっと戻る感じになってしまうですよ。
壁の方向を押し続けてもめり込まずに止まるようにしたいんですけど
どうすればいいですか?

979 : ◆QZaw55cn4c :2013/11/19(火) 05:23:42.65
>>976
>細かいこと言えば、doubleやint、floatなどで合わせたほうがいいけど、
細かいことではなくて重要なことだ
>押した(iが作成された)瞬間に例のすさまじい桁の値が表示されます。
当然の結果だね
わからないのなら、まず「合わせた」ほうがいいんじゃないか?

980 :デフォルトの名無しさん:2013/11/19(火) 05:26:52.67
cは諦めてjavascriptでもやっとけ

981 :デフォルトの名無しさん:2013/11/19(火) 05:31:31.49
javascriptはええぞー、ぜーんぶdoubleだ

982 :デフォルトの名無しさん:2013/11/19(火) 05:41:04.87
>>979
あのですね、ものすごい桁が問題なのではないんですよ
そんなの%fを使ってるんで当たり前でしょ。
int i=0;
のiを%fで表示して、0.00000000000みたいに表示されてる〜って騒いでるんじゃないんですよ

5678909.8765000000000みたいな感じで表示されてるから騒いでるわけで。

そこで、%fのせいだ、なんて言われるほうが「はい?」ってなるんですけど
まあいいです。
わからないんですよね?
自力でやります、ありがとうございました。

983 :デフォルトの名無しさん:2013/11/19(火) 05:48:03.83
>>982
疑問が解決したようで、安心しました。
私の方で[回答マーク] させていただきました。
また疑問点などありましたら、Answers をご利用くださいね。

984 :デフォルトの名無しさん:2013/11/19(火) 06:13:16.58
>>982
はいはい言い訳とかいいから初心者ならコードで試す癖身に付けろ
http://codepad.org/tm7TJo1d

985 :デフォルトの名無しさん:2013/11/19(火) 06:32:04.74
あの〜

986 :デフォルトの名無しさん:2013/11/19(火) 06:32:51.49
>>978なんですけど…スルーっすか?

987 :デフォルトの名無しさん:2013/11/19(火) 06:36:04.85


988 :デフォルトの名無しさん:2013/11/19(火) 06:46:46.82
>>986
手前で処理すりゃいいだけだろボケ

989 :デフォルトの名無しさん:2013/11/19(火) 06:53:57.96
>>988
壁際で止まる処理の皆さんが手前処理してるんでしょうか?
要は、移動先を先に確認してってことですよね?
そのやり方を使わずに、自分が触れたらにしたいんですけど
それだと無理なんでしょうか?

990 :デフォルトの名無しさん:2013/11/19(火) 07:03:02.48
>>982
intをfloatやdoubleとして解釈などすると値が無茶苦茶に壊れる。0は0な場合が多いが保証も無い。
それに加えてdoubleは変数のサイズが異なるので、前後にある無関係なデータを値として解釈するので当然無関係な値が出る。
さらに浮動小数点数の引数は数値のスタックではなくFPUのスタックを使う場合があるので、その場合も無関係なデータが使われる。
浮動小数点数と整数を変換できるのは、それぞれがどんなデータ型かをコンパイラが正しく解釈して変換するから。
printfは型情報が一旦消滅するので、正しい型で引数と書式を書かないと大抵異常な動作をする。

>>978>>989
めり込んでから戻すまでの間に描画が入るからそうなる。
描画前に戻すか、めり込む前にキャンセルするかすればよい。

991 :デフォルトの名無しさん:2013/11/19(火) 07:24:02.45
>>989
だから描画手前で衝突判定の処理すりゃいいだけだろ
表示されてしまうじゃねーよさせんなよ

992 : ◆QZaw55cn4c :2013/11/19(火) 07:42:35.33
>>982
>5678909.8765000000000みたいな感じで表示されてるから騒いでる
int を %f で表示させようとするからそうなる

993 :デフォルトの名無しさん:2013/11/19(火) 07:47:42.04
釣りに構うなよクソが

994 :デフォルトの名無しさん:2013/11/19(火) 08:07:53.38
>>982
%fを指定したときは対応する実引数の型がfloatまたはdoubleでなければならない。
intを渡すのはundefined behavior

995 :デフォルトの名無しさん:2013/11/19(火) 08:09:12.10
doubleのくるべきところに、intおいても、自然に変換される。そうおもってるんだろ?
でも、printf系の、「なんでも置けるところ」は、必ずしもそうじゃない。

それが、C/C++の良さでもある。Cにようこそ。

996 :デフォルトの名無しさん:2013/11/19(火) 08:12:08.31
C++というより、Cだな。
C++ならオーバーロードで解決だ。

997 :デフォルトの名無しさん:2013/11/19(火) 08:47:41.98
次スレが無かったのでたてた

C++相談室 part107
http://toro.2ch.net/test/read.cgi/tech/1384818417/

998 :デフォルトの名無しさん:2013/11/19(火) 09:12:15.72
ごくろうさま

999 :デフォルトの名無しさん:2013/11/19(火) 09:42:04.54
美しすぎる意味

1000 :デフォルトの名無しさん:2013/11/19(火) 09:51:25.23
そしてQZは相変わらず>975で大嘘を書くのであった。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

213 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)