板検索:
スレを勃てるまでもないC/C++の質問はここで 24 (1013)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2015/11/28 13:30:34  ID:S1e+2GUN.net(2)


2
デフォルトの名無しさん[sage]   投稿日:2015/11/28 13:42:54  ID:S1e+2GUN.net(2)
誰か書いてー
即死する

3
デフォルトの名無しさん[sage]   投稿日:2015/11/28 13:58:59  ID:u5grs2xF.net
1乙

4
デフォルトの名無しさん[sage]   投稿日:2015/11/28 20:31:40  ID:JroX99O/.net(2)
ものすごい下らないことですが質問です。
こんな感じのクラスがあって
class A {
public:
&nbsp;&nbsp;std::unique_ptr<int[]> xxx = nullptr;
private:
&nbsp;&nbsp;void reset_xxx(size_t n) /* noexcept */ // <- このコメントを外したい
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;xxx.reset(new(std::nothrow) int[n]);
&nbsp;&nbsp;/* new が失敗したときはここでどうにかする */
&nbsp;&nbsp;}
};
(1)
reset_xxx に noexcept 指定子をつけたいのですが、
int のような基本型、あるいはその配列に対する delete は
例外を投げないことが保証されているんでしょうか。
あるいは POD ではどうでしょうか。
POD でなくても、デフォルト定義のデストラクタを持っているなら?
(2)
上記のクラスで xxx を読み取り専用として扱うとき、
std::unique_ptr<int[]> xxx = nullptr;
の代わりに
std::unique_ptr<const int[]> xxx = nullptr;
とした方がいいでしょうか。
宗教上の問題になるのでしょうか。
コメント1件

5
デフォルトの名無しさん[sage]   投稿日:2015/11/28 20:36:01  ID:JroX99O/.net(2)
わあ、nbsp のつもりがひどいことになってしまいました。
クラスを再掲します。インデントは全角スペースにしました。
class A {
public:
  std::unique_ptr<int[]> xxx = nullptr;
private:
  void reset_xxx(size_t n) /* noexcept */ // <- このコメントを外したい
  {
    xxx.reset(new(std::nothrow) int[n]);
    /* new が失敗したときはここでどうにかする */
  }
};

6
デフォルトの名無しさん[sage]   投稿日:2015/11/29 20:15:17  ID:+8PPW4GA.net
>4
(1)については、
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
の、3.7.4.2.3に
If a deallocation function terminates by throwing an exception, the behavior is undefined.
って書いてある。だから例外投げるデストラクタの存在は無視して良いと思う。

あとnewは例外を投げるとすればstd::bad_alloc以外は投げない事になってるのと、
その場合にはそのサイズのメモリの確保は出来ない事になってるので
素直にstd::terminate投げるなりexit呼ぶなりしても良いと思う。

(2)については、(const_cast出来るって意味で)本当に書き換え不能な領域を実行中に作るのは無理なので
書き換えしないでねって他のプログラマに表明する以上の意味は無いと思う。

7
片山博文MZ ◆T6xkBnTXz7B0 []   投稿日:2015/11/29 20:30:03  ID:RQ97x6ZU.net
「FM音源をあやつって正しく音を出したい」
OpenAL+ALUTと、ciscさんのFM音源エミュレータ
「FM Sound Generator」を使って、正しく音を出したい。

https://github.com/katahiromz/fmgengen2/blob/master/sample.cpp
https://github.com/katahiromz/fmgengen2

おかしな音が出ます。たぶんFM音源の使い方が間違っています。
修正方法を教えて下さい。ドレミの音が出るようにして下さい。よろしくお願いします。
コメント1件

8
デフォルトの名無しさん[sage]   投稿日:2015/11/30 13:51:44  ID:VtHFUkMk.net(3)
unsigned short同士の掛け算がunsigned int ではなくてintに昇格するのはどうしてですか?

9
デフォルトの名無しさん[sage]   投稿日:2015/11/30 20:19:20  ID:luHPgjr1.net
unsigned shortが int に拡張されるからでは

10
デフォルトの名無しさん[sage]   投稿日:2015/11/30 21:26:57  ID:VtHFUkMk.net(3)
その仕組みはわかるんですけど、そこでどうしてunsigned intではなくてintでなければならないのかがわかってません。
short 2バイト int 4バイトだとして 65535 * 65535 の結果はINT_MAXより大きいですが、unsigned intの範囲で安全に表現できますよね。
どうして不確からしさが増すような方向への変換がデフォになってるのかという疑問もあります。

11
デフォルトの名無しさん[sage]   投稿日:2015/11/30 21:42:20  ID:jWn5VC7w.net
unsigned short × unsigned short がどうこうではなく
計算時に unsigned short が int に拡張されるってだけでしょ
拡張された状態で乗算するから結果もintになるって

12
デフォルトの名無しさん[sage]   投稿日:2015/11/30 22:19:42  ID:VtHFUkMk.net(3)
unsigned shortがintに拡張されてから計算されるというのは最初からわかってるんですが、
unsigned shortの拡張される先がunsigned intではなくてintでなければいけない理由がわかっていないんです。
下の2行はunsigned intにしておけば掛け算にたいしても安全ではないか、ということです。

現実的ではないのかもしれませんがintが2byteの場合だと
unsigned short * unsigned shortの結果はunsigned int*unsigned intと一緒の結果ですよね。
それがint 4byteの場合だと結果はint*intになってINT_MAXをオーバーフローして困ったことになると思うんです。

なんでそうなってしまうかといえば、unsigned intではなくてintに変換されてから計算されるからです。
どうしてそのようになっているのですか?
コメント3件


13
4[sage]   投稿日:2015/11/30 22:38:13  ID:Dn8P3OaQ.net
>> 6
ありがとうございます。
(2) については仰るとおりで、まさにそれがやりたいことだったので、
const はつけておくことにします。

(1) については…… なんていうか、ちょっと聞きたいことと違っていました。
> 例外投げるデストラクタの存在は無視して良いと思う
というのは
「どうせ例外が発生したときの挙動が undefined なんだから、
 コンパイラが速いコードを生成するよう noexcept はつけててもいい」
ということだと理解したのですが、ぼくが noexcept で表現したいのは
「この関数はいつ呼ばれても(特に関数失敗時にも)意味のある値を返す」
ということなんです(これって変な考えなんでしょうか)。
なので xxx.reset が例外を投げうるなら noexcept は外したいです。
むしろ未定義動作をする可能性がある関数である、ということを強調して
コメントにでも書いておきたいくらいです。

とはいえ常識的に考えて、ヒープが壊れていない限り int[] の delete[] が失敗することは
ないですよね……。うーん。

14
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/11/30 23:17:12  ID:UQmO47jh.net
>7
他力を借りて解決しました。
http://katahiromz.bbs.fc2.com/reply/10466094/34/

15
デフォルトの名無しさん[sage]   投稿日:2015/11/30 23:56:14  ID:qSWjFIuy.net
>12
じゃあさ、unsigned long * unsigned long はどうすればいいと思う?

16
デフォルトの名無しさん[sage]   投稿日:2015/12/01 09:09:35  ID:vya/mPuO.net
>12
unsignedにキャストする処理まで入れてないだけだろ
一般的には整数演算器の入出力はsigned int
intが何ビットかはCPUコアに依存する

17
デフォルトの名無しさん[sage]   投稿日:2015/12/01 11:46:59  ID:E/WRWJc0.net
前スレの>14で
「プログラムが終了する際にmallocした領域をイチイチfreeする奴は馬鹿だ、という情報工学の先生がいたなー
こんなセンセーに教育された学生はうちの会社にはいらないw 」
とあるんですが、これはその先生が間違っているということですか?
そうであるなら理由を教えてくれますか?
コメント2件

18
デフォルトの名無しさん[sage]   投稿日:2015/12/01 13:21:42  ID:YGJMPkGb.net
>12
そういう仕様としか言いようがないが‥
K&Rでは符号が保存され、あなたが期待するunsigned intで計算される仕様になっている
ANSI Cはintで表現できるならintになる仕様になっている
エキスパートCプログラミングによると、ANSIの方は値を保存するという考えらしい

19
デフォルトの名無しさん[sage]   投稿日:2015/12/01 14:34:40  ID:wfTLHpyu.net
>17
ある意味では間違っていて、ある意味では正しい。

・mallocされたメモリがプログラム終了時にきちんと開放されるかどうかはOS依存(Cの仕様上は開放されない事になってる)
・非常に長く動くプログラムの場合、mallocしたものは必要に応じて開放しなければいつかメモリが足りなくなる
・mallocされたメモリをプログラム終了時までにfreeしない方がいいとはCの仕様書には書かれていない
・人を馬鹿にしてる
という意味では常に先生が間違っている。

・mallocされたメモリはプログラム終了時までに絶対にfreeしなければならないとはCの仕様書には書かれていない
・malloc/freeの実装によっては、malloc/freeする順序によっては非常に重くなり、プログラム終了時にOSが回収したほうが速くなることがあり得る
という意味では先生は正しい。

20
デフォルトの名無しさん[sage]   投稿日:2015/12/01 18:30:22  ID:4XFiGbBF.net
>17
その話しの流れが読めないので想像ですが。

mallocした領域をfreeせずにプログラムを終了させた場合、その領域がどうなるかはC言語の仕様では規定されていないと思います。
言い換えれば環境(処理系やOS)に依存した挙動になるでしょう。
「freeする奴=バカ」と教え込まれた学生が会社に入り、環境ごとの挙動を調べることなく盲目的に「終了時のfreeは不要」を信じてコーディングしたら‥
アカデミックな世界ではいざしらず、実務の世界では、裏付けもない思い込みでプログラムを組まれては、たまったものではありません。

おそらくそういう事が言いたかったのではないでしょうか?
#というか情工の先生で軽々しくそんな事を言う人はいないと思いますので、おそらく「ネタ」じゃないですかね。
コメント1件

21
デフォルトの名無しさん[sage]   投稿日:2015/12/01 21:54:03  ID:lP+cizb6.net
>20
規定されてる。規格書よんでから出直しなさい。

22
デフォルトの名無しさん[sage]   投稿日:2015/12/02 17:40:34  ID:Cj5Jy42r.net(3)
INT_PTRが良く分かりません。単なるint型と考えていいのでしょうか?
わざわざPTRという名前が付いているのは、ポインタのサイズと同様にそのサイズが環境に一致することを示すため??
コメント2件

23
デフォルトの名無しさん[sage]   投稿日:2015/12/02 17:51:28  ID:SG5bn8pD.net
>22
単なるint型は整数型で、整数が入る
INT_PTR型はポインタ型に等しい幅を持つ整数型で、ポインタ型をどうしても整数型にキャストしたい時に使うらしい。

以下引用

ポインタは int、LONG、ULONG、DWORD のいずれの型にもキャストしないでください。
ビットのテスト、ビットの設定とクリア、またはポインタの内容の操作のためにポインタを
キャストする必要がある場合は、UINT_PTR 型または INT_PTR 型を使用します。
これらの型は、32 ビット版の Windows と 64 ビット版の Windows の両方のポインタに合わせて
サイズが変更される整数型です (たとえば、32 ビット版の Windows の場合は ULONG 型、
64 ビット版の Windows の場合は _int64 型に変更されます)。
https://msdn.microsoft.com/ja-jp/library/aa384242.aspx
コメント1件

24
デフォルトの名無しさん[sage]   投稿日:2015/12/02 18:07:06  ID:tKolsFeX.net(2)
>22
> ポインタのサイズと同様にそのサイズが環境に一致することを示すため
大体あってる。ポインタを安全に整数として扱うための型が INT_PTR。
64-bit 環境の Windows だと int 型が 4 バイト、ポインタが 8 バイトで
ポインタを int 型の変数に格納できない。
32-bit 環境で int 型にポインタを格納できたのはたまたま int 型とポインタ型の
サイズが一致していたから。

ついでに言うと c99 で intptr_t と uintptr_t 型が仕様として定義されている。
もしも今後 Windows 以外の環境への移植を考えるならそちらを使うようにすべき。

# どうでもいいけど、Windows SDK って何か変な型を定義してるよね
# DWORDLONG (UINT64, ULONG64, ULONGLONG 含めすべて uint64_t と同じ) とか
# HALF_PTR (intptr_t の半分のサイズ) とか LONG_PTR (INT_PTR との違いが分からん) とか
コメント1件

25
デフォルトの名無しさん[sage]   投稿日:2015/12/02 18:33:27  ID:Cj5Jy42r.net(3)
丁寧なご回答ありがとうございます。

DialogBox()APIの戻り値が、32bit時代?はint型だったと記憶しているのですが、
最近調べたら同戻り値がINT_PTR型になっていたため疑問を持ったという経緯なので、キャストしたいわけではありません。
最初INT_PTRという記述を見たとき、int型の変数へのポインタなのかな、と感じたので。でもそれだったらLPINTかなと思ったり。

>24を見て何となく理解出来ました。
全てのアドレスを格納できる必要があるポインタは64bit環境では当然64bit、
ところがint型は64bit環境でも32bitのままだったんですね。

でも何でDialogBox()の戻り値はINT_PTRである必要があるんだろう。
32bit環境で32bit長、64bit環境で64bit長になってくれる変数が他に無かったのだろうか…
コメント1件

26
24[sage]   投稿日:2015/12/02 18:47:49  ID:tKolsFeX.net(2)
>25
ポインタを含む任意の値を返すためだと思う。
DialogBox の戻り値は EndDialog の戻り値なわけだけど、
たとえば生成したダイアログ側から構造体を返したいとき、
戻り値が INT_PTR なら malloc とかで取ってきたアドレスをそのまま返せる。

> 32bit環境で32bit長、64bit環境で64bit長
大事なのは >23 で言われてる通り「ポインタ型に等しい幅を持つ整数型」ということ。
いま自分が使っているシステムが主に 32/64-bit だからといって、
過去もずっとそうだったわけじゃないし将来ずっとこのままなわけでもない。
じゃあそのとき DialogBox の戻り値は何になって欲しいか、と言われれば、
「せめてポインタが格納できるサイズの型」ということになる。
それならどんな値でも返せるから。
コメント1件

27
デフォルトの名無しさん[sage]   投稿日:2015/12/02 19:15:43  ID:Cj5Jy42r.net(3)
>26
な〜るほど、アドレスを返すこともあると考えれば、INT_PTRを使う事は無理矢理なことではなく、妥当なことに感じますね。
32bit時代にintで受けてたのが多少無理矢理だったとも言えるのかな。4バイトを受けられれば何でも良かったんでしょうけど。

# いっそ「PTR型」とか「SYS型」とかにして使う側でキャストするようにした方が誤解が無いんじゃないかと思ったり
# WinAPIでは昔から色々な型を使ってて覚えるのが面倒臭かったですね

28
デフォルトの名無しさん[sage]   投稿日:2015/12/05 12:09:57  ID:XDnkwO5X.net
関数を作るとき、引数にポインタを渡すことで実質的な返り値にできるテクニックって普通に返り値を返すのとどう使い分けれるべきなんですか?
コードの可読性が下がる代わりに複数出力に対応できるっていう認識なんですが、わかりやすさとか保守性(人間の都合)以外に推奨される理由とかやめた方がいい理由はありますか?

int power(int a){return a*a;}

void power(int ain, int* aout){*aout=ain*ain;}
みたいなやつです
コメント4件

29
◆tAo.kQ2STk [sage]   投稿日:2015/12/05 16:27:33  ID:3X0n/q/1.net(2)
>28
他にも、構造体を返す代わりに構造体へのポインタを受け取っておいて一部だけ変更して返すとか
void move_up(Position* p, double distance) {p->y -= distance;}
デフォルトの値を受け取ってある条件で書き換えるが、書き換えた場合に引数として渡された元の値は不正になる場合とか
void my_realloc(void** p, size_t size) { *p = realloc(*p, size); } // 色々省いた!
幾つか使い道はあるけど。

やめたほうがいい理由として他には、純粋関数スタイルで書けなくなるってのがあるな。
add(a, b, &t);
mul(t, c, &d);
って書くのと
d = mul(add(a, b), c);
って書くのとは違うスタイルになるけど、後者を前者に直すのは簡単でもその逆は簡単じゃない。

30
デフォルトの名無しさん[sage]   投稿日:2015/12/05 16:41:03  ID:WsL2Ug/J.net
>28
計算結果を引数で受け取り、処理結果を戻り値で返す。

良くあるパターン。

31
デフォルトの名無しさん[sage]   投稿日:2015/12/05 17:29:21  ID:KdBqlpoa.net(2)
>28
なんらかの制約があり仕方なく使わざるをえない場合のみ泣く泣く使うものであり推奨している個人や団体は存在しない

32
デフォルトの名無しさん[sage]   投稿日:2015/12/05 17:44:53  ID:4CEShJeO.net(2)
禁止する規約も見たことないけどな。
どちらがいい悪いじゃなくて、単一の戻り値を返す関数として書けない場合に
普通に使えばいいだろう。

33
デフォルトの名無しさん[sage]   投稿日:2015/12/05 17:58:29  ID:KdBqlpoa.net(2)
ひとつの戻り値に出来ない時点でおかしな事が起こってるか起こりつつある
複数の同じ型の返り値ならば本来そこで必要なものはコレクションだ
異なる型の複数の戻り値ならば本来そこで必要なのはそれを包含する別の型だ
必要な型が定義されていないという設計ミスの兆候から目を背けてはいけない
手抜きのタプルや参照渡しに逃げてはいけない
コメント2件

34
デフォルトの名無しさん[sage]   投稿日:2015/12/05 18:44:26  ID:4CEShJeO.net(2)
なんか変なこと言い出したぞ。
>33個人の主張以外に一般に認められた規約/ガイドラインってあるかねぇ?

35
デフォルトの名無しさん[sage]   投稿日:2015/12/05 18:47:22  ID:22zPQN1u.net
>33
> 異なる型の複数の戻り値ならば本来そこで必要なのはそれを包含する別の型だ
> 手抜きのタプル
「それを包含する別の型」がタプルなんじゃないの

ていうか、個人的に問題になるのはエラー処理に関することが多い
long long int を返す関数で「失敗」を表すにはどうしたらいいのか、とか
で結局、戻り値(にしたかったもの)は引数で、エラーが起きたかどうかは戻り値で
返すことが多い
別に俺だけじゃなく、ぱっと思いつくとこだと zlib の compress なんかもそうだよね
deflate の結果は引数で返して、成功/失敗を戻り値で返す
snappy だと例外を投げるんだっけ

36
デフォルトの名無しさん[sage]   投稿日:2015/12/05 20:59:15  ID:wHZuCpe8.net
返り値は全部ブールにして、値取得は引数で行うのをよく見るけど
これって普通なん?
コメント3件

37
デフォルトの名無しさん[sage]   投稿日:2015/12/05 22:41:31  ID:3X0n/q/1.net(2)
>36
if文を使って成功したかどうか判定するんだから、そういう風に作ることも出来る。

構造体へのポインタを返すのでも同じ事が出来るけど。
if (auto p = foo()) {
printf("%d\n", p->value);
}
とか
auto p = foo();
if(!succeed(p)) {
return;
}
とか。
コメント1件

38
デフォルトの名無しさん[sage]   投稿日:2015/12/06 03:26:24  ID:+ZBuFdaM.net(2)
その構造体のメモリはいったいどこから…
スマートポインタとか使ってメモリがつがつ消費するのがイマドキの書き方なのかな

>36
わりと普通。下手に「-1は失敗」とかやるよりシンプルで分かりやすい
コメント1件

39
デフォルトの名無しさん[sage]   投稿日:2015/12/06 08:50:47  ID:cIZcNmeU.net
イマドキかどうかはともかく、
「スマートポインタを使う = メモリがつがつ消費する」
っていう >38 の理解(そう読める)はどうなの

40
デフォルトの名無しさん[sage]   投稿日:2015/12/06 13:45:34  ID:+ZBuFdaM.net(2)
>37みたいな使い方=メモリがつがつ消費する」ね
がつがつってのは容量的に沢山使うって話じゃなくて
無秩序にとか気軽にとか… うまい言葉が見つからないけど

41
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:31:37  ID:iigA/d+A.net
boolにキャスト出来る構造体をifで受け取るのならどう?

42
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:35:41  ID:4bjdt2kC.net
普通に構造体を返せばよいだけなのに,なぜそんなに凝ったことを推奨するのか?

43
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:42:02  ID:w0JG1OnY.net
>36
たまに見るね。Windowsの関数にそういうのが多い気がする。
fopenとfopen_sとか。
返り値の値域がint全体で、かつ、成功失敗を返す場合は
そういうのもありだと思う

44
デフォルトの名無しさん[sage]   投稿日:2015/12/06 18:39:35  ID:Z7509Thm.net
>28
戻り値がint型だからint型で受け取るのが良いけど
他の型で受け取れない(暗黙的な型変換)ってのがあるかな

あとその関数で言えば、数式の一部として利用できない
前者なら power(a)+b*2 のような式も書けるけど後者だと一回結果を受け取らないといけないよね
sqrtなんかもそう

45
28[sage]   投稿日:2015/12/07 18:34:12  ID:PDqN2Ufp.net
ありがとうございます
色々使い方があるんですねm(_ _)m

46
デフォルトの名無しさん[sage]   投稿日:2015/12/08 20:22:24  ID:BztczKM1.net(3)
ヘッダ周りで混乱しています。ご教授おねがいします。
下のプログラムをそれぞれA.h, B.hのヘッダに書いて動作させるにはどうしたらいいでしょうか。


/*Aクラスの関数からBクラスのprivateメンバにアクセスする*/

class B;

class A {
int ia;
public:
void aFunc(B *b_ptr);
};

class B {
int ib;
public:
friend void A::aFunc(B *b_ptr);
};

void A::aFunc(B *b_ptr) {
b_ptr->ib;
}
コメント1件

47
デフォルトの名無しさん[sage]   投稿日:2015/12/08 20:23:21  ID:BztczKM1.net(3)
私が今書いているのが下のものです。
// A.h -----------------------------
#pragma once

#include "B.h"
class B;

class A {
int ia;
public:
void aFunc(B *b_ptr);
};

void A::aFunc(B *b_ptr) {
b_ptr->ib;
}
// -----------------------------------
// B.h -------------------------------
#pragma once

#include "A.h"
class A;

class B {
int ib;
public:
friend void A::aFunc(B *b_ptr);
};
// -------------------------------------
visual studio 2015で以下のエラーが出ています。
エラー C2248 'B::ib': private メンバー (クラス 'B' で宣言されている) にアクセスできません。 A.h 13行
エラー C2027 認識できない型 'A' が使われています。 B.h 9行
コメント1件

48
デフォルトの名無しさん[sage]   投稿日:2015/12/08 21:33:55  ID:y1mdlUK+.net
以下のコードについて、Win+Mingw 上での結果と Ubuntu 上での結果が異なります

#include <iostream>
#include <fstream>
#include <system_error>
int main () {
using namespace std;
ifstream is;
is.exceptions(ifstream::failbit | ifstream::badbit);
try { is.open("xxx"); /* 存在しないファイル */ }
catch (ifstream::failure e) { cerr << "ifstream::failure" << endl; }
catch (system_error e) { cerr << "system_error" << endl; }
catch (exception e) { cerr << "exception" << endl; }
catch (...) { cerr << "other_error" << endl; }
return 0;
}

Win+Mingw
$ g++ --version
g++.exe (tdm64-1) 5.1.0
$ g++ -std=c++14 a.cc && ./a
exception

Ubuntu
$ g++ --version
g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2
$ g++ -std=c++14 a.cc && ./a.out
ifstream::failure

Windows 側で ifstream::failure や system_error を捕捉できていないのはなぜでしょうか?

49
デフォルトの名無しさん[sage]   投稿日:2015/12/08 22:29:07  ID:2NgjJ1M0.net
>47
// A.h -----------------------------
#pragma once

class B;
class A {
int ia;
public:
void aFunc(B *b_ptr);
};
// -----------------------------------
// B.h -------------------------------
#pragma once

#include "A.h"

class B {
int ib;
public:
friend void A::aFunc(B *b_ptr);
};
// -------------------------------------
// A.cpp
#include B.h
void A::aFunc(B *b_ptr) {
b_ptr->ib;
}
コメント1件

50
47[sage]   投稿日:2015/12/08 23:52:34  ID:BztczKM1.net(3)
>49
ありがとうございます。

B.hではAクラスのメンバ情報が必要なのでA.hをインクルードして、
A.hではBクラスがあることが確認さえできればよいのでBクラスを前方宣言すればよいということですね。

A.hに定義を描いたのはファイルが少ない方が問題が簡単になるかと思ったからですが、
B.hをインクルードする必要がでてくるので返ってめんどうなんですね。

重ねて質問させていただきたいのですがこれが循環参照というものですか?
またA.hに定義を書いた場合エラーを回避する書き方はあるのでしょうか?
コメント1件

51
デフォルトの名無しさん[sage]   投稿日:2015/12/09 00:26:24  ID:DdKTu+9h.net(2)
>50
ファイルが少ない方いいとか面倒とか気にするなら>46のまま
依存関係にあるクラスなら無理して分けないほうが良いのでは?

ただ回避するだけのダメコードなら

// A.h -----------------------------
#pragma once

class B;
class A {
int ia;
public:
void aFunc(B *b_ptr);
};

#include "B.h"

void A::aFunc(B *b_ptr) {
b_ptr->ib;
}
// -----------------------------------
// B.h -------------------------------
#pragma once

class B {
int ib;
public:
friend void A::aFunc(B *b_ptr);
};
// -------------------------------------

52
デフォルトの名無しさん[sage]   投稿日:2015/12/09 00:33:31  ID:DdKTu+9h.net(2)
余計なお世話かもしれないが、
「これがやりたいから無理やりな回避するコードを書く」ってのは本末転倒なんじゃないかと思う
まあどうしようもないときってのもあるけど、自分ならクラス設計から見直すようにするけどね

53
47[sage]   投稿日:2015/12/09 01:14:48  ID:MWRH+1zr.net
言い方が良くなかったようですみません。
私自身はファイル数も面倒も気にせずオーソドックスなコードをかきたいとおもっています。
ただ問題を考える際まず簡単なものから理解して複雑にしていくのがいいと思っています。
なのでここには私が考える最もシンプルなコードを書きました。
しかしその結果、私が考えた単純化(ファイル数を減らす)が逆に問題を複雑にしてしまっていた。ということに気づきましたという意味の発言でした。

最後の質問は単純な好奇心です。私はそのコードをいじってどうにかコンパイル通そうとしていたので、正解があるなら一応聞いておきたいなと。実用性のないコードをかかせてしまっせすみません。

> 依存関係にあるクラスなら無理して分けないほうが良いのでは?
今はじめてオブジェクト志向を取り入れて簡単なゲームを作っているのですが、どのようにクラスを割り振るのかまとめるのかということで四苦八苦しています。
今は基本に忠実に1つのクラスに1つのソースとヘッダで書いていますが、少し慣れたらまとめてみようと思います。

54
デフォルトの名無しさん[sage]   投稿日:2015/12/10 23:47:39  ID:c+cFQUeV.net
ポインタについて教えてください

*hoge++ = 1;

こういう文があった場合、hogeに当初から入っているアドレスの次のアドレスに1を代入することになると思います
その場合、hogeに代入されているアドレス自体もプラス1されるのがふつうだと思いますが、環境によりプラス1されないこともあるのでしょうか?
よろしくお願いします

55
デフォルトの名無しさん[sage]   投稿日:2015/12/11 00:15:27  ID:PPg536oa.net
当初入ってるアドレス先に1を代入して(=1)
それからアドレスをひとつ先に進める(++)んじゃないかな

環境に左右されないはずだけど、できれば
*hoge=1;
++hoge;
と二行に分けるのをオススメする

56
デフォルトの名無しさん[sage]   投稿日:2015/12/11 06:47:49  ID:I09VPDH/.net(2)
とりあえず括弧で優先順位つけろ

57
デフォルトの名無しさん[sage]   投稿日:2015/12/11 06:57:19  ID:kB8+oJGq.net
括弧で解決するのかねえ。環境依存の要素はないし、極めて初歩の範疇だから
まずは入門書でも読んで入門した方がいい

58
デフォルトの名無しさん[sage]   投稿日:2015/12/11 07:39:35  ID:EXbBnOrE.net
悩むような記述はしない
駆け出しに限ってトリッキーな記述を好む

59
デフォルトの名無しさん[sage]   投稿日:2015/12/11 07:41:53  ID:0YKyOHUo.net
括弧といえば、三項演算子の優先順位がどうしても覚えられない
a - b ? c + d : e | f
みたいなの

60
デフォルトの名無しさん[sage]   投稿日:2015/12/11 08:17:58  ID:MBFQhILY.net
ゲーム作ってるんですがダメージ計算式とかで稀に0除算が発生します
((a-b)*c)/((d*2)-e+f) のようにいくつかの変数が式に入っているので
計算の結果、割る値が0になっている場合がある といった具合です

0で割った場合は0になるようにしたいのですが、どうすればよいのでしょうか?
割る前にifで分岐するように書きなおすのは、面倒なので避けたいのですが…

61
デフォルトの名無しさん[sage]   投稿日:2015/12/11 08:43:00  ID:gzGUt3Ym.net
チェックしろよ

62
デフォルトの名無しさん[sage]   投稿日:2015/12/11 09:11:56  ID:cNzjvsZV.net
同じくチェックしろよとしか。
あとはまあ、適当な関数でも作るとか……?

63
デフォルトの名無しさん[sage]   投稿日:2015/12/11 09:17:17  ID:h2+cx4oS.net
そういう演算規則の数値型のラッパーを作る
そして変数定義だけ書き直す

64
デフォルトの名無しさん[sage]   投稿日:2015/12/11 09:17:45  ID:OYS2Ht5V.net(3)
例外捕まえればチェックしないでも済む

65
デフォルトの名無しさん[sage]   投稿日:2015/12/11 10:32:19  ID:MQP/fuYv.net
今回の要件では、除数が0なら結果も0と言うことだから例外ではフォロー仕切れんよ。
c++ならクラス作って割り算をオーバーロードかな。

66
デフォルトの名無しさん[sage]   投稿日:2015/12/11 11:56:25  ID:OYS2Ht5V.net(3)
例外処理ってC++の使えないアレだけじゃないんだよ

67
デフォルトの名無しさん[sage]   投稿日:2015/12/11 13:14:14  ID:I09VPDH/.net(2)
( ( ((d*2)-e+f) != 0 ) ? ( ((a-b)*c)/((d*2)-e+f) ) : (0) )
ってことか

68
デフォルトの名無しさん[sage]   投稿日:2015/12/11 21:32:26  ID:OYS2Ht5V.net(3)
C++の使えないアレでもできたわ
#include <functional>
int F(std::function< int(void) > func)
{
int v;
try {
v = func();
} catch (...) {
v = 0;
}
return v;
}
#define FF(e) F([&](){return (e); })
FF( ((a-b)*c)/((d*2)-e+f) );

69
デフォルトの名無しさん[sage]   投稿日:2015/12/12 01:59:06  ID:Gz2IfgKr.net
素直に関数作ったらいいと思う

70
デフォルトの名無しさん[sage]   投稿日:2015/12/12 05:59:21  ID:iSM6mGzV.net
書き直せなくなるまでゼロ除算を放置するなんて

71
デフォルトの名無しさん[sage]   投稿日:2015/12/12 06:49:37  ID:zzgKuIEv.net(3)
ゲームなので現実的にはありえない計算式なんだろ
0割で0にするというのも謎だけど、ゲームだからありなのかと思った

72
デフォルトの名無しさん[sage]   投稿日:2015/12/12 08:22:05  ID:JwLrAiSP.net
分母に着目するんじゃなくて
そこに到達するまでのd, e, fのどれかにバグがあるって考えた方がいい

73
デフォルトの名無しさん[sage]   投稿日:2015/12/12 11:18:45  ID:ZIa921ni.net(3)
符号つきint同士の除算で、結果を常に負の∞に向かって丸めるにはどのようにすればいいでしょうか?
ただし、除数は常に0より大きい数です。
コメント1件

74
デフォルトの名無しさん[sage]   投稿日:2015/12/12 11:53:16  ID:jiiw3kKP.net
「負の∞に向かって丸める」の意味がわからない

75
73[sage]   投稿日:2015/12/12 12:05:54  ID:ZIa921ni.net(3)
英語だと round toward minus infinity というところですか。
int同士の演算で丸めるというのが意味をなしていないのかもしれませんが、
結局は(実数としての)除算の結果を整数として得るのに−∞に近づくように、ということです。

76
デフォルトの名無しさん[sage]   投稿日:2015/12/12 12:34:22  ID:l51bqpmT.net
計算結果が-3.1415となったら-4を得たいということ?floor関数だね
コメント1件

77
デフォルトの名無しさん[sage]   投稿日:2015/12/12 14:27:51  ID:zzgKuIEv.net(3)
被除数が負の場合、除数-1を引いてから割る
コメント4件

78
デフォルトの名無しさん[sage]   投稿日:2015/12/12 16:35:31  ID:vifUVQ0p.net(2)
浮動小数なら >76
整数なら >77
ちなみに >77 の方法は「除数-1を*足して*から割る」とすると ceil 相当の動作になる

79
デフォルトの名無しさん[sage]   投稿日:2015/12/12 16:41:35  ID:V2dsH5Kn.net
>77
正整数同士の除算で端数は切り上げ、の応用技だね。
Nビットの情報を格納するのに必要なバイト数を求めるとき
ビット数に7を足してから8で割る感じ。
bytes = (bits + 7) / 8;


ところで、整数の除算で片方が負数の場合の結果は
「処理系定義」だって望洋さんのサイトに載ってる。

>73 で除数は常に0より大きいと限定されてるから
被除数についての場合分け処理が必要になるかと。
コメント2件

80
デフォルトの名無しさん[sage]   投稿日:2015/12/12 17:57:48  ID:vifUVQ0p.net(2)
C って剰余の絶対値が最小になるように除算が決められてなかったっけ
それとも % 演算がそうなってるだけ?

81
73[sage]   投稿日:2015/12/12 18:45:47  ID:ZIa921ni.net(3)
ある程度試したところ>77のやり方でうまくいきました。
動く仕組みも>79でだいたい掴めました。
ふたりともありがとうございます。

82
デフォルトの名無しさん[sage]   投稿日:2015/12/12 20:40:06  ID:zzgKuIEv.net(3)
>79
ウソを言わないように
少なくともc99以降は整数除算は「小数部は捨て」(すなわち0方向に丸め)と定義されている
コメント1件

83
デフォルトの名無しさん[sage]   投稿日:2015/12/12 23:43:11  ID:DGmFor2Z.net
0除算に躓いていた若き日の僕に
手を差し伸べてくれたのは atan2(y,x) でした

84
デフォルトの名無しさん[sage]   投稿日:2015/12/13 06:18:20  ID:dcJkyxKW.net
floor使えよ分かりやすいから

85
デフォルトの名無しさん[sage]   投稿日:2015/12/13 06:18:49  ID:rQ+2OB8E.net
>82
CでしかもC99以降なら、と処理系を限定すればその通り。
コメント1件

86
デフォルトの名無しさん[sage]   投稿日:2015/12/13 07:36:52  ID:OeYxj6fv.net(2)
>85
限定しないならば、全ての処理系に対してって事だが。

87
デフォルトの名無しさん[sage]   投稿日:2015/12/13 15:59:00  ID:NwtL3kT4.net
被除数が正ゼロ負に場合わけして処理するか、キャストして除算結果をfloorへ任せるか‥ まぁわかりやすさは人それぞれか

88
デフォルトの名無しさん[sage]   投稿日:2015/12/13 17:57:12  ID:OeYxj6fv.net(2)
負/非負だけで良い
(a - (b -1) * (a < 0)) / b
ゆとりはわかりにくいとか言い出すんだろうな。

89
デフォルトの名無しさん[sage]   投稿日:2015/12/13 18:02:00  ID:4rlmjVEI.net
わかりにくいとまでは言わんが、if(a<0)で先に分岐したほうがすっきりしそう

90
デフォルトの名無しさん[sage]   投稿日:2015/12/13 21:30:18  ID:H46hk94U.net
まあ、組み込みでもない限りは趣味の世界だな

91
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 08:55:06  ID:7JmIVcUI.net(3)
#include<stdio.h>

void rev_string(char s[]);

void rev_stringn(char s[][12], int n)
{
  int i,j,k;
  char swap[12];

  for(i=0;i<n;i++){
    while(s[i][k])
      k++;
    for(j=0;j<k;j++){
      swap[j] = s[i][j];
    }
    rev_string(swap);
    for(j=0;j<k;j++)
      s[i][j] = swap[j];
  }
}
コメント1件

92
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 08:55:32  ID:7JmIVcUI.net(3)
void rev_string(char s[])
{
  int i;
  int n = 0;
  while(s[n])
    n++;
  for(i=0;i<n/2;i++){
    char temp = s[i];
    s[i] = s[n-i-1];
    s[n-i-1] = temp;
  }
  s[n] = '\0';
  printf("%s \n",s);
}

93
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 08:56:17  ID:7JmIVcUI.net(3)
int main(void)
{
  int n;
  printf("配列の個数を入力せよ");
  scanf("%d",&n);

  char str[n][12];
  int i,j;

  printf("文字列を%d個入力せよ\n",n);
  for(i = 0;i<n;i++){
    printf("s[%d]:",i);
    scanf("%s",str[i]);
  }

  printf("反転した文字列は\n");

  rev_stringn(str,n);

  printf("である。\n");

  return 0;
}

このプログラムを実行するとセグメントエラーが出るのですが、なぜでしょうか
よろしくお願いします
コメント1件

94
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 15:16:58  ID:lAggCEHS.net(3)
>91-93
見た感じ何かの課題っぽいね。
丸々教えちゃうのはタメにならないのでヒント。

一時文字列swap[]の生成部分を見直せ。
コメント1件

95
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 15:42:18  ID:DSJzQQ/E.net
>93
k 初期化
scanfで文字列を格納しようとしないで
コメント1件

96
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 18:11:28  ID:1oZypuq3.net(3)
>94
>95
出来ました
有難うございました
出来ると嬉しいですね

97
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 18:30:13  ID:1oZypuq3.net(3)
それと後学の為に聞いておきたいのですが
scanfで文字列取得してはダメなんですか?
getsで取得したほうが良いのでしょうか?
コメント2件

98
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 18:38:14  ID:XU/HPkeH.net
どっちも使わないが正解かな
実用的なプログラムではxmlなど特定の形式のファイルを読み込むことが殆ど
そしてこういう形式のファイルは専用のライブラリがあるから標準の関数は使わない
コメント1件

99
名無しさん@そうだ選挙に行こう[sage]   投稿日:2015/12/14 19:20:19  ID:lAggCEHS.net(3)
>97
例題の場合だと、文字列の入力時に11文字(12文字ではない)以上を
入力すると誤動作する。

gets()では事前に用意したバッファ容量以上の入力を拒絶できない。

scanf()なら対処可能だが割と面倒くさい。
詳しくは scanf のWikipediaに載ってる。
コメント1件

100
99[sage]   投稿日:2015/12/14 19:46:15  ID:lAggCEHS.net(3)
おおっと、「11文字以上」は間違い。
「11文字を超える」と書くべきだった。

例題の場合だと、文字列の入力時に11文字(12文字ではない)を超える
文字列を入力すると誤動作する。

101
デフォルトの名無しさん[sage]   投稿日:2015/12/14 22:17:16  ID:1oZypuq3.net(3)
>98
>99
有難うございます
頭の片隅に置いておくことにします

102
デフォルトの名無しさん[sage]   投稿日:2015/12/15 09:10:21  ID:DA+Z5plh.net(2)
片隅じゃなくてど真ん中に置いとけよ。

103
デフォルトの名無しさん[sage]   投稿日:2015/12/15 11:55:24  ID:UvxPNinR.net(2)
通る時に邪魔になるだろ!

104
デフォルトの名無しさん[sage]   投稿日:2015/12/15 14:36:30  ID:DA+Z5plh.net(2)
どうせすかすかなんだから避けろよ。
コメント1件

105
デフォルトの名無しさん[sage]   投稿日:2015/12/15 16:29:51  ID:lFa4wSQM.net
>97
scanf だけとか gets でとかじゃなく fgets でバッファサイズ指定して読み込む
fgetsで読み込んだ文字列をsscanfで変数に入れる

106
デフォルトの名無しさん[sage]   投稿日:2015/12/15 17:51:53  ID:UvxPNinR.net(2)
>104
スカスカなのはおまえの頭髪だろ!

107
デフォルトの名無しさん[sage]   投稿日:2015/12/15 18:46:08  ID:Bz6rHJHH.net
俺の胸毛はフサフサなのだがな…

108
デフォルトの名無しさん[sage]   投稿日:2015/12/16 18:34:29  ID:G/o4ughm.net
頭髪と胸毛は影響するホルモンが違うからな。頭スカスカ、胸毛フサフサは矛盾しない。

109
デフォルトの名無しさん[sage]   投稿日:2015/12/16 21:53:42  ID:6hxUKU2I.net
ままならないものだね

110
デフォルトの名無しさん[sage]   投稿日:2015/12/16 22:14:06  ID:x+xpyG6u.net
ハゲで胸毛ワサワサならママにはなれないよ

111
デフォルトの名無しさん[sage]   投稿日:2015/12/17 09:22:36  ID:X1S+T1Jv.net
寧ろ、ママなら無いものかと。

112
デフォルトの名無しさん[sage]   投稿日:2015/12/17 21:01:38  ID:mBjgQHIg.net
C++で
<vector>をインクルードしてpush_backで配列作っていくのと、
int* array = new int[];
と(動的確保?)して作るのとでは

どういった違いがありますか?
また、どちらを使うのが一般的なんでしょうか?

初心者なので的を射ていなかったらごめんなさい。

113
デフォルトの名無しさん[]   投稿日:2015/12/18 00:29:50  ID:jlCbbYEY.net
Vectorの方が安全に扱える(扱いが楽)からvector使った方がいいだろうね
毎回newで動的確保するコードは管理が面倒すぎて何処かで失敗してバグの温床になるからやめた方がいいかと

114
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/12/18 00:41:50  ID:+gf7B4uf.net(2)
ちゃんとマニュアルを読めよ。push_backだけじゃねーよ。

115
デフォルトの名無しさん[sage]   投稿日:2015/12/18 01:01:28  ID:qAlk3MOP.net
Cはまだしも、C++は入門書のように手動でdeleteするようなコードは書くべきじゃない
入門書は何が出来るかを一通り書いてくれていると思うが、C++で重要なのは何をしてはいけないのかを知ること
そのためには沢山のコードを書き、沢山の専門書を読んで覚えるしかない

116
デフォルトの名無しさん[sage]   投稿日:2015/12/18 01:33:14  ID:+PE9kEMX.net
ありがとうございます。vector使っていく事にします

117
uy ◆Qawu9.2l1E []   投稿日:2015/12/18 02:42:48  ID:ebb2J7fc.net
C++やってる奴いるw?

118
デフォルトの名無しさん[sage]   投稿日:2015/12/18 03:49:05  ID:bQYD5Sab.net
ただ、vectorは、末尾の要素の追加・削除は、計算量O(1)だけど、
要素の中ほどに追加すると、
それ以降の要素が1つずつずれるから、O(n)になる

Doubly Linked Listなら、そういうときにO(1)。
ただ、これは基本、1つずつ要素をたぐっていく、
シーケンシャルアクセスだから、要素の取得はO(n)

vectorの要素の取得は、数値インデックスで、
O(1)のランダムアクセスができる

119
デフォルトの名無しさん[sage]   投稿日:2015/12/18 08:41:19  ID:zXgpR+Un.net(2)
class A{
public:
vector<char *> vStr;

A operator <<(char *Str){
vStr.push_back(Str);
return *this;
}
};

A a;
a << "a" << "b";

こうしたときにvStrに"a"と"b"へのポインタが格納されるようにしたいのですが
やってみると"a"しか格納されません
<< "b"のときに格納してるのは<< "a"が返したコピー(?)のほうだから、ということは想像つくのですが
解決策がわかりません
a << "a";
a << "b";
とするしかないのでしょうか
コメント2件

120
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/12/18 09:14:56  ID:+gf7B4uf.net(2)
>119
戻り値を参照に
コメント1件

121
◆tAo.kQ2STk [sage]   投稿日:2015/12/18 11:40:52  ID:znmCm21O.net
>119
- A operator<<(char* Str) {
+ A& operator<<(char* Str) {

>120
それで分かるのは分かってる人だけなような。
# とか言いつつ俺も俺で分かる人には分かるようなフォーマットで回答するという

122
デフォルトの名無しさん[sage]   投稿日:2015/12/18 13:01:02  ID:zXgpR+Un.net(2)
できました!
ありがとうございます

123
デフォルトの名無しさん[]   投稿日:2015/12/18 18:51:52  ID:OysfGD3G.net
C++の最速の行列計算ライブラリってなんだろ
密エルミート行列の対角化がしたいんだけど

124
デフォルトの名無しさん[]   投稿日:2015/12/18 23:29:26  ID:CNI5JGVG.net

125
デフォルトの名無しさん[sage]   投稿日:2015/12/19 09:39:20  ID:n5v6Wxrv.net(3)
別のスレに間違えて投稿してしまったものを、こちらで再度質問させていただきます。
以下のコードをコンパイルしようとすると、コンパイルエラーC1060が出て失敗するのですが、何が悪いのでしょうか。
配列のサイズを変えて4'000'000などにした場合には問題なくコンパイルを完了できます。

struct large
{
char x[5'000'000];
};

int main()
{
auto p = new large{};
return 0;
}

エラーメッセージ
main.cpp(8): fatal error C1060: ヒープの領域を使い果たしました。
コメント1件

126
デフォルトの名無しさん[sage]   投稿日:2015/12/19 11:37:45  ID:HOXV9eUU.net(2)
サイズが悪い

127
デフォルトの名無しさん[sage]   投稿日:2015/12/19 12:12:28  ID:n5v6Wxrv.net(3)
サイズが悪いというのはこの場合、具体的には4MBはよくて5MBは悪いということですよね。
つまり4MBと5MBの間のどこかにサイズの限界があるということなんでしょうか。

128
デフォルトの名無しさん[sage]   投稿日:2015/12/19 12:23:26  ID:HOXV9eUU.net(2)
環境によって異なる

129
デフォルトの名無しさん[sage]   投稿日:2015/12/19 14:52:24  ID:a2/93t/h.net
>125
コンパイラは?

130
デフォルトの名無しさん[sage]   投稿日:2015/12/19 16:52:03  ID:mZAnd63z.net
そのヒープは「コンパイラのヒープ」だからね。
念のため。

131
デフォルトの名無しさん[sage]   投稿日:2015/12/19 20:54:06  ID:n5v6Wxrv.net(3)
コンパイラはVS2015のCommunityエディションUpdate1で、コンパイル時に
Microsoft(R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
と出るものです。

最初のスレでレスをいただいたのですが、どうもnewのところに波括弧でなく丸括弧を使うといいようです。
お騒がせしました。

132
デフォルトの名無しさん[sage]   投稿日:2015/12/19 21:59:13  ID:+2RpuZ8k.net
そこに複文を入れようとしたわけですね
コメント1件

133
デフォルトの名無しさん[sage]   投稿日:2015/12/19 22:17:03  ID:EjHtX5K0.net
>132
C++の文法理解してない初心者は黙ってようね。

134
◆QZaw55cn4c [sage]   投稿日:2015/12/19 22:33:13  ID:dQNHzwTT.net
()はコンストラクタのそれだが,{}はC++11から導入された初期化子だろう‥バグじゃないかね

135
デフォルトの名無しさん[sage]   投稿日:2015/12/21 17:54:14  ID:bZVc/vPs.net(2)
gcc で x86-64 向けのバイナリを生成するとき、関数の呼び出し規約を指定するオプションってある?
cl と gcc でレジスタの使い方が違うよね?

136
デフォルトの名無しさん[sage]   投稿日:2015/12/21 20:04:41  ID:l5zhfPYH.net
-mabi=msとか?
今使ってるのが32ビットマシンだからかsysvでもmsでも変わらなかった
これで変わるかこれでいいか試してみて
コメント1件

137
デフォルトの名無しさん[sage]   投稿日:2015/12/21 21:05:55  ID:bZVc/vPs.net(2)
>136
thx
Ubuntu で確認した
一応 gcc.godbolt.org の結果も貼っておく
http://goo.gl/R9yZ8o
-mabi=ms を外すと rcx が rdi にかわる

138
デフォルトの名無しさん[sage]   投稿日:2015/12/22 23:53:07  ID:NGrgb8N2.net(2)
#include <stdio.h>

int printer(int p[])
{
int i;

for(i = 0; i < 5; i++)
{
printf(

139
デフォルトの名無しさん[sage]   投稿日:2015/12/22 23:57:48  ID:NGrgb8N2.net(2)
int bubble_sort(int b[])
{
int i, j, n, temp;
n = sizeof b / sizeof b[0];

for(i = 0;i > n;i = i + 1)
{
for(j = n; j < i + 1; j = j -1)
{
if(b[j-1] > b[j])
{
temp = b[j-1];
b[j-1] = b[j];
b[j] = temp;
temp = 0;
}
}
}

}

バブルソートで詰んだ…。
どこがおかしいのか教えてください。
コメント2件

140
デフォルトの名無しさん[sage]   投稿日:2015/12/23 00:23:22  ID:v0nEZQ5O.net(3)
>139

int bubble_sort(int b[])
{
int i, j, n, temp;
n = sizeof b / sizeof b[0];

分子の「sizeof b」はちゃんとサイズ取れるのか?
今のコンパイラは知らんけど自分の知っているコンパイラなら忌避数で受け取った配列にsizeofしてもダメだったはず

やるなら、
int bubble_sort(int b[] , int n)
という風に配列サイズも引数で受け取るようにしたほうが良いと思う

141
デフォルトの名無しさん[sage]   投稿日:2015/12/23 00:24:07  ID:v0nEZQ5O.net(3)
×今のコンパイラは知らんけど自分の知っているコンパイラなら忌避数で受け取った配列にsizeofしてもダメだったはず

○今のコンパイラは知らんけど自分の知っているコンパイラなら引数で受け取った配列にsizeofしてもダメだったはず

142
デフォルトの名無しさん[sage]   投稿日:2015/12/23 00:24:51  ID:94XzmV4H.net
>139
for のコンディションがどちらも駄目

143
デフォルトの名無しさん[sage]   投稿日:2015/12/23 00:32:41  ID:v0nEZQ5O.net(3)
外側のループ
for(i = 0;i > n;i = i + 1)
i > n はおかしい

内側のループ
for(j = n; j < i + 1; j = j -1)
nには配列の数が入っているはず
int a[10]; という宣言の時、a[10]ではエラーになる。a[9]が最後のインデックス。
つまり j = n のときのb[j] は配列のインデックスを超えている

全体的におかしいのでここでも見て
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html

144
デフォルトの名無しさん[sage]   投稿日:2015/12/23 00:47:36  ID:XRDkq33u.net
ありがとう
なにがなんだかチンプンカンプンだったが、少しわかってきた気がする
上にはフローチャートとアルゴリズムを考えながら書けと言われているが本当にそれ以外の問題だ

145
デフォルトの名無しさん[sage]   投稿日:2015/12/23 01:11:41  ID:xKy7nhKt.net
フローチャートなんて働いてから一度も見たことないなー
UMLのシーケンス図なら時々見る程度

146
デフォルトの名無しさん[sage]   投稿日:2015/12/23 02:13:28  ID:votnFkGe.net
フローチャートは万物の基本だから仕事にするとなった以上は出来なきゃまずいっしょ

147
デフォルトの名無しさん[sage]   投稿日:2015/12/23 09:04:00  ID:BrzFNCu8.net
アルゴリズムフローチャートは使わないな
ビジネスフローチャートは顧客も読めるし誤解なく意思疎通できしで非常に便利だからよく使う

148
デフォルトの名無しさん[sage]   投稿日:2015/12/23 21:23:21  ID:yHKdz1et.net
アクティビティ図?

149
デフォルトの名無しさん[sage]   投稿日:2015/12/24 22:58:28  ID:65Ta51SK.net(3)
Hi gays
ちょっと聞きたいんだがPythonで
ans = a * (d-b if d>b else 0)
ってどういう意味なんだい?
cライクな言語で書いたら
if( d>b ){
ans = a * d-b;
}else{
ans = 0;
}
と等価なのかい?
コメント1件

150
デフォルトの名無しさん[sage]   投稿日:2015/12/24 22:59:49  ID:65Ta51SK.net(3)
おっとすまん c/c++スレやった。気にしないでくれ!

151
デフォルトの名無しさん[]   投稿日:2015/12/24 23:27:07  ID:Q6U3kr4L.net
どっちかというと三項演算子やね
コメント1件

152
デフォルトの名無しさん[sage]   投稿日:2015/12/24 23:44:33  ID:65Ta51SK.net(3)
>151
Thank you !
なるほど謎が解けました。定義ながめても
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
みたいな感じだったからなんでじゃ!と思ってたが
確かに三項演算子(Conditional expressions)のとこに
しっかり書いてありました!

153
デフォルトの名無しさん[]   投稿日:2015/12/25 00:59:07  ID:47X2XmRH.net(2)
>1
RPGツクール2000 , RPGツクールMV https://tkool.jp/mv/ ( JavaScript 採用 )

WOLF RPGエディター http://www.silversecond.com/WolfRPGEditor/

デュエル・マスターズ Android版 ,i-OS版、公式 http://dm.takaratomy.co.jp/extra/dmapp/entrygate_ds/
デュエル・マスターズ対戦CGI ex
https://web.archive.org/web/20150809154946/http://www53.atwiki.jp/dms...

デュエル・マスターズ(デュエマ)DM ONLINE 1.8a  /  VanGuard ONLINE 1.5a
https://web.archive.org/web/20150809160254/http://uhyohyohyo.sak ura.ne.jp/hsp.html

ヴァンガード専用ネット対戦ツール【 VanGuard Online 】
https://web.archive.org/web/20150809155032/http://kiimaa.jugem.jp/?ei...

「カードファイト!!ヴァンガード」のネット対戦ができる公式オンラインゲーム「Cardfight!! Online」 2015年冬スタート
https://web.archive.org/web/20150809153724/http://supersolenoid.blog6...

遊戯王 Automatic Dueling System
https://web.archive.org/web/20150809164855/http://www3.atwiki.jp/ads-...

遊戯王 デュエル・オンライン
https://web.archive.org/web/20150809171527/http://www31.atwiki.jp/vip...
https://web.archive.org/web/20140628005202/http://do.yugioh-portal.ne...

ウィクロス( WIXOSS ) WEBXOSS http://webxoss.com/about_en.html http://webxoss.com/DeckEditor/

BG(ボードゲーム)Engine https://web.archive.org/web/20151209080842/https://bgengine.net/
https://web.archive.org/web/20151209172205/http://14owl.hateblo.jp/en...

アプレンティス  マジック:ザ・ギャザリング(MtG)オンライン化 http://homepage1.nifty.com/Q_Q/ap.html
https://web.archive.org/web/20151202202725/http://homepage1.nifty.com...
コメント1件

154
デフォルトの名無しさん[]   投稿日:2015/12/25 01:00:12  ID:47X2XmRH.net(2)
【 オンラインTCGエディター 】   >1,>153

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。
個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみろ。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。

機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ−グ用でサーバー稼動。

下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。

さ〜て、インド人ベンダーと日本人の翻訳担当PGを見つけよっと!ww
【報酬制カード】DUELEAGUE【デュエリーグ】16 /ラウンジクラシック板-20

155
デフォルトの名無しさん[sage]   投稿日:2015/12/25 08:59:08  ID:vl+/L70O.net(2)
VC++でウォッチ機能を使いたいです
非アクティブ時にも処理を実行するようにすると
ウォッチ機能を使えましたが、
一度使うとウィンドウを表示できなくなります
ウォッチ機能を使った後に、また継続して処理してほしいのですが
どうすればいいでしょうか

156
デフォルトの名無しさん[sage]   投稿日:2015/12/25 09:18:35  ID:vl+/L70O.net(2)
色々勘違いをしていました…
ブレークポイントでウォッチ式の追加ができるんですね。
あるキーを押したらブレークポイントを呼び出す分岐を作って
うんぬんしました

157
デフォルトの名無しさん[sage]   投稿日:2015/12/25 17:57:56  ID:VvmRSBaN.net
>149
ans = a * d-b; じゃなくて ans = a * (d-b); じゃないかな…と

158
デフォルトの名無しさん[sage]   投稿日:2015/12/31 17:47:20  ID:W7H0CYCX.net(2)
[0, 1]の範囲で一様に分布するランダムなfloatを得るのに、
return (float)uint64_random / (float)uint64_max;
というのは合ってますか?
つまり64ビットからfloatへのキャストで打ち切られる部分があっても、計算上では一様な結果が得られるのか、ということです。

std::uniform_real_distributionを使えって話ですが今回は置いといて、あくまで上の計算が正しいのかどうかってことが聞きたいです。
コメント2件

159
デフォルトの名無しさん[sage]   投稿日:2015/12/31 18:36:18  ID:31q/PxfR.net
間違ってる

160
デフォルトの名無しさん[sage]   投稿日:2015/12/31 22:48:01  ID:W7H0CYCX.net(2)
ならやっぱりシンプルに (1<<24)-1 とかの値でマスクしたのちfloatとして割り算すればいいんですかね。

なぜこんな質問をしたかというと、MSVCのuniform_real_distributionの実装が
実質>158と同じで (float)1.48304654e+17 / (float)1.84467441e+19; のような計算が発生していて、
結果が不安になったからでした。

それではよいお年を。

161
デフォルトの名無しさん[sage]   投稿日:2016/01/01 00:18:41  ID:T3uz4ezr.net
>158
uint64_randomがuint64の範囲で一様なんであれば結果も[0, 1]の範囲で一様なんじゃね?
ただし精度が落ちた結果離散的な分布になるんで厳密には一様分布とは言えないかも知れんが。

162
デフォルトの名無しさん[sage]   投稿日:2016/01/04 08:47:58  ID:z6cA6x0M.net
質問です。
タブレットPCで、専用ペン(N-Trig)を使って線を描くとき、(VAIO DUO 11など)
線の書き出しで、一瞬だけポイントの位置を取りこぼしてしまいます。
市販のソフトではタブレット専用ドライバに対応?してるようで、取りこぼすことはないのですが、
自作でペンで線を描くプログラムを描くと、取りこぼしてしまいます。
プログラム側でタブレット専用ドライバに対応させる必要があると思うのですが(そうしないと筆圧も検出できない)
対応方法や、技術資料など公開してるサイトなどありますでしょうか?
よろしくお願いします。

フリーソフトで同じ現象が出るのは、例えばMOZAなどです。
http://www.vector.co.jp/soft/winnt/art/se481229.html
ペンをすばやく動かしたとき、書き始めのいくつかのポイントをとりこぼすので、
フリーハンドですばやく円を描いても書き始めの部分だけ直線で描画されます。

よろしくお願いします。

163
デフォルトの名無しさん[sage]   投稿日:2016/01/05 12:57:02  ID:KbFq7Je6.net
TabletPC API じゃだめかの?
コメント1件

164
デフォルトの名無しさん[sage]   投稿日:2016/01/07 08:27:52  ID:Sx2pYlJo.net(2)
>163
ありがとうございます。筆圧の検出はできました。
しかし、線の書き出してポイントを取りこぼす原因がわかりません。

挙動を見ると、ペンで画面にタッチした瞬間は、システムのタッチイベントにデータが渡されて、
描画ソフトのほうにペンの位置データが送られて無いような感じです。
どう制御したらいいのか、よくわかりません。
ご存知の方いらっしゃいませんか?

165
デフォルトの名無しさん[sage]   投稿日:2016/01/07 09:04:46  ID:x9JXveKM.net
タッチイベントから始めればいい

166
デフォルトの名無しさん[sage]   投稿日:2016/01/07 15:28:40  ID:Sx2pYlJo.net(2)
システムのタッチイベントを一時停止させるということでしょうか?
方法がよくわかりません。
コメント1件

167
デフォルトの名無しさん[sage]   投稿日:2016/01/07 16:40:19  ID:7vfkJ+8f.net
>166
最初の座標はタッチイベントで通知された座標を使えってことじゃね?

168
デフォルトの名無しさん[sage]   投稿日:2016/01/07 17:40:32  ID:LbIHZlg8.net
挙動を観察してると、こんな感じです。()内は想像なので違うかも。

ペンでタッチした瞬間→OSが「タッチされたという円のカーソル」を表示する→最初の座標はソフトで取得できる
ペンでタッチしたままmoveする→0.1秒くらい、ソフト側でmove中のペン座標を検出できない(?)
→(OSが長押しなどのタッチイベントを検出しようとしてる?)
→0.1秒くらい後で、move後のペンの座標をソフトで取得できる。
→結果、線の書き始めがカクカクになる。

なので、OS側のタッチイベントをキャンセルできればいいのかな?と思ったわけです。
別の原因かもしれませんが。
普通にマウスを使えばカクつかないので、ペンイベントに関係した何かが原因と思います。

169
デフォルトの名無しさん[age]   投稿日:2016/01/13 15:37:26  ID:Kf0FfNiC.net(3)
static関数やstatic変数はあるけど
staticクラスはなかったりする?
あるならサンプルがほしいです
コメント1件

170
デフォルトの名無しさん[sage]   投稿日:2016/01/13 15:43:37  ID:Tiz9r6x1.net
>169
unnamed namespaceを使えばいいよ。
別名anonymous namespace

namespace {
class Foo {};
}

171
デフォルトの名無しさん[sage]   投稿日:2016/01/13 17:11:17  ID:FgL34cC5.net
シングルトンのことを言ってるのではなかろうか?
まあstaticには意味が複数あるから何とも言えないが

172
デフォルトの名無しさん[sage]   投稿日:2016/01/13 18:00:04  ID:hhTEC9ap.net
C#にはあるんだよ、そのものズバリのstaticクラスが。
ソレのことじゃね?

https://msdn.microsoft.com/ja-jp/library/98f28cdx.aspx
> 次のクラスは static として宣言され、static メソッドのみが含まれます。
> static class CompanyEmployee {
> public static void DoSomething() { /*...*/ }
> public static void DoSomethingElse() { /*...*/ }
> }
> 定数宣言や型宣言は、暗黙に静的メンバーです。

173
デフォルトの名無しさん[age]   投稿日:2016/01/13 18:30:50  ID:Kf0FfNiC.net(3)
public static class クラス名 {

}

みたいな感じでstaticクラスを作るのは
C#にはあるけど、C++には無いってことでOK?

174
デフォルトの名無しさん[age]   投稿日:2016/01/13 20:00:49  ID:Kf0FfNiC.net(3)
C++ には static class は無いってことで
OKなんだよな!?

175
デフォルトの名無しさん[sage]   投稿日:2016/01/13 20:12:22  ID:A49t3q/a.net
先生、staticクラスとstaticメンバしか持たないクラスの違いってなんなんですか?
コメント1件

176
デフォルトの名無しさん[sage]   投稿日:2016/01/13 21:09:53  ID:HsSfXxOq.net
c++ならnamespaceで良いんじゃないか?

177
デフォルトの名無しさん[age]   投稿日:2016/01/14 13:38:21  ID:KoBeZziz.net(2)
C++ には static class は無いってことで
OKなんだよな!?

178
デフォルトの名無しさん[age]   投稿日:2016/01/14 15:13:26  ID:KoBeZziz.net(2)
>175
同じだ!


C++ には static class は無いってことで
OKなんだよな!?
コメント1件

179
デフォルトの名無しさん[sage]   投稿日:2016/01/14 20:42:14  ID:Zc1b49I1.net
C++ に static クラスは普通にあると思うが
コメント1件

180
デフォルトの名無しさん[age]   投稿日:2016/01/14 23:36:23  ID:9GGakY72.net
>179
サンプルソース頼む
コメント1件

181
デフォルトの名無しさん[sage]   投稿日:2016/01/15 00:10:02  ID:5etCVVqM.net
インスタンスを作って使うような普通のクラスじゃなくて
関数をパッケージ化しただけの、namespace的な使い方をするクラスってことでしょ

ビルド時の挙動とかに差はあるかもしらんけど

182
デフォルトの名無しさん[sage]   投稿日:2016/01/15 04:21:23  ID:nz6sd5//.net(2)

183
デフォルトの名無しさん[sage]   投稿日:2016/01/15 08:46:56  ID:wa8kRhUB.net
>182
それがstaticクラス w 初心者以前だわー
お前、便所でオナニーしてろ、出てくんな。
コメント1件

184
デフォルトの名無しさん[sage]   投稿日:2016/01/15 10:27:10  ID:AdEtazjQ.net
>178
その意味なら、static classという用語を使わないだけで、
named namespaceがその役割を果たすよ。

namespace C1 {
int x;
void foo() {
printf("%d\n", x);
return;
}
}

int main() {
C1::foo();
return 0;
}

185
デフォルトの名無しさん[sage]   投稿日:2016/01/15 12:27:11  ID:RRBj9slx.net
>182
Objって名前の変数を内部リンケージにしただけですやん…
C#のstatic classから程遠いですやん
コメント1件

186
デフォルトの名無しさん[sage]   投稿日:2016/01/15 20:06:38  ID:nz6sd5//.net(2)
>183
>185
はは,ごめんごめん‥

187
デフォルトの名無しさん[sage]   投稿日:2016/01/15 22:37:03  ID:RSgCFGzJ.net
(HBITMAP)hBmpのデータを、(Gdiplus::Bitmap *)gBmpに、変換したいのですが、
どのようにしたらいいのでしょうか?
コメント2件

188
デフォルトの名無しさん[sage]   投稿日:2016/01/16 00:10:28  ID:4AnwHYnZ.net
コンストラクタにHBITMAP渡せばいいだけじゃね?

189
デフォルトの名無しさん[sage]   投稿日:2016/01/16 12:56:40  ID:QU9s9ZKo.net
>187
調べたらHBITMAPと共にHPALETTEを要求するコンストラクタがあったぞ
https://msdn.microsoft.com/en-us/library/windows/desktop/ms536314(v=vs.85).aspx

190
デフォルトの名無しさん[sage]   投稿日:2016/01/16 16:57:27  ID:UmbayiDQ.net
ありがとうございます。出来ました。
HPALETTEと聞いて身構えましたが、NULLでOKでした。
コメント1件

191
デフォルトの名無しさん[sage]   投稿日:2016/01/17 10:41:17  ID:FnUzwqcH.net
struct A {
int x, y;
A(int a, int b) :x(a), y(b) {}
};

int i = 0, j = 0, k = 0, m = 0;
A a{i++, i++};
A b(j++, j++);
auto c = A{k++, k++};
auto d = A(m++, m++);

波括弧リストの各要素は、左から評価されると思っていたのですが、
上のabcdいずれもx=1,y=0となりました。
コンストラクタが呼ばれる場合は波括弧にしようと、引数の評価順序は通常の関数と同じくコンパイラ次第ということになるんでしょうか。
コメント2件

192
デフォルトの名無しさん[sage]   投稿日:2016/01/17 12:44:25  ID:8qUaiUxA.net
for(int i=0;i<100;++i)と、for(int i=0;i<100;i++)も
iに入る値は0〜99になるってこと?

193
デフォルトの名無しさん[sage]   投稿日:2016/01/17 13:07:17  ID:J8S7Inib.net
変わってくるのは
j = i++;
j = ++i;

194
デフォルトの名無しさん[sage]   投稿日:2016/01/17 13:55:06  ID:1NfmC2ez.net
i++と++iで結果が変わってくるのは常識レベルだけれど
i++と++iで結果が変わるようなコードはあんまり書きたくないなあ

195
デフォルトの名無しさん[sage]   投稿日:2016/01/17 13:58:01  ID:i3k5KRJv.net
i = i++; ←undefined

196
デフォルトの名無しさん[sage]   投稿日:2016/01/17 20:57:56  ID:ZUkPM10Q.net
>191
コンパイラの不具合
規格では初期化子リストの各要素は左から順に評価されるであってる

197
デフォルトの名無しさん[sage]   投稿日:2016/01/18 07:43:20  ID:O3Vj0Ahg.net
>191
これってどのパターンもinitializer_listとして処理されずにただのアグリゲートで直接「A(int a, int b)」が呼ばれるんじゃないの?
initializer_list<int>を引数に取るコンストラクタにしないとただただA(int a, int b)になって副作用複数で動作未定義になると思うんだけど

198
デフォルトの名無しさん[sage]   投稿日:2016/01/19 08:25:02  ID:pbmLvf11.net
副作用完了点までの間の演算の順序は未定義だと思うよ

199
デフォルトの名無しさん[]   投稿日:2016/01/19 14:07:47  ID:IcGeaXVP.net(3)
クラスについての質問です。(C++)

printf(

200
デフォルトの名無しさん[]   投稿日:2016/01/19 14:13:54  ID:IcGeaXVP.net(3)
文章が途中で切れてしまったので再掲です。
改善しない場合は不具合と思われるのでクローズします。

本文
クラスについての質問です。(C++)
printf("%d,%d,%d",Instance名,Instance名,Instance名);
のように記述すると、クラスのメンバ変数が上から順番に呼び出されることがわかりました。
この機能は、本来の仕様なのでしょうか?また、仕様であるとすれば、名称はありますでしょうか。
ご解説のほどよろしくお願い致します。
コメント3件

201
デフォルトの名無しさん[sage]   投稿日:2016/01/19 14:30:34  ID:yzf0Ubeh.net
>200
上から順番にってのがよく分からんが、標準的な実装だと右から順に評価される。
評価順序は仕様上は未定義だった筈。

202
デフォルトの名無しさん[sage]   投稿日:2016/01/19 15:00:24  ID:XmaCTdxl.net(2)
>200
可変引数の関数printf()に渡された引数が
たまたま3個のint数と解釈可能になる順序に
スタックに積まれてるだけなんじゃないかしら。

#include <stdio.h>

struct some {
 int a, b, c, d;
};

void main() {
 some ins1 {0, 1, 2, 3};
 some ins2 {10, 11, 12, 13};

 printf("%d, %d, %d\n", ins1, ins2);
}

これで 0, 1, 2 と表示される感じ。
手元の環境では 0, 1, 2 だけど、移植性は全然ないよね。
コメント2件

203
202[sage]   投稿日:2016/01/19 15:21:26  ID:XmaCTdxl.net(2)
言い訳っぽいけど、普段は >202 のようなコードは書かないよ。
コンパイラのオプションで書式指定と引数並びを照合してもらう。

今回は、コンパイルと実行ができることと >200 に書かれたような
出力が得られることを実験しただけね。

204
200[]   投稿日:2016/01/19 15:40:27  ID:IcGeaXVP.net(3)
>202
ご解説ありがとうございます。
仰る通り、クラスの仕様ではなくprintf関数による現象でした。
ありがとうございました。

205
デフォルトの名無しさん[sage]   投稿日:2016/01/19 16:16:36  ID:uAThxx94.net
可変個引数の呼び出しだとスタックに積む順序とともに評価順が変わるという話が

206
デフォルトの名無しさん[sage]   投稿日:2016/01/19 21:42:47  ID:OWcc7WP1.net
未規定
なので鼻から悪魔は出ない模様

207
デフォルトの名無しさん[]   投稿日:2016/01/19 22:58:57  ID:8V+g6swC.net
私の環境だと標準入力の入力文字数制限が4095文字なんだけどこれを取っ払う方法ありますか?
osはwindows7 visual studio 2015使ってます

std::cin >> str みたいなときの話です

ググったんだが他の環境だとこんな制限ないっぽい……
コメント3件

208
デフォルトの名無しさん[sage]   投稿日:2016/01/20 03:31:40  ID:7T123+WA.net
標準入出力のバッファが4KBだからだろ

Linuxのfind コマンドでも、ファイル数が多いと、
引数リストが長すぎて、コマンドが失敗する

そういう時、パイプで、xargs につなげると、
(4KB毎に?)引数を分割して、実行してくれる
find 〜 | xargs 〜

バッファが一杯になったら、それを出力して、
バッファを空にする。その後、バッファに読み込む
コメント1件

209
デフォルトの名無しさん[sage]   投稿日:2016/01/20 08:16:31  ID:UTQHsO+H.net(2)
>207
setvbuf() って関数でどうにかならんかの。
俺も試したわけじゃないんだけど。
コメント1件

210
デフォルトの名無しさん[sage]   投稿日:2016/01/20 09:06:46  ID:tlDETzf4.net(2)
>207
それ実行してもstrに4095バイトしか入らないってことはないと思うけど?
コメント1件

211
デフォルトの名無しさん[sage]   投稿日:2016/01/20 10:21:56  ID:PU8f41kT.net
>210
そういう質問じゃないだろ
コメント1件

212
デフォルトの名無しさん[sage]   投稿日:2016/01/20 12:33:16  ID:tlDETzf4.net(2)
>211
どういう問題なの?
コメント1件

213
デフォルトの名無しさん[sage]   投稿日:2016/01/20 12:35:33  ID:zFAeGKrq.net(3)
>207
手元に実行環境がないから俺の思ってる現象と実際に起きてるそれとが同じかどうか分からんけど
多分ライブラリがクズなのが原因。

文字列読み込みくらいなら自分で書いてみよう
レシピは?
getchして必要ならutf-8をUCS4にする類のデコーディングをして、stringにappendするだけ。簡単だよね?
コメント1件

214
デフォルトの名無しさん[sage]   投稿日:2016/01/20 12:39:52  ID:zFAeGKrq.net(3)
>212
「改行が来るまでバッファに貯めこんで、改行が来たら返す関数」と
「その関数を使ってstringを作る関数」みたいな実装になってて、
しかも改行の判定だのeof判定だのループだのをやってないんじゃないかなぁと思ってる

215
デフォルトの名無しさん[]   投稿日:2016/01/20 14:33:44  ID:7Lwquj6u.net(5)
すみません実際にはgetlineで読み込んでいます
std::cin >> strでも同じ問題が起きたのでこのような例にしました。
実際には下のコードを書いています

std::string cmd, token;

while (std::getline(std::cin, cmd))
{
// 入力されたコマンドを入力ストリームとする
std::istringstream ss_cmd(cmd);

// 空白は読み飛ばしながら、tokenに代入
ss_cmd >> std::skipws >> token;

if (token == "")
{
//いろいろな処理
}
else if (token == ...

}

216
207[]   投稿日:2016/01/20 14:40:09  ID:7Lwquj6u.net(5)
このプログラムでgetlineが実行され標準入力からの受付待ちになったとき
コピペしてあった4096文字以上の文字列を標準入力にペーストすると、4096文字目以降が途切れて表示されなくなってしまいます
それ以降キーボードから入力しても何も表示されず、受け付けてくれないようです
標準入力以外(ファイルストリーム)からの入力に変更することは仕様上できないので、なんとか標準入力の制限を取っ払う方法を調べていましたが、見つからずここで質問させていただきました
コメント1件

217
デフォルトの名無しさん[sage]   投稿日:2016/01/20 14:57:00  ID:+L7kwNqj.net
それってプログラムじゃなくてコマンドプロンプトの制限なんじゃ?
コメント1件

218
207[]   投稿日:2016/01/20 15:02:48  ID:7Lwquj6u.net(5)
>208 >209 >213
教えてくれてありがとう。詳しい状況説明します
GUIと標準入力でやりとりするプログラムを書いています
GUIは将棋所というプログラムでオープンソースではないです
私が作ってるのは将棋の思考エンジンです
これで将棋を指すと807手目くらいで思考エンジンに送る文字列が4096文字を超えてしまい、思考エンジンの動作が止まってしまうようです


219
207[]   投稿日:2016/01/20 15:08:19  ID:7Lwquj6u.net(5)
>217
コマンドプロンプトを立ち上げて4096文字以上の文字列をペーストしたところちゃんと表示してくれたので、大丈夫なんじゃないかと思ってるのですが……
しかも、以前2000000文字を標準入力から受け取るプログラムを書いたことがあって、そのときは問題なく動いたはずなんです
この問題です→http://yukicoder.me/problems/686

220
デフォルトの名無しさん[sage]   投稿日:2016/01/20 15:08:44  ID:zFAeGKrq.net(3)
>216
調べたら、どうもコンソールの制限みたい。
http://stackoverflow.com/questions/24106960/visual-studio-c-cin-big-st...

Linuxにおいでよ。
コメント1件

221
207[]   投稿日:2016/01/20 15:12:22  ID:7Lwquj6u.net(5)
>220
そうなんですね……ありがとう
連投すみませんでした

222
デフォルトの名無しさん[]   投稿日:2016/01/20 16:03:06  ID:6opntLoI.net(2)
std::string型の "abc"+str のように、
クラスの左側のoperatorを変更したい場合は、どのように記述すれば良いでしょうか。
よろしくお願い致します。
コメント1件

223
デフォルトの名無しさん[sage]   投稿日:2016/01/20 16:24:10  ID:UTQHsO+H.net(2)
>222

#include <iostream>
#include <string>

std::string operator+(const char *s1, const std::string& s2)
{
 std::string ret {s1};
 ret += s2;

 return ret;
}

int main() {
 const char *s1 = "C_string";
 std::string s2 {"std::string"};

 std::cout << s1 + s2 << std::endl;
 std::cout << s2 + s1 << std::endl;

 return 0;
}


こんな感じに、クラスのメンバ関数でない形で書くんだと思うが。
関数の引数とか返り値の生存期間とか、あまり自信がないので詳しい方の添削を求む。
コメント1件

224
222[]   投稿日:2016/01/20 17:58:33  ID:6opntLoI.net(2)
>223
できました!
クラスの外に記述する発想はありませんでした。
ご回答、本当にありがとうございました。

225
uy ◆Qawu9.2l1E [sage]   投稿日:2016/01/20 20:56:27  ID:xIovtIq7.net
ヌバーン!生き生きとしたこんにゃくをAlien & Friend @ トリなし運用中wに叩きつけたときの音w

【ヌバーン!】ヌバーンから学ぶGoogleのサジェスト汚染の仕組みw
ゲームプログラムなら俺に聞け32

226
デフォルトの名無しさん[sage]   投稿日:2016/01/20 22:13:13  ID:arPtyuMt.net(2)
自然数aと列数mを入力として、各行の要素の合計がaとなるnxm行列を作りたいんですがどうしたらいいか教えて下さい
例えばa=2、m=3とすると
2 0 0
1 1 0
1 0 1
0 2 0
0 1 1
0 0 2
という6x3の行列です

227
デフォルトの名無しさん[sage]   投稿日:2016/01/20 23:39:56  ID:bvuszQOX.net
ええと、別に行列である必要なくない?

228
デフォルトの名無しさん[sage]   投稿日:2016/01/20 23:52:10  ID:Gr6aoqFK.net
仮に作るとして
行の並びはどうやって決めてるんかね

229
デフォルトの名無しさん[sage]   投稿日:2016/01/20 23:56:05  ID:arPtyuMt.net(2)
行の並びは、各行に重複がなければ何でもいいです

230
デフォルトの名無しさん[sage]   投稿日:2016/01/21 00:02:08  ID:yQ7XttE4.net(2)
全パターンって事?
a = 合計 = 2
m = 列数 = 3
2 0 0
0 2 0
0 0 2
1 1 0
1 0 1
0 1 1
コメント1件

231
デフォルトの名無しさん[sage]   投稿日:2016/01/21 00:20:37  ID:6QaN3bnU.net(2)
>230
そうです
それでaとmが引数で、それに応じて作られる行列が変わるというモノにしたいです

232
デフォルトの名無しさん[sage]   投稿日:2016/01/21 00:45:35  ID:yQ7XttE4.net(2)
今はどこまで出来上がってるのかideoneあたりにでも上げてみて

233
デフォルトの名無しさん[sage]   投稿日:2016/01/21 01:44:18  ID:7s6F6whZ.net(2)
そんなのただの組み合わせ問題でしかないような気はするが

234
デフォルトの名無しさん[sage]   投稿日:2016/01/21 05:20:25  ID:PqFPWDYj.net
まずC言語で行列をどう定義すれば良いんだろ?
とりあえず6*3の2次元配列に値を格納するとかなら再現出来るけど

やっぱりそれって組合せを羅列してるだけだしなあ
コメント1件

235
デフォルトの名無しさん[sage]   投稿日:2016/01/21 07:15:24  ID:6QaN3bnU.net(2)
>234
まさしく組み合わせの列挙と同じです
そういうアルゴリズムはもうありますか?
組み合わせの列挙ができれば行列の表現は自分で適当に定義するので大丈夫です
コメント1件

236
デフォルトの名無しさん[sage]   投稿日:2016/01/21 08:12:31  ID:7s6F6whZ.net(2)
>235
そういうアルゴリズムがあるのかは知らないが、例えば再起関数とかでできる
#include <iostream>
#include <vector>

using Vector = std::vector<int>;

void Func(size_t a, size_t m, size_t movingTarget, size_t start, Vector* pbuff, std::vector<Vector>* pdest)
{
if(movingTarget != a){
for(size_t i = start; i < m; ++i){
(*pbuff)[i] += 1;
Func(a, m, movingTarget+1, i, pbuff, pdest);
(*pbuff)[i] -= 1;
}
} else {
pdest->push_back(*pbuff);
return;
}
}

int main() {
size_t a, m;
std::cin >> a >> m;
Vector buff(m, 0);
std::vector<Vector> dest;
Func(a, m, 0, 0, &buff, &dest);
return 0;
}
コメント2件

237
デフォルトの名無しさん[sage]   投稿日:2016/01/21 17:50:19  ID:AYpDF3p9.net
すみません、質問です。
HBITMAPでハンドルされたビットマップのデータを、
LPBITMAPFILEHEADERのポインタに渡すにはどうしたらいいでしょうか?

HBITMAPのほうは、ARGBで、LPBITMAPFILEHEADERにはRGBで渡したいのですが。
1ピクセルずつ転送するしか方法はないでしょうか?
コメント2件

238
デフォルトの名無しさん[sage]   投稿日:2016/01/22 01:15:05  ID:G5rv7JJ3.net
>237
LPBITMAPFILEHEADERはBITMAPFILEHEADER構造体へのポインタなんだけど、
BITMAPFILEHEADER構造体はビットマップファイルのサイズとかデータのオフセットなんかを保持するものであって、
ビットマップの内容を保持するものじゃない。
だからビットマップのデータを渡すことはそもそも不可能。

ビットマップファイルを作ることが目的なら、GetDIBits関数を使えば行けるっぽい。
http://www.geocities.co.jp/SiliconValley-SanJose/9921/bitmap.htm
コメント1件

239
デフォルトの名無しさん[sage]   投稿日:2016/01/22 07:20:07  ID:KhXVHsnG.net
>236
vector とかをポインタで渡す奴初めて見た
コメント1件

240
デフォルトの名無しさん[sage]   投稿日:2016/01/22 08:04:21  ID:mLydxleH.net
>239
別に普通じゃね?

241
デフォルトの名無しさん[sage]   投稿日:2016/01/22 08:42:22  ID:0StJWjHm.net
渡した引数が関数内で変更されることを明確にするために
参照でなくポインタを引数に使うって流儀があるな。
呼び出す際に意識できるように。

ただ、この関数の場合vectorの中身を書き換えるのは
関数の目的からして明らかだから、参照でも構わない気もする。
コメント1件

242
デフォルトの名無しさん[sage]   投稿日:2016/01/22 09:08:19  ID:bim8zuhw.net
>241
C++ core guidelines だと、

入力専用
 const 参照渡し F(const T&) ただし、int とかは値渡し
出力専用
 return で返す。move を使う。
入出力用
 参照渡し F(T&)

っていうのを推奨してたと思う。

ご指摘の通り、呼び出し側で、const T& とT& の区別が付かないから、const T& とT* で区別するっていう流儀もあって、google の coding guideline もそうなっていたと思う。

一方 fortran は、
intent(in)
intent(out)
intent(inout)
を使うことが出来て、意図がそのものズバリ表せて分かりやすい。

243
デフォルトの名無しさん[sage]   投稿日:2016/01/22 23:40:00  ID:EmPy3KXO.net
>238
参考になります。ありがとうございます。

244
デフォルトの名無しさん[sage]   投稿日:2016/01/23 07:48:50  ID:QkGTEhqA.net
>236
おーまさしく求めていたモノです
ありがとうございました

245
デフォルトの名無しさん[sage]   投稿日:2016/01/23 13:05:07  ID:eTMuwGLO.net
すみません質問です。

HBITMAP hBitmap =(作成したビットマップ画像のハンドル)
BITMAP bmp;
GetObject(hBitmap,sizeof(BITMAP),&bmp);

で、bmpにHBITMAPのビットマップ情報を取り出せるようですが、
DIBとして作成したビットマップの、
LPBYTE lpPixel のポインタはどのように取得できるのでしょうか?
bmp.bmBitsPixelとか、bmp.bmBitsとか、bmp.bmPlanesがそうかな?と思ったのですが、RGB値を取得するのに

unsigned char* pix = (unsigned char*)bmp.bmBitsPixel;
Color color( pix[0], pix[1], pix[2] );

では、アクセス違反エラーになるので、よくわかりません。
コメント1件

246
デフォルトの名無しさん[sage]   投稿日:2016/01/23 13:46:54  ID:BpJ08GBs.net(3)

247
デフォルトの名無しさん[sage]   投稿日:2016/01/23 17:35:21  ID:8FfjCDv5.net
>246
ありがとうございます。
bm.bmBitsが、データの先頭ポインタということでいいんですよね?

これを、RGBごとの配列として取得しようとするとアクセス違反が出るのですが、
参考になるサンプルがググっても出てこないので困っています・・・・・・・・・。
コメント1件

248
デフォルトの名無しさん[sage]   投稿日:2016/01/23 19:21:25  ID:AYxzv3Ol.net
LIBRARY_PATHで指定しても聞いてくれん
-Lとかめんどい
コメント1件

249
デフォルトの名無しさん[sage]   投稿日:2016/01/23 19:29:56  ID:BpJ08GBs.net(3)
>247
手元に環境がないのでどんなコード書いて動かんのか分からんのだけど、
>264の2つ目のリンクに載ってる動くコードは試してみた?
ビットマップの情報(info)とビットマップを構成するピクセルの情報(data)は違うよ。
後者を得るにはGetDIBits関数を使う。
コメント1件

250
デフォルトの名無しさん[sage]   投稿日:2016/01/23 19:47:23  ID:BpJ08GBs.net(3)
>248
gcc --print-libgcc-flie-name
で表示されるファイルと同じ場所にあるspecsってファイルを編集する。

デフォルトのファイルが無ければ
gcc -dumpspecs > `dirname $(gcc --print-libgcc-file-name)`/specs
して作る。
コメント1件

251
デフォルトの名無しさん[sage]   投稿日:2016/01/23 20:27:45  ID:sjR26rme.net
>249

2つ目のリンクだと、
pBitsに、データ全体を格納できるバッファを確保して、
GetDIBitsで、pBitsに、データ全体を丸ごとコピーしてるという流れでしょうか?
ということは、それだけ時間がかかるわけですよね?

作法はよくわからないのですが、
元データのポインタに直接アクセスするような方法は普通しないということでしょうか?
安全のため?とか?
コメント1件

252
デフォルトの名無しさん[sage]   投稿日:2016/01/24 06:35:19  ID:LlGxXnUD.net
>250
gccを上げたのにldが古いままだからか知りませんがうまくいかなかったので諦めて-Lしました

253
デフォルトの名無しさん[sage]   投稿日:2016/01/24 11:46:59  ID:LHp2Xjej.net
>251
元データがどんな形式で保持されてるかは分からない。
もしかしたら配列の配列を使った拡張性の高い形式になってるかもしれないし、
もしかしたら1ピクセルに一色あたり10ビット使ってるかもしれないし、
あるいは赤5ビット緑6ビット青5ビットかもしれない。

その内部形式をbitmap形式に変換する必要があるんだから
どっちみちGetDIBitsでデータ全体をbitmap形式で再生成する必要がある。
コメント1件

254
デフォルトの名無しさん[sage]   投稿日:2016/01/24 17:01:15  ID:LvcqEuFR.net
>253
わかりました。ありがとうございます。

255
デフォルトの名無しさん[sage]   投稿日:2016/01/25 10:22:34  ID:1hi7ZmAY.net
ランタイムライブラリ→マルチスレッド(/MT)に設定してるんだけど、
外部のライブラリを、追加の依存ファイルで設定して、
リンクするときに静的にEXEに埋め込めると思ったのですが出来ないんだっけ?
他に設定とかあります?

256
デフォルトの名無しさん[sage]   投稿日:2016/01/25 20:36:08  ID:Gry0WUO1.net
VCスレ行け

257
デフォルトの名無しさん[sage]   投稿日:2016/01/31 00:14:56  ID:yeB8Lsmn.net(3)
すみません、C++初心者ですが、質問です。

変数の内容を複数個組み合わせて、別の変数の識別子(名前)にしたいのですが、
良い方法がわかりません・・・どうやったらいいのでしょうか?
具体的には以下のソースのような感じです。

#include <iostream>
#include <string>

using namespace std;

int main() {
string var1 = "a";
string var2 = "01";

string a01 = "表示したい項目1";
string a02 = "表示したい項目2";
string a03 = "表示したい項目...";

if ( var1+var2 == "a01" ) cout << a01 << endl;

// 上記のような条件分岐ではなく、文字列を組み合わせて変数名を変えたい。
// イメージ的には下のような感じで、変数a01の内容を参照したい。

cout << var1+var2 << endl;

}
コメント1件

258
デフォルトの名無しさん[sage]   投稿日:2016/01/31 00:24:13  ID:rR0u1lvP.net(2)
>257
<map>じゃあかんか?
コメント1件

259
デフォルトの名無しさん[]   投稿日:2016/01/31 01:10:39  ID:yeB8Lsmn.net(3)
>258
ありがとうございます。

こんな感じかな?

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main() {
string var1 = "a";
string var2 = "02";

string a01 = "表示したい項目1";
string a02 = "表示したい項目2";
string a03 = "表示したい項目...";

map<string, string> mp;
mp["a01"] = a01;
mp["a02"] = a02;

cout << mp[var1+var2] << endl;

}

かなりやりたいことに近づいたのですが、
新しい項目が出来て、var1とvar2の内容が変わった時に、map部分にも追記しないといけないのがネックだったりします。
この辺は、我慢するしかないのかなorz
コメント1件

260
デフォルトの名無しさん[sage]   投稿日:2016/01/31 01:32:33  ID:rR0u1lvP.net(2)
>259
>新しい項目が出来て、var1とvar2の内容が変わった時に

どんな状況か具体的に書いてくれると分かるかも

そもそもvar1とvar2の組合せに特別な意味があるなら(aの01,bの03みたいな)
安易に結合させない方が扱い易い気がする
コメント1件

261
デフォルトの名無しさん[sage]   投稿日:2016/01/31 02:13:55  ID:yeB8Lsmn.net(3)
>260
伝わるかわりませんが、
自作のテキストファイル上のスクリプトテキストから、
指定の画像ファイルをDXライブラリを使用して表示するというプログラムを作っています。

スクリプトは拡張性を考えて、「aaa」という種類の画像の「01番目」を表示というように、
「画像表示 , aaa , 01」のようにコンマで分けて記載しており、それをここで言うvar1とvar2に読み取って格納しています。

で、画像のファイルはDXライブラリのLoadGraph関数を使用して、
こことは別の場所でメモリへロード、グラフィックハンドル化しております。
それが「表示したい項目」にあたるもので、aaa01という名前のint型の変数になっています。

cout〜endl; の部分は、実際にはDXライブラリの描画関数のDrawGraphを使用するため、引数にグラフィックハンドルを設定します。

スプリプト側である程度画像ファイルをコントロールしたいというコンセプトで作っており、
新しい画像ファイル追加時も極力プログラム側は弄らずに済むようにしたいのです。

あと、明日早いのでもう寝ます、すみませんorz
コメント1件

262
デフォルトの名無しさん[sage]   投稿日:2016/01/31 04:23:29  ID:+opoo++4.net
>261
>もう寝ます、すみませんorz
気にすんな、おやすみ

とりあえず書くだけ書いとくと
・変数名はあくまでも人間が変数の役割を見る為の物
・実行時には変数名なんて一部を除き消えてる
・まずLoadGraphする時に片っ端から変数宣言するのを止めるべき
・その為には変数xxx00と画像ファイルにどんな対応関係があるのかを見直す必要がある
(xxx00→img\xxx\00.png等)

263
デフォルトの名無しさん[sage]   投稿日:2016/01/31 10:56:19  ID:KmNLeza2.net(7)
1.ARGBの24ビットでBITMAPを作り、Aに透明度の値を入れます。
2.GDIで、PNGにセーブします。
3.セーブしたファイルのバイナリを見ると、Aに値が入っています。
4.GDIで、PNGをロードします。
5.GDIのGetPixel、GetAlphaで、Aの透明度の値を取得できます。

PNGでは問題ありませんが、BMPでセーブロードしたとき、
セーブしたBMPファイルのバイナリを見るとAに値が入っているのに、
ロードした後、GetAlphaで、Aの透明度の値を正しく取得できません。Aの値は255になっています。
透明度付きBMPをロードする時に、何か設定が必要だったでしょうか?
透明度付きBMPはロードできないような仕様なのでしょうか?
コメント2件

264
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:10:13  ID:wbBrgvcH.net(5)
>263
何でロードしてるん
ロードでAARRGGBBの所がFFRRGGBBになってるんじゃないの?
FFは0xFFの事な
コメント2件

265
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:22:28  ID:KmNLeza2.net(7)
>263
訂正:24ビットではなく32ビットです。

>264
GDIの関数です。
bmp = new Gdiplus::Bitmap(LoadFile,PixelFormat32bppRGB);
bmp->GetPixel( x, y, &pixelColor );
alpha = pixelColor.GetAlpha();

これで、PNGの場合はalphaが取得できますがBMPでは取得できません。
バイナリで見ると、BMPファイルにはalpha値が入っています。
たとえば0x88でも、GetAlphaで255になります。
コメント1件

266
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:26:50  ID:wbBrgvcH.net(5)
>265
変更前 PixelFormat32bppRGB
変更後 PixelFormat32bppARGB
でやってみたらどうなる?
コメント1件

267
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:41:21  ID:ym0w2q0h.net
mapとか、最近だとエディタの補完ってどこまで効くんだろ

268
デフォルトの名無しさん[sage]   投稿日:2016/01/31 11:56:29  ID:KmNLeza2.net(7)
>266
あ〜!と思いましたが、変わりませんでしたです。

269
デフォルトの名無しさん[sage]   投稿日:2016/01/31 12:03:49  ID:wbBrgvcH.net(5)
HBITMAP取ってGetObjectした時のbmBitsPixelは何になってる?
コメント1件

270
デフォルトの名無しさん[sage]   投稿日:2016/01/31 12:19:29  ID:KmNLeza2.net(7)
>269
32になってます。
コメント1件

271
デフォルトの名無しさん[sage]   投稿日:2016/01/31 12:30:09  ID:wbBrgvcH.net(5)
>270
GetPixel前にpixelColorを0x00000000にしても
0xFFRRGGBBになるの?
コメント1件

272
デフォルトの名無しさん[sage]   投稿日:2016/01/31 12:40:44  ID:KmNLeza2.net(7)
>271
pixelColor=0x00000000;
bmp->GetPixel( x, y, &pixelColor );
alpha = pixelColor.GetAlpha();
で、alpha は255になります。

PNGロードは問題なくalphaを取得できるんですが。
いま、LockBitsでロードしたデータの中身を見ようとしてるんですが、
素人なので、取得の仕方から調べてるところです。
コメント1件

273
デフォルトの名無しさん[sage]   投稿日:2016/01/31 14:12:49  ID:Q+LCs9MU.net
バイナリだとbmpは下の行から格納されるからとかだったりして

274
デフォルトの名無しさん[sage]   投稿日:2016/01/31 14:18:47  ID:wbBrgvcH.net(5)
>272
RGBはxyに期待する値取得できる?
コメント1件

275
デフォルトの名無しさん[]   投稿日:2016/01/31 14:31:16  ID:KmNLeza2.net(7)
>237
>274
RGBは問題ありません。
LockBitsで見たところ、ロードしたデータのalpha値はすでに255でした。
これって、こちらだけの問題でしょうか?
他の方はalpha値をロードできているのでしょうか?

276
デフォルトの名無しさん[sage]   投稿日:2016/01/31 14:32:33  ID:KmNLeza2.net(7)
あれ?sageてるのに、なぜか上がってるし?

277
デフォルトの名無しさん[sage]   投稿日:2016/02/03 18:07:52  ID:tpmWM1rq.net
通りすがりだけど、bmpにalphaなんてないよね?
コメント1件

278
デフォルトの名無しさん[sage]   投稿日:2016/02/03 20:54:07  ID:uEOUJl1K.net
32bit中8bitをアルファに割り当てるのはよくあると思うけど
APIにそのまま渡せるかは知らない
コメント1件

279
デフォルトの名無しさん[sage]   投稿日:2016/02/03 21:27:06  ID:cIfP8+z6.net
>277 あるよ
>278 渡せるよ(BITMAPV5HEADER)

280
デフォルトの名無しさん[sage]   投稿日:2016/02/03 21:37:47  ID:+QXRA0Fd.net
非標準なので対応してるアプリ毎に違う

281
デフォルトの名無しさん[sage]   投稿日:2016/02/05 16:46:07  ID:kz0UWJTh.net
それ言ったらbitmap形式自体がMSのとOS/2のとあるような
標準はいずこへ

282
デフォルトの名無しさん[sage]   投稿日:2016/02/06 14:37:10  ID:XRyA0EjL.net
BITMAPV5HEADERは Win95 がダメだったから
それを未だに引きずってアプリの対応もイマイチなのよね

283
デフォルトの名無しさん[sage]   投稿日:2016/02/06 15:03:17  ID:4STRQeN+.net
で,ビットマップの扱いはどうすればいいの,データの32ビット縛りも気が付かないと大変だし,ヘッダの各プロパティにもいろいろこだわりがあるようじゃないか,

284
デフォルトの名無しさん[sage]   投稿日:2016/02/06 15:17:27  ID:SD/iIwrI.net
GDI+なんか使わないでWICでやる。

285
デフォルトの名無しさん[sage]   投稿日:2016/02/06 15:44:14  ID:utAdfs60.net
内部形式で処理して、どうしてもbmpで出力したい時に変換すればいいんじゃない?

286
デフォルトの名無しさん[sage]   投稿日:2016/02/11 04:53:26  ID:pNz7UH/B.net(3)
C++相談室 part122
わかる方いませんか?
マルチでごめんなさい。

287
デフォルトの名無しさん[sage]   投稿日:2016/02/11 11:44:52  ID:vxNioHuU.net(2)
向こうで即レスついてるじゃん。例えば、こういう事だよ。
class Types {
public:
typedef std::uint64_t ValueType;
typedef std::vector<ValueType> Container;
typedef std::string IDType;
static State ClientInitialize(
ICodeBreakerClient*, std::ostream& Logger,
Types::ValueType MaxValue,
Types::ValueType Digit_);
};

class CodeBrakerHost : public Types{
State PlayGame() {
...
Types::ClientInitialize(Client, *pos, Max, Digit);
}
}
コメント1件

288
デフォルトの名無しさん[sage]   投稿日:2016/02/11 12:19:09  ID:pNz7UH/B.net(3)
>287
回答ありがとうございます。
一応作業してたら解消したのですが理解はしていません。
いまいちC++のコード規約理解してないのでこういうわなにはまってしまいます。
向こうにアルファ版がおいてあるので暇があったら遊んでみてください。
ありがとうございました。

289
デフォルトの名無しさん[sage]   投稿日:2016/02/11 12:32:08  ID:vxNioHuU.net(2)
ざっくり言うと、それまでに出現(定義)してない名前は使えない
クラス内メンバーは例外で、後から定義してても使える
コメント1件

290
デフォルトの名無しさん[sage]   投稿日:2016/02/11 12:43:42  ID:pNz7UH/B.net(3)
>289
なるほど。参考にします。

291
デフォルトの名無しさん[sage]   投稿日:2016/02/11 22:42:24  ID:vMQ0aSNq.net
>187の質問で>190で以下のような記述で解決したのですが、

#pragma once
#pragma comment(lib, "Gdiplus.lib")
#include <gdiplus.h>
using namespace Gdiplus;
--------------------
Gdiplus::Bitmap * bmp1;
bmp1 = new Gdiplus::Bitmap(hBitmap,NULL);

そのまま別のプロジェクトに移植したところ、
Debugで、「'Gdiplus::GdiplusBase::operator new' : 関数に 3 個の引数を指定できません。」
というエラーが出るようになりました。
が、Releasだと、エラーになりません。

Debugでコンパイルしたときだけエラーが出るような場合の原因として何が考えられるでしょうか?

292
デフォルトの名無しさん[sage]   投稿日:2016/02/12 00:33:59  ID:Fqxy+b4c.net
ファイルの頭の方にあるこいつがGdiplusと相性悪い。

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
コメント1件

293
デフォルトの名無しさん[sage]   投稿日:2016/02/12 10:17:01  ID:bFgUXSY6.net
>292

ありがとうございます。削除して上手くいきました。

294
デフォルトの名無しさん[]   投稿日:2016/02/14 12:46:34  ID:VLtYVTYt.net(2)
class Transaction {
public:
Transaction() { logTransaction(); };
virtual void logTransaction() { cout << "Transaction" << endl; };
virtual void logTransaction() const { cout << "const Transaction" << endl; };
};
class BuyTransaction : public Transaction {
public:
BuyTransaction() { logTransaction(); };
void logTransaction() { cout << "Buy" << endl; };
void logTransaction() const { cout << "const Buy" << endl; };
};
int main()
{
const BuyTransaction b;
return 0;
}
と書いた場合、基底&派生クラスともに非constな logTransaction()が呼ばれてしまいます。
const、非constオブジェクトの生成に関して処理を分けることは出来ないのでしょうか?
VS2015 VC++ と Mingw64 g++ 5.3.0 とも同じ動作になりました。
コメント1件

295
デフォルトの名無しさん[sage]   投稿日:2016/02/14 19:53:21  ID:gzwnh80D.net
>294
普通の筋で考えるとconstのコンストラクタも作らないと駄目でしよ。
でも、コンストラクタの意味からしてconstのコンストラクタってありえない。
ってあたりから、無理じゃね?

296
デフォルトの名無しさん[sage]   投稿日:2016/02/14 20:51:48  ID:QinwwQiS.net
そのconstは変数bの属性だと思うんだよ。
クラス側としては
class BuyTransactonConst : public BuyTansaction
とか作れば?

297
294[]   投稿日:2016/02/14 21:17:33  ID:VLtYVTYt.net(2)
直接的に処理を分けることは無理みたいですね。
お察しが付くかもしれませんが、上記ソースコードは
スコット・メイヤーズさんのEffectiveC++第3版の9項からのものです。
説明では基底クラスのTransaction中では void logTranslation() const = 0;
と純粋仮想関数になっているのですが、サンプルソースを適当に変えて挙動を
みていたら、このことに気が付きました。
両名の方、レスありがとうございました。

298
デフォルトの名無しさん[]   投稿日:2016/02/14 23:45:36  ID:aC/U9cwJ.net
質問です。

メンバポインタの必要性ってなんですか?
今メンバポインタについて勉強していますがわかりません。
あると便利なときってどんな時ですか????
コメント2件

299
デフォルトの名無しさん[sage]   投稿日:2016/02/15 01:17:40  ID:CoPBLH5e.net
普通の関数ポインタじゃ扱えないから、その代用
……とかそういう話なかったっけ?

300
デフォルトの名無しさん[sage]   投稿日:2016/02/15 01:25:22  ID:FDnCcdJi.net
メンバ関数は暗黙にthisを引数に取るので普通の関数ポインタでは扱えない。
ちゃんぽんしたかったら一考しないといけない。
コメント1件

301
デフォルトの名無しさん[sage]   投稿日:2016/02/15 12:13:19  ID:8Os0TVn8.net
>298
今まで一度も使ったことないし使われてるところを見たこともない
コメント1件

302
デフォルトの名無しさん[sage]   投稿日:2016/02/15 21:40:19  ID:geRYYYJt.net
>298
その章は飛ばして先に進みましょう
コメント1件

303
デフォルトの名無しさん[sage]   投稿日:2016/02/16 08:52:37  ID:ZqCrYcMA.net
必要になった時に学べばいいと思う
コメント1件

304
デフォルトの名無しさん[]   投稿日:2016/02/16 15:52:46  ID:TrNqH2Y5.net
>301
なんだそれw オワコン・・・・・・?
検索したけど情報量少ないのが困るなぁ

>302
わかった!ありがと!

>303
必要になるのがどういう状況下がわからん(´;ω;`)ブワッ
コメント1件

305
デフォルトの名無しさん[sage]   投稿日:2016/02/16 18:14:53  ID:14idcRCK.net
>304
テンプレートと組み合わせてイベントハンドラの格納に使える。
もっともC++11以降は std::function があるからそれを使うべき。

306
デフォルトの名無しさん[sage]   投稿日:2016/02/16 19:40:50  ID:fomhurQ7.net
こんなの必要性以前の問題だろwww




メンバポインタって何だっけ?

307
デフォルトの名無しさん[sage]   投稿日:2016/02/16 19:54:01  ID:SmCEknBn.net
クラス内で宣言した配列に外で宣言した配列の中身を突っ込むことってできますか

308
デフォルトの名無しさん[sage]   投稿日:2016/02/16 23:50:18  ID:bGf55uSQ.net
>300にはっきりと答えが書かれてるのに、何故そっちはスルーしたんだ…
コメント1件

309
デフォルトの名無しさん[]   投稿日:2016/02/17 07:44:04  ID:bjhQnNdd.net
>308
すまぬ、別の人に対して発言したとおもた

>300
>メンバ関数は暗黙にthisを引数に取るので普通の関数ポインタでは扱えない。
何でそうなるのかわかりません(´;ω;`)ブワッ
まずはそこからです((((((((( (´・ω・`)へ
コメント2件

310
デフォルトの名無しさん[sage]   投稿日:2016/02/17 08:50:55  ID:4zW8fTVw.net
>309
自クラスの他関数を呼び出す時にthis->func()って呼べるやろ?
自クラス内でthisを暗黙に取ってないとthisは使えない
自クラス内でもstatic関数はthisを取らない

311
デフォルトの名無しさん[sage]   投稿日:2016/02/17 12:36:46  ID:ofvCQlRl.net
>309
f(a, b, c);
って書いたとする。普通の関数はCの機能なので、超大雑把に言うと
コンパイル時にアドレスが分かっている関数のアドレスへgotoする機能と、スタックにaとbとcを積む機能、
そして関数から戻った後に実行される命令のアドレスをスタックに積む機能
の組み合わせとして表現されてる。
関数ポインタもCの機能で、固定のアドレスにgotoするか変数に格納されてるアドレスにgotoするかが違う。

で、クラスのメンバ関数呼び出しはCから見たらC++による拡張が入ってて、
o->f(a, b, c);
って書いたとすると、超大雑把に言えば
aとbとcの他にoもスタックに積んでfを呼び出すようになってる。
これが「暗黙にthisを引数に取る」って事の意味。C風に書くと、f(o, a, b, c);みたいに、暗黙のthisであるoを引数に取ってる。
だからCの機能である「普通の関数ポインタ」では扱えない。
コメント1件

312
デフォルトの名無しさん[sage]   投稿日:2016/02/17 15:08:50  ID:nUvaCFse.net
クラスAから、クラスBの関数を呼ぶとかに使うの?

クラスA{
 クラスB m_メンバ;
}
クラスB{
hoge();
}
ホゲ()::クラスA{

m_メンバ.hoge();

}

313
デフォルトの名無しさん[sage]   投稿日:2016/02/18 02:12:50  ID:zoJ8Qqc9.net
自分は使ったことないけど、
基本的には関数ポインタを使う場面で使うんじゃない?

まあ、今のC++で関数ポインタを使う場面があるか?と聞かれても微妙だが。
コメント1件

314
デフォルトの名無しさん[sage]   投稿日:2016/02/18 07:46:15  ID:nHOTcIDn.net
>311
.* か ->* を使って書いてくれ

315
デフォルトの名無しさん[]   投稿日:2016/02/19 08:21:46  ID:NhUxYl/M.net
>313
もともとC#からプログラミングを始めたけど、デリゲートとかにいいんじゃない?
だから、C++だとイベント処理とか
コメント1件

316
デフォルトの名無しさん[sage]   投稿日:2016/02/19 17:08:23  ID:E/z1CaIk.net
>315
自分も昔は関数ポインタをよく使ってたけど、
クラス継承、関数オブジェクト、そして今はラムダ式とある中で
そもそもの関数ポインタを使う場面って限られてるんじゃないかって話ね。

そして、そこから更にメンバ関数ポインタを使う機会って考えると
割りと怪しいんじゃないかなって。

317
デフォルトの名無しさん[sage]   投稿日:2016/02/20 12:04:55  ID:xl4z8Qhr.net
オーバーライドに対応した関数ポインタと考えればいいんだけど
(継承や関数オブジェクト、ラムダ式じゃ当然実現できない)
そういえば使ったことないな

318
デフォルトの名無しさん[sage]   投稿日:2016/02/25 22:56:25  ID:yuZaonNv.net
質問です。
class personというのをつくります。
std::vectorにそのまま入れて、メンバ変数のidでsortしたいのですが、それなりにpersonのサイズがおおきいのでpersonではなくperson*の配列として扱いたいです。

person->idでsortしたい場合、どのように記述すればよいですか。追加ですが簡単な切り替えでperson->numberでもsort出来るようになっていると有り難いです。

319
デフォルトの名無しさん[sage]   投稿日:2016/02/26 00:43:27  ID:5tlNRLX1.net
ふたつのperson*を引数にとって
idで大小比較してboolを返す関数/関数オブジェクト/ラムダ式を書いて
sortに渡すだけ
コメント1件

320
デフォルトの名無しさん[sage]   投稿日:2016/02/26 00:54:31  ID:pNNKrV8l.net
>319
ありがとうございます。
なんとかできました。
ラムダはまだわからないです。

321
デフォルトの名無しさん[sage]   投稿日:2016/03/05 12:06:37  ID:XYtyIfXI.net
ポインタの確保する領域って32bitは4byteで64bitは8byteの固定長なんですか??

322
デフォルトの名無しさん[sage]   投稿日:2016/03/05 20:17:06  ID:t560EV2m.net
固定ではなく環境とコンパイラで変わる
コメント1件

323
デフォルトの名無しさん[sage]   投稿日:2016/03/06 11:30:10  ID:E+dKwvyv.net
>322
そうなんだ
コンパイラがポインタのサイズを決めて終わりかと思った。
それ以外に決まる要因って何?
コメント1件

324
デフォルトの名無しさん[sage]   投稿日:2016/03/06 11:56:01  ID:9dFH7fs4.net
すでに自分で答えを書いてるんでは

325
デフォルトの名無しさん[sage]   投稿日:2016/03/06 13:25:23  ID:7dbWmFO0.net
>323
コンパイラが環境によってポインタのサイズを決めて終わり

326
デフォルトの名無しさん[sage]   投稿日:2016/03/09 03:26:57  ID:UYrrbR23.net
クラスのデストラクタが呼ばれない場合って
継承関係にあるクラスのデストラクタにvirtualを付けなかったとき
abort, exitしたとき以外にどんな場合がありえますか?
コメント1件

327
デフォルトの名無しさん[sage]   投稿日:2016/03/09 06:19:35  ID:EHNG1aVZ.net
解放しなかった時

328
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2016/03/09 16:43:22  ID:j/ofmAyB.net
>326
newで確保してdeleteで解放しなかったとき

329
デフォルトの名無しさん[]   投稿日:2016/03/09 17:14:57  ID:mZtDFmSo.net
例外中のデストラクタで例外が投げられたとき

330
デフォルトの名無しさん[sage]   投稿日:2016/03/10 13:45:15  ID:/KMYK0BP.net
本来の目的が何かを明らかにしないと求める答えは得られない

331
326[sage]   投稿日:2016/03/10 21:03:11  ID:WVxO2Qsv.net
やろうとしてたことがスマポではできなさそうだったので
自分でスマポに変わるクラスを作ろうと思って質問したのですが
よくよく調べてみたらスマポでできたのでそっちを使いました
後学のために他にもデストラクタが呼ばれない場合があったら教えてください

332
デフォルトの名無しさん[sage]   投稿日:2016/03/11 00:34:20  ID:ZLj/v9UA.net(2)
コンストラクタから例外を外にthrowしたとき

333
デフォルトの名無しさん[sage]   投稿日:2016/03/11 00:40:37  ID:ZLj/v9UA.net(2)
exitしたときは、静的変数のデストラクタは呼ばれます。

334
デフォルトの名無しさん[]   投稿日:2016/03/12 01:44:49  ID:WNn7QVXF.net
質問です
OpenFrameworksiOSv0.9.3で行き詰ってます。
unsigned char * pixels = grabber.getPixels();にどうしても
『operator unsigned char * is deprecated』とwalningがついてしまいます。
どうしてもピクセルデータを取り出すことが必要なのですが、
どなたかどのように記述すればいいのか教えていただきたいです。
コメント1件

335
デフォルトの名無しさん[sage]   投稿日:2016/03/12 09:03:27  ID:NuHx+xBn.net
>334
使った事ないので詳しくないけど
その警告部分に改善策が示されてないかな?
grabberの型が不明なのでエスパー出来ないが
ofPixelsRef pixels = grabber.getPixels();
ofPixels& pixels = grabber.getPixels();
ofPixels_<unsigned char>& pixels = grabber.getPixels();
unsigned char * pixels = grabber.getPixels().getData();
このあたりかな
読み込みだけならconstで。
コメント1件

336
デフォルトの名無しさん[sage]   投稿日:2016/03/13 00:06:45  ID:Q68izjaV.net(2)
templateを使って、引数をそのまま構造体の要素にするプログラムを書いています。

template<class STR,class ... ARGS>
void event(ARGS ... args){
STR str = {args};
...
}

STRの部分に何かしらの構造体を入れると、関数内のstrに代入されるという代物です。
このSTRの部分にクラスを入れると'エラー C2440 '初期化中': 'initializer list' から 'Stage::TC' に変換できません。'
というエラーを吐きます。何とかクラスで似たような動作をさせられないでしょうか?

337
デフォルトの名無しさん[sage]   投稿日:2016/03/13 02:12:46  ID:kPqg6a4C.net
{args}ではなく{args ...}にすればクラスだろうと普通に動作するだろ
http://ideone.com/dhfjzP

338
デフォルトの名無しさん[sage]   投稿日:2016/03/13 11:40:24  ID:Q68izjaV.net(2)
そういえば、templateをまとめて記述する方法ってないの?
いちいち同じtypenameに対して
template<〜>
void func1(){}
template<〜>
void func2(){}
template<〜>
void func3(){}

ってするの面倒なんだけど

339
デフォルトの名無しさん[sage]   投稿日:2016/03/13 12:07:02  ID:agB5sXDj.net
長くなるようなら#defineでも使っとけ

340
デフォルトの名無しさん[sage]   投稿日:2016/03/15 17:59:57  ID:IZ6+yR9m.net
キーボード入力後の改行をなかったことにできますか?
入力されたすぐ右に文字を出力したいのです。
fgets(buf, sizeof(buf), stdin);
printf("\b");
では入力行の右端まで行ってしまいます。
また入力開始位置は可変です。つまり入力された文字列の文字数から行末は算出できないのです。
どこか抜け道はありますか?
コメント1件

341
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2016/03/15 18:04:43  ID:zLB+iwEH.net
>340
コンソール端末の色情報やキャレットの操作は、
ncursesというライブラリを使うとできる。

342
デフォルトの名無しさん[sage]   投稿日:2016/03/15 22:06:47  ID:hLONNm58.net(4)
ドラッグアンドドロップなんだけど
explorer.exeからD&Dすると [ データ形式(49868) 形式名(Shell IDList Array) ] [ データ形式(CF_HDROP) 形式名(InShellDragLoop) ] だけど
IShellFolder の GetUIObjectOf で IID_IDataObject 指定だと [ データ形式(CF_HDROP) 形式名(Shell IDList Array) ] になる
しかし受け手のほうはいずれも CF_HDROP 形式に対して DROPFILES 構造体の方法で取得できる

CF_HDROPは定数値(15)のはずだし
クリップボードフォーマットとして登録されているはずの形式がなぜ変わってしまっているのですか?
またShell IDList ArrayやInShellDragLoopの内部形式はどうなっているのかわかりますか?
コメント1件

343
デフォルトの名無しさん[sage]   投稿日:2016/03/15 23:10:37  ID:hLONNm58.net(4)
「またShell IDList ArrayやInShellDragLoopの内部形式はどうなっているのかわかりますか?」
については自己解決した感じです

GlobalLock により取得したメモリをdumpしてみたところすべて中身は同じでした
コメント1件

344
デフォルトの名無しさん[sage]   投稿日:2016/03/15 23:16:20  ID:hLONNm58.net(4)
ごめんなさい>343は取り消しですorz

345
デフォルトの名無しさん[sage]   投稿日:2016/03/15 23:34:36  ID:hLONNm58.net(4)
すみません>342-344
一旦取り消します
根本的な部分でミスしてました
形式名を表示する部分が間違っていてデータ形式と形式名のペアが一致していないだけでしたorz

346
デフォルトの名無しさん[sage]   投稿日:2016/03/15 23:39:00  ID:XI218Dpy.net
質問があります

vector<T>同士でそれぞれの要素ごとにtransform関数で演算する2項演算子のテンプレートを作り
T = vector<double>でインスタンス化してtransformからT = doubleでインスタンス化
したものを再帰的に呼ぼうと思ってるのですが
multipliesとdividesではうまく行きますがminusとplusではうまく行きません
もしかしてすでにこの型のオーバーロードがあるのでしょうか?
コメント1件

347
デフォルトの名無しさん[sage]   投稿日:2016/03/16 02:23:21  ID:/xZFuugQ.net
>346
plus,minusのオーバーロードが原因ではなく
stdにstd::operator+(operator-)があると(reverse_iteratorやstring用など)
std::plus(minus)からは
自分で書いたグローバルのoperator+(operator-)が隠蔽されて見えなくなるのが原因
コメント1件

348
デフォルトの名無しさん[]   投稿日:2016/03/16 14:05:43  ID:JUYIKEKS.net
>335
遅れてすみません
ありがとうございました

349
デフォルトの名無しさん[sage]   投稿日:2016/03/20 00:48:49  ID:Hvn8A5ZD.net(2)
ちょっと質問ですが

class A
{
private:
ULONG RefCount;
public:
A() : RefCount(1){}
~A(){}

ULONG Release()
{
ULONG ret = (ULONG)InterlockedDecrement(&_RefCount);
if(ret == 0){
delete this;
}
return (ULONG)_RefCount;
}
};

この場合、delete this; した後でも メンバ変数の RefCount にアクセスするのは問題ないのでしょうか?
コメント1件

350
デフォルトの名無しさん[sage]   投稿日:2016/03/20 00:53:03  ID:9URbr6kI.net
>349
問題あ〜る

351
デフォルトの名無しさん[sage]   投稿日:2016/03/20 21:17:45  ID:Hvn8A5ZD.net(2)
ありがとうございます
やっぱりそうですね
(※下の_RefCountはRefCountの間違いですが)

ULONG Release()
{
ULONG ret = (ULONG)InterlockedDecrement(&_RefCount);
if(ret == 0){
delete this;
}
return ret;
}

というような、delete this;以降にthisを参照するコードを書かなければ問題ないということでOKですよね

352
デフォルトの名無しさん[]   投稿日:2016/03/21 10:46:27  ID:5Pe+8Vgq.net(4)
enumに対して operator== と operator!= を定義する方法ってありますか?
visual studio 2015使ってますが 'operator==があいまいです'というエラーが出てしまいます。
コードはこんな感じにしています
Moveがenum型です

inline Move moveRaw(const Move m) { return Move(m & 0x03ffffff); }
inline bool operator == (const Move m1, const Move m2) { return int(moveRaw(m1)) == int(moveRaw(m2)); }
inline bool operator != (const Move m1, const Move m2) { return !(moveRaw(m1) == moveRaw(m2)); }
コメント1件

353
デフォルトの名無しさん[sage]   投稿日:2016/03/21 11:09:44  ID:/QOiUUU0.net
伝統的enumはintのエイリアスみたいなものだ。
enum classならできるだろ。

354
デフォルトの名無しさん[sage]   投稿日:2016/03/21 12:35:55  ID:wdcchfji.net
>352
そのままできるだろ
http://codepad.org/HIxuVy1v
ほかのところがエラーの原因
コメント2件

355
デフォルトの名無しさん[sage]   投稿日:2016/03/21 14:26:36  ID:PBSyTjzr.net
オーバーロードの中でエラー出してるやろ

356
デフォルトの名無しさん[sage]   投稿日:2016/03/21 16:52:02  ID:5Pe+8Vgq.net(4)
>354
ほんとですね。ありがとうございます!
ほかの原因を探してみます。

357
デフォルトの名無しさん[sage]   投稿日:2016/03/21 17:05:14  ID:5Pe+8Vgq.net(4)
>354のコードをコピペしてコンパイルしてみましたがやはり同じエラーが出ます
どうやらvisual studio 2015だと出てしまうようです

358
デフォルトの名無しさん[sage]   投稿日:2016/03/21 17:30:46  ID:tX8tczo7.net
Visual Studio 2015 の専用スレッドがあるみたいだから
そちらで質問すればエラーの理由と対処法が分かるかも。

Part4 が今年になって建てられているようだ。
コメント1件

359
デフォルトの名無しさん[sage]   投稿日:2016/03/21 20:11:48  ID:5Pe+8Vgq.net(4)
>358
ありがとうございます。気が向いたらそちらに質問させていただきます
とりあえずoperatorではなく関数で対応するようにしました。

360
デフォルトの名無しさん[sage]   投稿日:2016/03/21 20:52:32  ID:tZIQ77lC.net
/clrオプションを指定してコンパイルしているとそんな状況でエラーが出ることもあるようだな

361
デフォルトの名無しさん[sage]   投稿日:2016/03/21 21:36:35  ID:fU37GtsM.net
>347
遅くなりましたが、ありがとうございます
解決しました

362
デフォルトの名無しさん[]   投稿日:2016/03/22 15:16:38  ID:bNAVuy+v.net(2)
C言語の初心者として、ポインターの仕組みについて勉強をしています。
下記のプログラムはコンパイルできますが、実行すると
segmentation faultになってしまいます。どこを修正
すればよいのでしょうか?よろしくお願いします。

http://ideone.com/RYIQPJ
コメント1件

363
デフォルトの名無しさん[sage]   投稿日:2016/03/22 15:21:37  ID:idYykKmC.net
ひとまず行番号が紛れ込んでるので
消してから来てくれるといいかも

364
デフォルトの名無しさん[sage]   投稿日:2016/03/22 15:27:15  ID:IkdBLUXL.net
a = (char**)malloc(sizeof(char*) * 2);

365
デフォルトの名無しさん[sage]   投稿日:2016/03/22 16:51:41  ID:0b4iocXG.net
*a = (char*)malloc(128 * 2);

366
デフォルトの名無しさん[sage]   投稿日:2016/03/22 16:56:04  ID:cRV6j0bX.net
もしかして64bitと64バイト間違えてる?

367
デフォルトの名無しさん[sage]   投稿日:2016/03/22 22:18:25  ID:icYWCtsj.net
>362
a+1 の領域が確保されてないから 364 のように確保する。
コメント1件

368
362[sage]   投稿日:2016/03/22 23:29:49  ID:bNAVuy+v.net(2)
みなさんありがとうございました。
分からない警告が出ますが、想定内の実行はできました。

test7.c:7:16: warning: incompatible implicit declaration of
built-in function ‘malloc’

>367
レスありがとうございます。実行不可の意味が分かりませんでした。
だからsegmetation faultなのですね。

369
デフォルトの名無しさん[sage]   投稿日:2016/03/23 00:00:31  ID:KYuvKtO/.net
#include <stdlib.h>

370
デフォルトの名無しさん[]   投稿日:2016/03/30 13:44:09  ID:G7ZCwJy+.net(2)
c言語の中級目指しています。
以下のプログラムで3つわからないところがあります。
よろしくお願いします。

1
static void
free_cmd(struct cmd *cmd)
{
free(cmd->argv);
free(cmd);
のところですが、free(cmd)のみでは構造体の領域
開放がおこなわれないのでしょうか?

2
static void*
xrealloc(void *ptr, size_t size)

関数を呼び出す側からみれば、void **ptrにした方が
いいのではないのでしょうか?

3これは根本的に理解できいません。

cmd->argv[cmd->argc] = p;

この構造体のメンバーの配列には、どのような内容が
入力されていくのでしょうか?特に入力順番がわかりません。

アルゴリズムの問題だと思います。自分の実験した小プログラム
でにおいて、配列には’長い文字列のアドレス’から’短い文字列アドレス’の
順に入力されました。
自分はソースコードを読んでるとき逆に読んでました。
コメント3件

371
370[]   投稿日:2016/03/30 13:45:26  ID:G7ZCwJy+.net(2)
すみません。ソースコード貼忘れてました。

http://lifeloveregret.googlecode.com/svn/trunk/c/answer/LinuxProgramming-samples/s...

372
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2016/03/30 14:10:56  ID:GvtcJfJR.net
>370
1 cmd->argvとcmdは違うメモリーブロック。解放されない。

2 xreallocは標準関数reallocをまねて作られている。
第一引数がvoid**で戻り値なしなら、エラーが起きたときの扱いがややこしくなる。

373
デフォルトの名無しさん[sage]   投稿日:2016/03/30 19:33:40  ID:k/+VMgXF.net
>370
realloc() は使わないほうがいい,エラー処理をまともに実装しようとすると realloc() の存在が悪になる
コメント1件

374
デフォルトの名無しさん[sage]   投稿日:2016/03/30 23:34:32  ID:jnPwp4pc.net(2)
>370-371
3
cmdlineを空白文字で単語に区切って左側の単語からその単語へのポインタが入力されていく
例えばcmdlineが

375
374[sage]   投稿日:2016/03/30 23:38:15  ID:jnPwp4pc.net(2)
あれ途中で消えた?
3
cmdlineを空白文字で単語に区切って左側の単語からその単語へのポインタが入力されていく
例えばcmdlineが”one two three”という文字列へのポインタだった場合
cmd->argv[0]にはoneの先頭のoへのポインタ
cmd->argv[1]にはtwoの先頭のtへのポインタ
cmd->argv[2]にはthreeの先頭のtへのポインタ
が代入される
コメント1件

376
デフォルトの名無しさん[sage]   投稿日:2016/03/31 06:33:12  ID:sYy1gdjM.net(2)
>373 の件、もう少し詳しく教えてもらえまいか。

エラー処理において realloc() の存在が害になる状況を
例示してくれれば、その先は自力で考えたいのだけど…。
コメント1件

377
デフォルトの名無しさん[sage]   投稿日:2016/03/31 07:47:07  ID:X8/ytHGi.net(7)
>376
realloc() を二回繰り返す動作をサブ関数としてまとめるとする.
realloc()の返り値(正常/異常)もサブ関数から返すとする.
これで考えてみて.
C++ には new/delete しかない.
コメント1件

378
デフォルトの名無しさん[sage]   投稿日:2016/03/31 09:44:45  ID:90m4Y48w.net(2)
vector内で引数と最初に合致する要素のインデックスを返す関数を作りたくて

template <typename TYPE> int std::vector<TYPE>::find_first(const TYPE element){
 for(int i = 0 ; i < size() ; ++i){
  if(element == at(i)) return i ;
 }

 return -1 ;
}

と書いたのですが、以下のエラーが出ます。
error C2039: 'find_first' : 'std::vector<TYPE>' のメンバーではありません。
テンプレートの文法もちょっと自信なくて、テンプレートが間違っているのか
そもそも外部で新たに定義することはできないのかわかりません。
どうしたら関数を作れますか?
コメント1件

379
デフォルトの名無しさん[sage]   投稿日:2016/03/31 10:14:25  ID:n/eFTOI8.net
>378
外部で新たにvectorのメンバ関数を定義することはできない
vectorを引数にとる普通の関数として定義する

template <typename TYPE> int find_first(const std::vector<TYPE> & vec, const TYPE element){
 for(int i = 0 ; i < vec.size() ; ++i){
  if(element == vec.at(i)) return i ;
 }

 return -1 ;
}

vector<int> v;
find_first(v, 100);
コメント1件

380
デフォルトの名無しさん[sage]   投稿日:2016/03/31 13:32:36  ID:90m4Y48w.net(2)
>379
vectorも引数にすればよかったんですね
ありがとうございます

381
370[sage]   投稿日:2016/03/31 16:30:35  ID:82dYqFlv.net(3)
みなさんレスありがとうございました。
>375
丁寧な説明ありがとうございます。
そのように動くとは思っていましたが理解は
できていませんでした。

次のアルゴリズム実験プログラムで確認できました。
ただprintfの置く行は気をつけないと、とんでもない
結果がおきました。このアルゴリズムの場合printfは
”式の前”に置かないといけないようですね。
http://ideone.com/pWrZu5

何かコメントがありましたら、お聞かせ下さい。
まだアルゴリズムの理解は足りていないので。
コメント1件

382
デフォルトの名無しさん[sage]   投稿日:2016/03/31 17:45:56  ID:sYy1gdjM.net(2)
>381
本当にリンク先のプログラムで動いてるかな。
最初の "*p1=..." に無意味な文字列が表示されないか?

少なくとも20行目と21行目は順番が逆だと思う。元のソースだと、
20行目 printf("*p1=%s\n",p1); に最初に到達したとき
p1が未設定、つまりどのアドレスを指しているか分からない状態で、
かなりマズい、というかCでは絶対に避けるべき状況になってる。


もうひとつ細かいネタ。同じく20行目(修正後21行目)の
printf("*p1=%s\n",p1); を
printf("*p1=[%s]\n",p1); に変えると、
「文字列の先頭/末尾の空白文字」がうっすら見えるようになるよ。
コメント1件

383
デフォルトの名無しさん[sage]   投稿日:2016/03/31 18:13:37  ID:LEcDKdjY.net
>377
何が問題だと言ってるの?
reallocを2回以上繰り返しても最後の結果だけ返せばいいでしょ。普通に作れば
コメント1件

384
デフォルトの名無しさん[sage]   投稿日:2016/03/31 20:17:50  ID:X8/ytHGi.net(7)
>383
1回成功して1回失敗した場合に適切に作れない
コメント1件

385
デフォルトの名無しさん[sage]   投稿日:2016/03/31 21:06:05  ID:ScXuRFRf.net(2)
>384
> 1回成功して1回失敗した場合に適切に作れない
お前個人の話?
なら納得するけど w

どこが難しいのかさっぱりわからん
まさかと思うが、戻り値は一つで両方失敗したことと片方だけ失敗したことを知りたいとかじゃないよな
コメント1件

386
デフォルトの名無しさん[sage]   投稿日:2016/03/31 21:13:55  ID:X8/ytHGi.net(7)
>385
いやいや,1回 realloc() に成功すると,realloc() に渡したポインタは無効になる事実が問題なんだよ
realloc() 複数回を一つのサブ関数にまとめたとき,中途半端に成功した事実が呼び出し側で把握できなくなってしまう
呼び出し側で持っていたもともとのポインタがサブ関数で無効になってしまう
(サブ関数で有効な最後のポインタを返してくることにするのも,それはそれで扱いに困る)
コメント2件

387
デフォルトの名無しさん[sage]   投稿日:2016/03/31 21:21:26  ID:ScXuRFRf.net(2)
>386
要件ちゃんと書いてくれ
なんか失敗したら元の領域保持しろとか realloc に無理難題押し付けて使えねー
って言ってるとしか思えん
コメント1件

388
デフォルトの名無しさん[sage]   投稿日:2016/03/31 21:30:08  ID:X8/ytHGi.net(7)
>387
以下の仕様を満たす関数sub() を記述せよ
char *sub(char *p, int m)
p は malloc() で確保されたナル文字列の先頭へのポインタ
文字列 p の後ろに「2 から数えて m 番目の素数の十進法表現」を接続し,さらにもう一度後ろに p を接続した文字列の先頭を指すポインタを sub() は返す.
sub() の返り値は最終的に free() されることを前提にする.

結局 realloc() を使わないで実装することになる
コメント2件

389
370[sage]   投稿日:2016/03/31 21:51:26  ID:82dYqFlv.net(3)
>382
レスありがとうございます。
20行と21行を変えると”表示”は上手くいきませんでした。

おしゃる通り”一回目ののp1”は問題あるので、
結局13行目に

*p1=NULL;

を付け加えました。
コメント1件

390
370[sage]   投稿日:2016/03/31 21:55:12  ID:82dYqFlv.net(3)
>389 自己訂正です

*p1=NULL;→ p1=NULL;

391
デフォルトの名無しさん[sage]   投稿日:2016/03/31 22:12:46  ID:CIggS/vG.net
>388
なんか持論に合うように無理やりな仕様を持ち出しているような気がする
コメント1件

392
デフォルトの名無しさん[sage]   投稿日:2016/03/31 22:20:40  ID:X8/ytHGi.net(7)
>391
そう感じさせるのは悪かった,そうだな,sub() は与えられた asciiz 文字列から新たな asciiz 文字列を作る下請け関数として考えてくれ
失敗したら一律に null を返す,でもいいかもしれないね

393
デフォルトの名無しさん[sage]   投稿日:2016/03/31 22:25:59  ID:qF1fcJk9.net
すいません、教えてください。

以下Rubyスクリプトと等価なCコードを書こうとおもったらどう書けばいいですか。
特にfとgの型はどう宣言したらいいですか?

g=nil

f=lambda{
print "f";
return g
}

g=lambda{
print "g"
return f
}

a=f
10.times{a=a.call}
コメント1件

394
デフォルトの名無しさん[sage]   投稿日:2016/03/31 22:28:43  ID:X8/ytHGi.net(7)

395
デフォルトの名無しさん[sage]   投稿日:2016/03/31 22:36:47  ID:Tq9AKUqv.net(2)
>388
p が指す文字列の長さはわかるから素数の 10 進表現の領域確保する時に一緒に確保すれば realloc 一回でいいだろ...
プログラミング能力無さすぎるだけじゃん w
コメント1件

396
デフォルトの名無しさん[sage]   投稿日:2016/03/31 22:53:29  ID:X8/ytHGi.net(7)
>395
まあ realloc() を複数回実施するときの困難をお題にしたかったんだけどね
次々と 文字列へのポインタが姿をかえて関数をわたっていくような場合とかね

簡単な記述でrealloc() の問題を指摘できなかったのは残念
コメント1件

397
デフォルトの名無しさん[sage]   投稿日:2016/03/31 23:32:54  ID:Tq9AKUqv.net(2)
>396
結局自分では何も困ってなくて、どこかの受け売りで realloc ガー
って騒いでたってオチかよ...

398
376[sage]   投稿日:2016/04/01 08:28:39  ID:mYua7P08.net
昨日の ID:X8/ytHGi (レス数が多いのでリンクは略) の
「内部で複数回のrealloc()が必要な下請け関数」の議論は
詳しい説明でよく分かったよ。
下請けの途中で(どの段階でも)失敗したら、呼び出し前の状態が
そのまま残っていて欲しいってのは自然な要求だしね。

ただ、内部でのrealloc()が1回で済むように下請け関数を作る、
という対処もありうるよな。それが常に可能かはまた別の問題だけど。
コメント2件

399
デフォルトの名無しさん[sage]   投稿日:2016/04/01 10:41:33  ID:cPCkQ397.net
論点ずらして突っ込むバカは無視していいよ

400
デフォルトの名無しさん[sage]   投稿日:2016/04/01 19:29:06  ID:cIUJiKQr.net
>398
> 下請けの途中で(どの段階でも)失敗したら、呼び出し前の状態が
> そのまま残っていて欲しいってのは自然な要求だしね。
呼び出し前の状態ってなんのことを言ってるのかによるけど、領域の内容の話なら残ってるだろ
>386 は元々のポインタが無効になるのが問題とか言ってるけど、領域拡張するなら元の領域と違う場所に確保するしかないんだから、無理難題にしか見えない
new/delete ならうまく行って、realloc でダメな例を示してほしいよ

401
デフォルトの名無しさん[sage]   投稿日:2016/04/01 19:48:04  ID:U/2PmOzZ.net
>398
どちらにせよrealloc()の仕様を理解していればいいだけの話
これから自分が作ろうとする関数の実装に向かないと思うなら使わなければいいってだけじゃん
悪だとかrealloc() の問題って言っているのは仕様を理解せずに無理にrealloc()を使おうとするからだろ?

realloc() 自体は「メモリアドレスが変わってもいいから、要求されたサイズのメモリ領域を確保して欲しい」という要求には答えている
”元のメモリ領域拡張だけを試みる関数だったら”と言うのもあるが「拡張に失敗するなら元のサイズで良いや」ってのはあまりいないだろう
結局プログラマは、拡張に失敗したなら必要なサイズのメモリ領域を確保し、そこに元のデータをコピーして、古いメモリ領域は開放するだろ?
realloc()の仕様そのまんまじゃん
ならばrealloc()の仕様もまた 自然な要求 に答えただけだよ

402
デフォルトの名無しさん[sage]   投稿日:2016/04/02 21:11:02  ID:R7MxdGwK.net
C言語の標準入力って結局のところ何がいいのさ
コメント1件

403
デフォルトの名無しさん[sage]   投稿日:2016/04/02 21:30:41  ID:Tx7DR71P.net
標準入力の良さを語れと言っているの?
標準入力が複数あってどれを選べばいいか聞いてるの?
そもそも何を言っているの?

404
デフォルトの名無しさん[sage]   投稿日:2016/04/02 22:55:27  ID:EwvTfYNw.net
getchar()とかscanf()とかの話でしょ

405
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2016/04/02 23:07:16  ID:k91t9LjX.net
scanfは試験に出るから覚えてるだけで、現実にはfgetsとsscanfをよく使うよ。
しかしfgetsには字数制限があるので、std::getlineに軍配が上がる。
getsはセキュリティ上使っちゃダメ。
コメント1件

406
デフォルトの名無しさん[sage]   投稿日:2016/04/03 06:38:51  ID:g2YA8l0n.net
標準入力の便利なところはズバリ、
パイプで前段の出力を受け取れることなんだが、
GUIツールを作る人にはピンとこない話かもな。

昔なら「コマンドライン引数として対象ファイルが与えられていたら
そのファイルを処理し、与えられなかったら標準入力を処理する」
という動作をさせたものだが、今ではちょっと気の利いたツールでも
「コマンドライン引数で対象ファイルを指定されなかった場合は
GUIのウインドウを表示する」だよね。

407
デフォルトの名無しさん[sage]   投稿日:2016/04/03 08:54:06  ID:iMLPYfGS.net
>405
fgets の字数制限はループにして,はずせばいいよ

408
デフォルトの名無しさん[sage]   投稿日:2016/04/03 14:33:51  ID:azZmmaKg.net
>402
コンソールでキーボード入力しても
テキストファイルから読み込んでも
テキストを吐くツールからの出力でも
ネットワークごしに受信したデータでも

みんな同じ処理で取れるからだよ

今時はコマンドコンソールじゃなくてCGIの方がウケると思うけどな

409
デフォルトの名無しさん[sage]   投稿日:2016/04/03 15:05:13  ID:1hzZ1h9p.net
やっぱり曖昧さを含む文章で質問すると駄目だね

410
デフォルトの名無しさん[sage]   投稿日:2016/04/05 02:38:42  ID:yVKcFgqN.net
大抵のデバッガはある時点での関数呼び出しの履歴やその関数にどういった値が渡されたかを見ることができますが、このようなプログラムを作るのは難しいですか?
コメント3件

411
デフォルトの名無しさん[]   投稿日:2016/04/05 02:48:43  ID:KWKZQVNf.net
c++で直接定義する関数とクラスメソッドの違いというか扱いの差ってなんですか?
オブジェクト言語から入ってるので直接定義する関数はオブジェクト志向でいうなんとかみたいな感じで説明してもらえるとありがたいです

クラスメソッドと直接定義する関数は普通に呼んだり呼ばれたりできるんでしょうか?
コメント1件

412
デフォルトの名無しさん[sage]   投稿日:2016/04/05 06:09:26  ID:lqoS60o2.net
苦しんで覚えるC言語て本にscanfは禁止令が出てる会社学校があるとありますが
scanf関連は覚える必要が無いのでしょうか?
初学者の質問ですがお願いします^^;
コメント1件

413
デフォルトの名無しさん[sage]   投稿日:2016/04/05 06:29:12  ID:zRkYu6zn.net
>412
自分が完全に支配できるのなら、別に使っても良い
ユーザーの入力なんかの制御できないものには使わぬ方が良い

414
デフォルトの名無しさん[sage]   投稿日:2016/04/05 08:38:57  ID:+yE88Sty.net(2)
実際には出来る限り使わないようにするけど
scanfわかりません = C言語わかりません と同じ意味だよ

初心者が必ずハマる罠が待ってるし最後でいいから必ずおさえること

415
デフォルトの名無しさん[sage]   投稿日:2016/04/05 08:59:32  ID:09gKpNs2.net
scanf使ったことないな
そもそもstdio自体ここ何年も使ってない

416
デフォルトの名無しさん[sage]   投稿日:2016/04/05 13:16:57  ID:vmxwEzAv.net
初学者はscanfを避けるんじゃなく、理解した上で使わないことが重要

417
デフォルトの名無しさん[sage]   投稿日:2016/04/05 13:27:37  ID:D/kBJTR9.net
>410
そうしたプログラムを作るには
・より専門的な領域での知識とその領域に限定的な技術を習得する必要がある
・資料の絶対数が少ないうえに専門家向けの物が多い
といったあたりで普通のプログラムを作るときと比べれば難易度は高めといえるな
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2016/04/05 21:01:44  ID:LI4Y2V/y.net(2)
>410
コンパイラーやコンパイルオプションによって渡し方が違ったりするので、きちんと作るのは大変
>417 の言うようにドキュメントが入手できるとは限らんし
色々決め打ちでいいならなんとかなると思う
ただしアセンブラ使える程度の知識は必須

419
デフォルトの名無しさん[sage]   投稿日:2016/04/05 21:04:56  ID:LI4Y2V/y.net(2)
>411
> オブジェクト言語から入ってる
世の中にオブジェクト指向言語がいくつあると思ってるんだよ
コメント1件

420
デフォルトの名無しさん[]   投稿日:2016/04/05 21:30:56  ID:Kw+zELRm.net
>419
レスありがとうございます。
言語特定した方が説明しやすいのでしょうか?
正確にはas3から学習始めたのですが少しマイナーかなと……
androidJava、objective-cならある程度わかるのでその辺りで説明していただけるとありがたいです。

421
デフォルトの名無しさん[sage]   投稿日:2016/04/05 22:59:54  ID:+yE88Sty.net(2)
>410
>クラスメソッドと直接定義する関数は普通に呼んだり呼ばれたり
出来る

C++では非メンバ関数と呼ぶ
といっても大した違いはない

元々Cにクラスを後付して作られた言語だから
古いライブラリはクラスを使ってない
クラス主体がいいならそうすればいい

あえて違いを挙げるならクラスメンバ関数はわずかに遅くなるから
その辺がどうしても許せなければクラスを避けるということもあるけど

422
デフォルトの名無しさん[]   投稿日:2016/04/06 00:43:46  ID:Py7RTr3F.net
Linux上での名前解決のAPI、getaddrinfo()について
質問があります。

関数の形は以下です。

int getaddrinfo( const char *node,const char *service,
const struct addrinfo *hints,struct addrinfo **res)

最後の引数,"struct addrinfo **res"がどうして、
ダブルポンタにしなくてはならないのか、分かりません。
どなたか、簡単に教えてくださらないでしょうか?
コメント1件

423
デフォルトの名無しさん[sage]   投稿日:2016/04/06 00:56:07  ID:7pIXqQc2.net(2)
質問です。
class Data{int a;int b;int c;
};
std::vector<Data>v;
Data d ={1,2,3};
v.push_back(d);

って感じでvectorにクラスとか構造体をpush_backした時って
要素を全部コピーして新しくメモリにデータを作っているんですか?
だとすると、
Data d;
for(int n=0;n<10;n++)v.push_back(d);
みたいに書いた場合、vのどの要素も同じポインタを示してるんじゃなくて、
push_backする度に別のメモリにデータを作ってるんですか? お願いします。
コメント1件

424
デフォルトの名無しさん[sage]   投稿日:2016/04/06 01:08:17  ID:74XNtOnL.net(2)
>422
関数内でメモリを動的に確保してそのポインタを(*res)に代入して返すから
コメント1件

425
デフォルトの名無しさん[sage]   投稿日:2016/04/06 01:11:44  ID:74XNtOnL.net(2)
>423
> push_backする度に別のメモリにデータを作ってるんですか?
その通り
コメント1件

426
デフォルトの名無しさん[sage]   投稿日:2016/04/06 01:13:31  ID:7pIXqQc2.net(2)
>425
ありがとうございました。これで生きていけます。

427
デフォルトの名無しさん[]   投稿日:2016/04/06 17:30:37  ID:9PDK4V7Z.net
素人ながら将棋ソフト(Apery https://github.com/HiraokaTakuya/apery)のソースコードを読めるようになりたいと思っています
しかし、C++の入門書を読んでから眺めてみても、実物のソースコードは一行に複雑な処理が押し込まれており、何をしているのかなかなか読めません
恐らく一般的な開発手法が身についていないと読むことは到底出来ないのだろうと推測していますが、なにか良い演習教材などがあれば教えて下さい

また、次の理由が理解を遅らせているような気がします
これらの点を個別に身につける方法があれば教えて下さい
・自分が一般的な開発手法が身についていないこと
・ヘッダファイルの中身が入門書レベルでは意味不明なことと
・動かしながら挙動を調べたくてもステップ実行の方法がわからないたこと

よろしくお願いします
コメント4件

428
デフォルトの名無しさん[]   投稿日:2016/04/06 17:51:42  ID:JMybFTpe.net
>427
すべてわかる必要なし
標準関数、STLですらわかってないのが大半だろ。
たぶん

429
デフォルトの名無しさん[sage]   投稿日:2016/04/06 17:54:46  ID:/IBevvIO.net
>427
まず大まかな流れだけ追う
後は1つ1つ気になった所だけ見ていくでいいよ

430
デフォルトの名無しさん[sage]   投稿日:2016/04/06 18:09:07  ID:goAIGnqr.net
見たいのは手の評価の部分だろうから score で検索して
周辺を見ていくのがいいんじゃないかな

コメントや関数名などを見て必要なさそうな所はバンバン切り捨ててよし

431
デフォルトの名無しさん[sage]   投稿日:2016/04/06 19:45:01  ID:qohl0JPc.net
>427
う〜ん、将棋ソフトのアルゴリズムに詳しいの?
ならいいけど、そうでないならもっと簡単な奴から始めた方がいいんじゃね?
例えばリバーシ
http://www.geocities.co.jp/SiliconValley-Bay/4543/Osero/

432
デフォルトの名無しさん[sage]   投稿日:2016/04/06 20:43:52  ID:l0k4MgTU.net
ざっとしか見てないけどそこまで突飛なコードはないように見える
あとこういうボードゲームはある程度同じようなコードになりやすいからそれに慣れてないだけじゃないか
moveとかposとかもろでしょ

433
デフォルトの名無しさん[sage]   投稿日:2016/04/06 20:53:28  ID:+DLeHnYt.net
>427
対戦型のボードゲームのAIアルゴリズムに関する基礎知識があると良いのでは。
オライリーのアルゴリズム クイックリファレンスという本に、ゲーム木のアルゴリズムがいくつか説明されているよ。
ミニマックス法、negmax法、アルファベータ法とか。
ゲーム木以外にも、ソートや最短経路探索とか、いろいろ扱っていて、参考になると思うよ。

434
デフォルトの名無しさん[sage]   投稿日:2016/04/06 21:15:57  ID:H8hE7WlY.net
コリコリにチューニングされたコードを部外者が読むのは相当しんどいと思うんだが。
長い年月をかけてぐちゃぐちゃになってそう。見てないけど。

435
422[sage]   投稿日:2016/04/07 23:15:19  ID:Xs8CGXEi.net
>424
レスありがとうございます。ただ、まだ理解できていません;;
本体のソースは以下の通りです。
http://lifeloveregret.googlecode.com/svn/trunk/c/answer/LinuxProgramming-samples/d...

解説図によるとリストを作成し
**resのダブルポインタによって
*res→構造体1→構造体2……

となるようですが、
*resのシングルポインタで
res→構造体1→構造体2……

とはできないのでしょうか?

どなたでもよろしいのでおしえてくださらないでしょうか?
コメント3件

436
デフォルトの名無しさん[sage]   投稿日:2016/04/08 00:21:41  ID:92gpEbvG.net(2)
>435
深く考えるな

「作成した文字配列」を返す関数を作ってみろ
ただし return によってそのアドレスを返してはダメだ
これができればおのずと理解できる

ヒントは

「おばあちゃんの家に箱を持っていくとりんごを入れてくれます」 ・・・シングルポインタ
「おばあちゃんの家に行くと箱に入ったりんごをくれます」 ・・・ダブルポインタ

変数というのは何かを入れる箱だと教わった記憶はあるかな?
普通に引数に変数を指定しても「箱」が変わってしまうために、関数で中身を変えても元の箱の中身が変わることは無い
じゃあ箱を用意してその箱を引数に渡そうってのがシングルポインタ

では箱も相手が用意する場合、その箱ごと貰うためにはどうしたらいいか?
箱を入れる箱を用意して、そこに箱ごと入れてもらおうってのがダブルポインタ

typedef を知っているなら「りんごを入れる箱」を定義して、それを入れる箱という意味でシングルポインタとして扱っても良い
コメント1件

437
デフォルトの名無しさん[sage]   投稿日:2016/04/08 00:48:39  ID:DBhuX0XJ.net(2)
#if LOGOUT
logout("hoge");
#endif
とするといちいち#ifをかかなければいけなくてきたなくなるんですが
なにかかっこいいほうほうありますか?
void logout(const char* str)
{
#if LOGOUT
//なにがし
#endif
}
だと
logout("hoge");の度に無駄に
引数をスタックにpushして
リターンアドレスもpushして
callして・・・
と無駄ですよね
コメント2件

438
デフォルトの名無しさん[sage]   投稿日:2016/04/08 01:05:23  ID:92gpEbvG.net(2)
>435
ダブルポインタは「配列を受け取る箱のアドレスを示している」ってのを理解できれば

439
デフォルトの名無しさん[sage]   投稿日:2016/04/08 01:57:31  ID:DnxxMOIr.net(2)
>437
最適化で消えるから気にしないってのが一番スマートかと

440
デフォルトの名無しさん[sage]   投稿日:2016/04/08 02:14:39  ID:LFrj8SRS.net(2)
>437
元のLOGOUTとlogoutの使い方がよくわからんがな

void logout_impl(const char* str) {...}
#if LOGOUT
#define logout(s) logout_impl(s)
#else
#define logout(s) /*empty*/
#endif
コメント1件

441
デフォルトの名無しさん[sage]   投稿日:2016/04/08 02:36:19  ID:LFrj8SRS.net(2)
>435
> *resのシングルポインタで
> res→構造体1→構造体2……
>
> とはできないのでしょうか?
機能的にはそれでもいいんだけどな

でもそれだとリストの最初の要素を使うときには
res.ai_addr
二つめ以降の要素を使うときには
p->ai_addr
と.と->を使い分けるほうが面倒くさくても自然なやり方になってしまう
だったらresもポインタにして
res->ai_addr, p->ai_addr
として自然に一貫したやり方で扱える方がいいだろ

他にもポインタでなく値で返すと
後で解放用の関数に渡してメンバの解放をする必要があることを忘れてしまう
とかの理由もあってそういう設計になっている
コメント1件

442
デフォルトの名無しさん[sage]   投稿日:2016/04/08 02:49:08  ID:DBhuX0XJ.net(2)
>440
引数が可変なんですが
コメント1件

443
デフォルトの名無しさん[sage]   投稿日:2016/04/08 03:43:08  ID:DnxxMOIr.net(2)
>442
可変長でもマクロにできるよ、古いと対応してないかもしれんが
#define logout(...) logout_imple(__VA_ARGS__)

444
422[sage]   投稿日:2016/04/08 18:24:00  ID:E6f7kqrG.net
>436 >441
レスありがとうございました。
ようやくわかりました!
とくに441さんの説明でわかりました。
恥ずかしい話ですが、理解するまで2日ぐらいかかりました;;
英語のサイトも検索してみました。

C言語とUNIXのAPIは、それなりに難しいのだと痛感して
おります。当たり前でしょうが、
通信プログラムはJavaの方がもっと単純だった記憶があります。

445
デフォルトの名無しさん[sage]   投稿日:2016/04/09 14:43:14  ID:zLInGFTB.net(3)
構造体のアラインメントについて、結果がすべて256になるよう以下のコードを書いたのですが意図した通りにはいきません。
またideoneとVisual Studio 2015とで異なる結果が得られます。
alignasやaligned_storageを意図通りに(256になるように)働かせるにはどこを直せばよいですか。

http://ideone.com/3fVf9P
size=4, align=4.
size=4, align=4.
size=4, align=4.
size=256, align=256.

Visual Studio の出力(Win32/x64どちらも同じ)
size=256, align=256.
size=256, align=8.
size=256, align=8.
size=256, align=8.
コメント2件

446
デフォルトの名無しさん[sage]   投稿日:2016/04/09 17:33:12  ID:zLInGFTB.net(3)
ためしにアラインメントを違う値(64)にしたところideoneの出力はすべて64になりました。
たんに256の値が扱う範囲を超えていたということでしょうか。
ただvisual studioのalign=8は変わらずなので、そっちの理由はわからないままです。

447
デフォルトの名無しさん[sage]   投稿日:2016/04/09 17:48:32  ID:4XKJWWPC.net(2)
手持ちのgcc 4.8.4じゃalignas(256)は
warning: requested alignment 256 is larger than 128 [-Wattributes]
になるけどな
gcc 5.1じゃwarningも出さないでalignasを無視するのか?変だね

448
デフォルトの名無しさん[sage]   投稿日:2016/04/09 18:02:12  ID:2iWpFKOA.net
どう見てもパディング関連だろ

449
デフォルトの名無しさん[sage]   投稿日:2016/04/09 18:37:23  ID:zLInGFTB.net(3)
gccについては使ったことがないのでバージョンごとの違いについてもどうこう言えませんが、
パディング関連とはどういうことでしょうか。もう少し詳しく聞きたいです。
コメント1件

450
デフォルトの名無しさん[sage]   投稿日:2016/04/09 19:03:37  ID:4XKJWWPC.net(2)
>449
>445のideoneのはgcc 5.1だよ

451
デフォルトの名無しさん[sage]   投稿日:2016/04/09 19:56:34  ID:6R5fzUhl.net
まーだダブルポイタとか言ってる子がいるのか
だれがどこで広めてんだダブルポインタって

452
デフォルトの名無しさん[sage]   投稿日:2016/04/09 21:37:21  ID:8imgO17J.net(3)
だめなん?

453
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2016/04/09 21:41:12  ID:1rUso06b.net
double*と紛らわしいのでダメ。二重ポインタならOK。
コメント1件

454
デフォルトの名無しさん[sage]   投稿日:2016/04/09 21:41:12  ID:7CkGchmN.net
>445
構造体のアラインメントは処理系依存なので
同じにしたければパディング部分をダミーのメンバで満たす必要がある

455
デフォルトの名無しさん[sage]   投稿日:2016/04/09 21:52:03  ID:l8xjVqJC.net
構造体にはalignasが利かないと言っているのか?

456
デフォルトの名無しさん[sage]   投稿日:2016/04/09 21:53:15  ID:8imgO17J.net(3)
>453
ああ、言われてみれば確かに

457
デフォルトの名無しさん[sage]   投稿日:2016/04/09 21:58:00  ID:608RlWes.net
ダブルポイタwww

458
デフォルトの名無しさん[sage]   投稿日:2016/04/09 23:23:17  ID:6PFUIp35.net
前にもポインタへのポインタのことをダブルポインタって言ってるのがいたな
書いてる人は一般的に通じると思ってるようだけど、何かで使われてる用語なんだろうか

459
デフォルトの名無しさん[sage]   投稿日:2016/04/09 23:29:30  ID:8imgO17J.net(3)
良いか悪いかは別として、それなりに普及してる語ではあるんじゃないかな
自分も何年も前に聞いたし


どうでもいいけどビット演算に寄るフラグ管理で
foo |= flag; とかfoo &= ~flag; とかやると思うんだけど
なんか使うたびに数秒くらい悩んでしまう。
なんか良い方法ないかな
コメント1件

460
デフォルトの名無しさん[sage]   投稿日:2016/04/09 23:35:54  ID:5KKi1NYz.net
一旦使われだすと意地でも使う層があるからな
アップキャスト・ダウンキャストとかいう
出典も不明でどこにも定義されてない用語も日本じゃ出回ってる
ウィキペにも乗ってる「型変換」のページに乗ってる(誰が書いてんだあれ)

一方英語のType conversionページには
「In object-oriented programming languages, objects can also
be downcast : a reference of a base class is cast to one of its derived classes.」
とだけ載ってる
コメント2件

461
デフォルトの名無しさん[sage]   投稿日:2016/04/10 00:07:34  ID:zgMwjdkU.net
>459
std::bitsetで間に合わないのならtemplateで自前のset/reset/test 関数作っておく。
コメント1件

462
デフォルトの名無しさん[sage]   投稿日:2016/04/10 00:31:52  ID:F8NTR01v.net
>>451

double pointer でなくて、dual pointerならば
二重のポインタという意味でいいのではないでしょうか。
コメント1件

463
デフォルトの名無しさん[sage]   投稿日:2016/04/10 00:37:32  ID:R2GJbW+a.net(3)
>461
std::bitsetか、完全に忘れてたわ。
あとで調べてみよう

464
デフォルトの名無しさん[sage]   投稿日:2016/04/10 00:45:38  ID:lctucWPJ.net(2)
>462
dualでもニュアンスに違和感を感じる。
同じオブジェクトを指すポインタが2つある感じ。

465
デフォルトの名無しさん[sage]   投稿日:2016/04/10 00:47:53  ID:lctucWPJ.net(2)
>460
流れに乗れない層もどうかと思うぞ。

466
デフォルトの名無しさん[sage]   投稿日:2016/04/10 01:05:35  ID:cxqu8O/1.net
たんなるポインタへのポインタを特別視して
名前をつけようってのが意味不明で不可解
ひょっとして*と**を別物として認識してんじゃないかって不安になる

467
デフォルトの名無しさん[sage]   投稿日:2016/04/10 01:29:31  ID:R2GJbW+a.net(3)
int型のポインタのポインタのポインタ、とかまで行くと
流石に言い難いと思うの

468
デフォルトの名無しさん[sage]   投稿日:2016/04/10 03:00:57  ID:ZAuVeIVa.net
…実は心の中ではptrをぷとらと読んでます
コメント1件

469
デフォルトの名無しさん[sage]   投稿日:2016/04/10 08:55:55  ID:d/pLUTb8.net
>460
意地でもウィキペって使うんだな

470
デフォルトの名無しさん[sage]   投稿日:2016/04/10 20:20:27  ID:a4MI7w0Y.net
「アップキャスト」「ダウンキャスト」って初めて聞いたけど、いかにも和製英語っぽい響きだな

471
デフォルトの名無しさん[sage]   投稿日:2016/04/10 20:22:07  ID:R2GJbW+a.net(3)
一応、英語っぽいけどね

472
デフォルトの名無しさん[sage]   投稿日:2016/04/10 20:35:43  ID:8kVuH12a.net
アップキャスト/ダウンキャストは英語圏でもC++の文脈で普通に使われてるから
「用語としておかしい!」とか言い出す困ったちゃんは見たことないなあ
http://stackoverflow.com/questions/8223365/upcast-and-downcast-in-c
コメント1件

473
デフォルトの名無しさん[sage]   投稿日:2016/04/10 21:44:18  ID:engRimKH.net
>468
そんな奴いない

474
デフォルトの名無しさん[sage]   投稿日:2016/04/10 21:59:03  ID:Msqh6OQ2.net(2)
falseの読みをいつも忘れてゴモゴモ言って誤魔化してる
…フォルスだよね?

>472
少なくとも日本語圏では間違いじゃないよね?
和製英語だろうとなんだろうと説明するのに無いと困るわー
特に今は新人教育(入門編)の時期だし

475
デフォルトの名無しさん[sage]   投稿日:2016/04/10 22:13:09  ID:FNu9TvqZ.net(2)
キャストって明示的な型変換のことでしょ?
アップキャストって
base b = (base)d;
こんな狂ったことすんの?
それとも
base b = d;
この単なる暗黙の型変換のことを「キャスト」とか言い出しちゃうの?
コメント2件

476
デフォルトの名無しさん[sage]   投稿日:2016/04/10 22:24:31  ID:4zsRISHG.net
そこじゃないだろ

477
デフォルトの名無しさん[]   投稿日:2016/04/10 22:26:59  ID:7Ok+rt99.net
よくわかってないのに一家言もつ人w

478
デフォルトの名無しさん[sage]   投稿日:2016/04/10 23:17:10  ID:M23QAKIs.net
教科書みたいなコピーコンストラクタの例だな
コメント1件

479
475[sage]   投稿日:2016/04/10 23:33:46  ID:FNu9TvqZ.net(2)
base *b = (base *)d;

(´・ω・`)最初からこう書いとくべきだったね
書かなきゃ分からん人もいるからね
コメント1件

480
デフォルトの名無しさん[sage]   投稿日:2016/04/10 23:50:56  ID:Msqh6OQ2.net(2)
>475
広義の"キャスト"は型変換のことで、
狭義の"キャスト"はキャスト演算子を使った明示的なキャストのこと…あたりかな

英語だとtype castingだからキャストは変換が正しいのかな…
型キャストみたいな言い方もするよね
コメント1件

481
デフォルトの名無しさん[sage]   投稿日:2016/04/11 00:40:37  ID:i7Hb58ma.net
>480
広義のとか英語と言われてしまうと不勉強でついていけないけど
狭義のものについていくつか例をあげとく

https://en.wikipedia.org/wiki/Type_conversion
Type conversion
 1 C-like languages
  1.1 Implicit type conversion
  1.2 Explicit type conversion
↑暗黙的・明示的で型変換を分類
In the C family of languages and ALGOL 68, the word cast typically
refers to an explicit type conversion (as opposed to an implicit conversion)
↑さらにこのようにも書かれている

https://en.wikibooks.org/wiki/C%2B%2B_Programming/Programming_Language...
C++ Programming
 1 Type Conversion
  1.1 Automatic type conversion
  1.2 Explicit type conversion (casting)
↑自動的・明示的で型変換を分類し、後者をキャストとしている

まぁ参考程度に

482
デフォルトの名無しさん[sage]   投稿日:2016/04/11 07:02:43  ID:OGyFwqGU.net(2)
>479
> 書かなきゃ分からん人もいるからね
恥ずかしい奴 w
コメント1件

483
デフォルトの名無しさん[sage]   投稿日:2016/04/11 08:01:18  ID:rDPJ5tk/.net
>482
型がbaseなんだから基底クラス派生クラスのポインタってわかったけど・・・
コメント1件

484
デフォルトの名無しさん[sage]   投稿日:2016/04/11 08:38:23  ID:OGyFwqGU.net(2)
>483
何を勘違いしてるのか知らんけど
恥ずかしい奴と指摘してる対象は
* をつけ忘れた自分のミスを
> 書かなきゃ分からん人もいるからね
と他人に転嫁しようとしてるアホだぞ w

485
デフォルトの名無しさん[sage]   投稿日:2016/04/11 13:25:27  ID:8x/NJSRd.net
いやもともと*をつけ忘れたわけじゃないだろ
明示と暗黙の話のようだし
コメント1件

486
デフォルトの名無しさん[sage]   投稿日:2016/04/11 19:22:52  ID:bDNN4W3Y.net
脱線してるしどうでもいい
どうしてそこまで他人を煽りたがるのか

487
デフォルトの名無しさん[sage]   投稿日:2016/04/11 20:39:34  ID:lMeZFfb2.net
>485
だったらそのまま押し通せばいい
>478 で指摘されて、よくある例にした
って言えばいいだけなのに
> 書かなきゃ分からん人もいるからね
なんて書くからアホって言われる

488
デフォルトの名無しさん[sage]   投稿日:2016/04/12 00:08:32  ID:8Bg9MMbi.net
base だから派生クラスに対して基底クラスを示しているってのはわかるけど
クラス名を base って書くとそれはポインタの話だってのは暗黙的なことなの?
コメント1件

489
デフォルトの名無しさん[sage]   投稿日:2016/04/12 03:01:00  ID:0BB0Fz9I.net
まぁぶっちゃけ>475は最初と最後の2行で話が通じるんで
途中が間違っててもそんなに気にならない
コメント1件

490
デフォルトの名無しさん[sage]   投稿日:2016/04/12 06:15:23  ID:8wQ28NJb.net
基底クラスへのキャストが狂ったことだと?

491
デフォルトの名無しさん[]   投稿日:2016/04/12 06:50:47  ID:PgTedsFg.net
>489
最初の行から間違ってるだがw

492
デフォルトの名無しさん[sage]   投稿日:2016/04/12 08:54:20  ID:xYAotuK9.net
>488
ポインタのケースが圧倒的に大多数なので、C++ やってる奴なら暗黙的にポインタの話だと理解する
俺なんてポインタの話だと思い込んでスルーしてたぐらいだし

493
デフォルトの名無しさん[sage]   投稿日:2016/04/12 09:11:17  ID:a9FJA+OX.net
C++だとこの場合はポインタでも参照でもいいんだから
その片方だけを書いてしまうよりは
単に擬似コードとして(base)と書いてんので十分

それ見てコピーコンストラクタだと言い出しちゃう奴が
マジなのかネタなのか分からないが
コメント1件

494
デフォルトの名無しさん[sage]   投稿日:2016/04/12 09:56:14  ID:Lr8RZIpa.net
メモリポインタの話ならまかせとけ

495
デフォルトの名無しさん[]   投稿日:2016/04/12 11:20:00  ID:szNkUUWQ.net(3)
C++を学びたくてお勧めの書籍を聞いたんですが、オブジェクト指向について理解してなかったら
何の入門書を買っても理解出来ないよって言われてスッキリ分かるjava入門って本をお勧めされたんですが
javaの入門を読んだらC++の理解が簡単になるのでしょうか?javaは特に学ぶ予定は無かったので意味ないなら
C++の入門書を探し続けようと思ってるんですが・・・
因みにプログラミング学習経験は苦しんで覚えるC言語を読んだくらいしかないです
コメント2件

496
デフォルトの名無しさん[sage]   投稿日:2016/04/12 11:48:09  ID:bUQxXLucO(2)
読んでおいて損はないと思うよ。
Javaのオブジェクト指向はかなり正統派で文法もシンプルなので、
Javaが理解できれば他のオブジェクト指向にも応用できる。

暇も時間も無いならC++の入門書を探したほうが絶対いいけどね。
オブジェクト指向をきちんと解説してるC++の入門書を探すのが一番近道。

497
デフォルトの名無しさん[sage]   投稿日:2016/04/12 11:48:56  ID:r3xSDNTE.net
>493
疑似コード w

498
デフォルトの名無しさん[sage]   投稿日:2016/04/12 12:11:41  ID:JEO3UzSv.net
>495
自分もまだまだ勉強中だけど、それくらいの段階ならまだCをやった方がいいと思う
Cで作りたいものを5,6個つくるか、作るものが思いつかなければテトリスなどの簡単なゲームを作ったり、
paizaみたいなプログラミングのお題を出してるサイトのをこなすかすればいい。
C++はCをそれなりにやってからいかないとC由来のものとC++がごちゃごちゃになって自分はかなり後悔した
ある程度やってないと、オブジェクト指向の有用性も実感できないだろうし、有用性がわからないものを学ぼうとして理解できない
コメント1件

499
デフォルトの名無しさん[sage]   投稿日:2016/04/12 12:55:35  ID:szNkUUWQ.net(3)
>498
ありがとうございます
C++をやりたいならまずはC言語でプログラムの書き方に慣れるといいみたいなこと言われて
C言語の入門書を読み終えたんですけど、ただその時にC言語の癖がついてC++分かりにくくなるみたいなこと言われたんで
早めにC言語は切り上げようと思ってたんですが続けてたほうがいいんですか?
テトリスとか何か簡単なツール作ってみたいのですがオブジェクト指向がなんなのかもまだ分かってないです…
コメント3件

500
デフォルトの名無しさん[sage]   投稿日:2016/04/12 13:01:18  ID:qMEcfkxr.net
>495
C++はマルチパラダイム言語って呼び方が適切だと思う
人によって重きを置くとこが違うから、見方も様々なので意見は適当に判断するしかない
オブジェクト指向も昔は仮想関数でポインタがどう使われてるかみたいなことが必須知識だったけど
今は上流な話に終始するのが多いんじゃないかな。知らんけど

501
デフォルトの名無しさん[sage]   投稿日:2016/04/12 13:18:24  ID:OovY3q37.net
>499
テトリスとか簡単なツールとかはCでも作れるから、とりあえずCを続けたらいいんじゃないかな
数年単位で勉強しない限り癖がつくとか気にしなくていいよ

502
デフォルトの名無しさん[sage]   投稿日:2016/04/12 14:10:55  ID:8gkQd1h0.net
>499
オブジェクト指向と考えずにまずはやってみたらいいのでは


503
めんどいから@sc[]   投稿日:2016/04/12 14:40:15  ID:mxVZY7duX
ある言語を覚えたいのならばその言語で、その言語のパーサを作ってみるのがよいと思う

504
デフォルトの名無しさん[sage]   投稿日:2016/04/12 14:36:45  ID:Tzgq3WhP.net
>499
自分がCで作ったプログラムをC++に移植すb驍フも勉強になb驍
けど麹ナ初からC++でやってればよかったと後悔する可能性もある
コメント1件

505
デフォルトの名無しさん[sage]   投稿日:2016/04/12 15:20:46  ID:szNkUUWQ.net(3)
ありがとうございます。
柴田望洋の本でも読んでもう少しC言語の知識付けてから考え直したいと思います
苦しんで覚えるC言語もどこまで役にやってるのか分からなくなってきたので…

506
デフォルトの名無しさん[sage]   投稿日:2016/04/12 19:10:29  ID:wt6IaLl7.net
>504
移植する必要がない、わざわざ遅くなるように改悪しなくても
コメント2件

507
デフォルトの名無しさん[sage]   投稿日:2016/04/12 20:59:55  ID:bUQxXLucO(2)
C++って同じコンパイラでもCより早くなるんじゃなかったけ?

508
デフォルトの名無しさん[sage]   投稿日:2016/04/12 20:55:59  ID:U1PsFxiF.net(2)
C++に移植すると遅くなるって都市伝説じゃないの?

509
デフォルトの名無しさん[sage]   投稿日:2016/04/12 22:05:54  ID:PiwdcttH.net
クラス使わなければそんなに変わらない

510
デフォルトの名無しさん[sage]   投稿日:2016/04/12 22:42:56  ID:U1PsFxiF.net(2)
クラス使うと遅くなるって都市伝説じゃないの?
仮想関数使ったなら遅くなるかもだが。
コメント1件

511
デフォルトの名無しさん[]   投稿日:2016/04/12 22:58:54  ID:/GVd1Dbl.net
都市伝説

512
デフォルトの名無しさん[sage]   投稿日:2016/04/13 01:30:09  ID:L8ByxKIA.net
TMPって必要ありますか?
コメント1件

513
デフォルトの名無しさん[sage]   投稿日:2016/04/13 01:37:55  ID:jupLzAcR.net
>506
そんなに差がでるとは思えんが、もし遅くなったら
勉強がてら高速化すればいい

514
デフォルトの名無しさん[sage]   投稿日:2016/04/13 01:45:40  ID:n3tzn5Jx.net
>512
自分で必要だと確信できないなら自分で使う必要はないよ

515
デフォルトの名無しさん[sage]   投稿日:2016/04/13 08:32:49  ID:HJBXPL0B.net
>506
必要云々ではなく勉強の話してるの
わかる?

516
デフォルトの名無しさん[sage]   投稿日:2016/04/13 09:04:37  ID:tPE+Hf8q.net
>510
コンストラクタとデストラクタ走らせなければそんなに変わらないかな

517
デフォルトの名無しさん[sage]   投稿日:2016/04/13 22:06:38  ID:FRGxTn1f.net(2)
Cでも結局、コンストラクタに準ずる初期化とデストラクタに準ずる後処理は必要だろ。
Cなら速くなるというのは都市伝説。

518
デフォルトの名無しさん[sage]   投稿日:2016/04/13 22:49:50  ID:OjSMixzY.net(3)
C++を使うと遅くなるか、に関しては、古いがプログラミング作法に書いてある。

例えば、C++のSTLを使ったプログラミングをすると、STLで実装されている
処理を、ユーザーが最適化できない。汎用的に書かれているから。

一方、Cではそれができるから、速くなるみたいなことが書かれていた気がする。
コメント1件

519
デフォルトの名無しさん[sage]   投稿日:2016/04/13 22:50:20  ID:OjSMixzY.net(3)
まあ古い本だから、今がどうなのかは知らないけど。

520
デフォルトの名無しさん[sage]   投稿日:2016/04/13 22:51:25  ID:OjSMixzY.net(3)
変だな。

「汎用的に書かれているから。」 は消していいよ。

521
デフォルトの名無しさん[sage]   投稿日:2016/04/13 22:58:38  ID:ctQ6cU5c.net
クラスを使うと遅くなるってのはRTTIとか型チェックの処理が入ったり
不必要にコピーが発生したりってことで無駄な処理が増えることを言っているでしょ
考えもなしに書いたコードが原因で本来不要な処理が増える
要はプログラマーの実装の問題ってこと

522
デフォルトの名無しさん[sage]   投稿日:2016/04/13 23:04:07  ID:emBYrQ1B.net
結局のところ、「理論上は遅くなるよね」くらいに思っておけばいいの?

523
デフォルトの名無しさん[sage]   投稿日:2016/04/13 23:08:08  ID:FRGxTn1f.net(2)
Cで書くよりアセンブラで書いたほうが速い。
というのと同じくらいナンセンス。

524
デフォルトの名無しさん[sage]   投稿日:2016/04/13 23:21:13  ID:rl8lucUp.net
better Cならメリットの方が圧倒的だと思うけどなー

525
デフォルトの名無しさん[sage]   投稿日:2016/04/13 23:31:46  ID:COroZlU5.net
>518
なんか変な話。
STLと同じ処理をCで書いて速くできるなら、C++でも同じことができないわけないと思うが。
コメント2件

526
デフォルトの名無しさん[sage]   投稿日:2016/04/14 00:03:57  ID:W0ESW1og.net(3)
>525
確か本は、STLを使う前提でかかれてたよ。
STL使わずにデータ構造を自作すれば、同じだね。

527
デフォルトの名無しさん[sage]   投稿日:2016/04/14 00:05:34  ID:W0ESW1og.net(3)
速度と引き換えに、STLの利便性が得られる って確か書いてあった気がする。
コメント1件

528
デフォルトの名無しさん[sage]   投稿日:2016/04/14 00:40:27  ID:GRJi8ey4.net(2)
>525
他人の書いた汎用的なコードだから無駄が増えるってだけだよ
もちろん自作したものが必ずしもそれより早いとは限らないがw

メモリの確保、データのコピーにエラーチェックと処理
実行するに当たっては必要になる処理だが、本来の処理ではなく付随的な処理でしかない
これらが頻繁に起きればその分速度は遅くなる
コメント2件

529
デフォルトの名無しさん[sage]   投稿日:2016/04/14 02:31:50  ID:Wu1ZUttN.net
x86ってえっくすはちろくって読んだら笑われたけど、なんて読むのが正解なんですか?

530
デフォルトの名無しさん[sage]   投稿日:2016/04/14 07:25:37  ID:kbXOIx/G.net(2)
日本語ならぺけはちろく

531
デフォルトの名無しさん[sage]   投稿日:2016/04/14 08:14:20  ID:Y6Qtie59.net
その笑った当人に聞くべきだったね。

「えっくすはちろく」で意味は通るだろうし
俺は可笑しいと感じないけど、俺は権威筋じゃないから。

532
デフォルトの名無しさん[sage]   投稿日:2016/04/14 08:24:42  ID:OKKc+//x.net
>528
それをCとC++の比較に持ち出すのが変なんだろう。同じ条件で比較してないし。
コメント1件

533
デフォルトの名無しさん[sage]   投稿日:2016/04/14 08:39:54  ID:G2rZAyMq.net
違う言語なんだからそれぞれ得手不得手があるのに、局所的な比較だけするからおかしくなる。
例えば仮想関数呼び出しにしても、それ自体は余分な時間がかかるけど、呼び出し側の分岐が不要になって時間が稼げて、総合的に相殺以上のメリットになる。
ただし実際にはこんなこと以上に記述性が上がって人間の時間が稼げて、最適化したり規模とかを上げれる方がよっぽど良い。
コメント1件

534
デフォルトの名無しさん[sage]   投稿日:2016/04/14 18:10:44  ID:GRJi8ey4.net(2)
>532
同じ条件で比較すればいいってものでもないと思うけどな
どちらかに分がある条件で比較してしまえば、分が悪いほうが遅いとなるだろうし
他人の書いたコードを使うならCだろうがC++だろうが付随的な処理が増えればその分遅くなる
>528で言いたかったのは「Cに比べてC++のほうが遅くなる要素は多分にある」ということ
ただそれはプログラマのコーディングスタイルに左右されることなわけで「C++だから遅い」とは思わない

535
デフォルトの名無しさん[sage]   投稿日:2016/04/14 19:37:49  ID:f1hhftJp.net(2)
>527
テンプレートにすることで,実行時に余分のコストが発生するのか?
あれはマクロの親玉だろう?
コメント1件

536
デフォルトの名無しさん[sage]   投稿日:2016/04/14 19:38:32  ID:f1hhftJp.net(2)
>533
仮想関数は間接アクセスが一つ入る分一方的にコストがかかると思うが
コメント2件

537
デフォルトの名無しさん[sage]   投稿日:2016/04/14 19:56:09  ID:Lg/h7ZOX.net
>536
Cで同じことしようとしたら条件分岐とかが必要になって、結局あまり変わらないってことだろ。

538
デフォルトの名無しさん[sage]   投稿日:2016/04/14 20:01:34  ID:W0ESW1og.net(3)
>535
ある処理専用に、ごりごりに最適化できないから、という理由だった気がする。

たぶん、速度が落ちる理由が、テンプレートを使うから、ということはないと思う。
サイズは確かに増えるが。

539
デフォルトの名無しさん[sage]   投稿日:2016/04/14 21:26:13  ID:VAbDTAsP.net(2)
ちなみに仮想関数呼び出しの余分なコストは、通常の関数を1とした場合、0.25%以下らしいな

540
デフォルトの名無しさん[sage]   投稿日:2016/04/14 21:26:41  ID:VAbDTAsP.net(2)
ごめん、%間違えてつけた

541
デフォルトの名無しさん[sage]   投稿日:2016/04/14 21:28:41  ID:kbXOIx/G.net(2)
最近のコンパイラは頭がいいから
結構最適化してくれるよな
パイプラインも同時実行も分岐予測も考慮するし
コンパイルオプションでファイバー最適化もできる

542
デフォルトの名無しさん[sage]   投稿日:2016/04/14 23:48:28  ID:MRKzyTMr.net
>536
「それ自体は余分な時間がかかる」のは書いてある通り。
ポリモフィズムの恩恵として呼び出し側のコストがかからないのも書いてある通り。
このコストは対等ではなく、呼び出したい種別が増えても常にO(1)で、呼び分ける場合のO(n)にはならない。
ただ、どちらにせよ殆どの場合この差異は表面化せず計測できない

543
デフォルトの名無しさん[]   投稿日:2016/04/15 15:46:44  ID:bZ84v03Q.net(2)
vimみたいなコマンドラインでテキストエディターをつくりたいのですが
どうやって作るんですか?
標準入力と標準出力だけでは無理ですか?
作り方教えてください。

544
デフォルトの名無しさん[sage]   投稿日:2016/04/15 17:21:56  ID:FPPH54gW.net
コマンドラインってのは、たぶんコンソールのことだろうな。
プログラムを起動したときに自前のウィンドウを開かないで、
コマンドを入れたウィンドウ上で動くって意味。

コンソールでのフルスクリーン(って表現も変だけど)アプリケーション、
つまり画面内のカーソル位置を自在に動かすようなものは環境への依存が強い。

とりあえず標準入出力だけでは無理だし、
実現方法はOSやら何やらによって大きく異なる。


…俺が知ってるのはこの辺までなので、
「環境は○○です」と言われても答えられないよ。

545
デフォルトの名無しさん[]   投稿日:2016/04/15 17:35:56  ID:bZ84v03Q.net(2)
ありがとうございます
調べたらcursesを使えばいいみたいです

546
デフォルトの名無しさん[]   投稿日:2016/04/18 17:24:17  ID:MeNHDutf.net(2)
変数cなんて定義してないのに、
Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.とエラー出るんだが
コレなんだ?

547
デフォルトの名無しさん[]   投稿日:2016/04/18 17:27:15  ID:MeNHDutf.net(2)
あっすみません自己解決しました。
#defineで変数cは定義されているものでした

548
デフォルトの名無しさん[]   投稿日:2016/04/18 20:38:45  ID:C/ouOI5M.net
VisualStudio2015Community(VC++)からHTMLをパース可能なライブラリを探しています。
webページをダウンロードし、そこに含まれるテーブルから一部データを抽出、
加工してローカルに保存したいと考えています。

今のところ、びんずめ堂さん、MSHTMLを候補に考えています。
しかし個人製作?だったり情報が古かったりで迷っています。
決定版みたいな存在が見当たらず、この手の情報は少ないように思えるんですがどうなんでしょう?
みんな他の言語でやるのかな?

以前ExcelVBAで強引にやっていたんですが、重いっていうか裏作業出来ないっていうかVCが好きっていうかde
コメント3件

549
デフォルトの名無しさん[sage]   投稿日:2016/04/18 20:43:17  ID:ErdsNVpN.net(2)
>548
そんなもん無数にあるだろ。
名前は忘れた。

550
デフォルトの名無しさん[sage]   投稿日:2016/04/18 21:48:11  ID:LCJC2X3e.net
>548
俺はCLR使う

551
デフォルトの名無しさん[sage]   投稿日:2016/04/18 21:55:32  ID:EoOYoamp.net
俺はHTMLAgilityPack使ってるわ
コメント2件

552
デフォルトの名無しさん[sage]   投稿日:2016/04/18 22:49:49  ID:ErdsNVpN.net(2)
>551
ああ、それそれ。

553
デフォルトの名無しさん[sage]   投稿日:2016/04/19 08:50:24  ID:SvHoNoSF.net
全く情報を提供していない ID:ErdsNVpN にほっこりした。

554
デフォルトの名無しさん[sage]   投稿日:2016/04/19 10:26:34  ID:1acnq1eP.net
  >548
  そんなもん無数にあるだろ。
  名前は忘れた。

  >551
  ああ、それそれ。

これならうちの息子(小三)でもレスできそうだw
コメント1件

555
デフォルトの名無しさん[sage]   投稿日:2016/04/19 10:35:50  ID:6Wh9TF6d.net
そんなやつ無数にいるだろ。
コメント1件

556
デフォルトの名無しさん[sage]   投稿日:2016/04/19 16:14:23  ID:LbxVeIJH.net
>555
「ハンドルは忘れた」とでも続けて欲しかった。

>554
そういう投稿をしない人物に育ててくれ。

557
デフォルトの名無しさん[]   投稿日:2016/04/19 21:56:24  ID:spYNmTFF.net(5)
DataSet/DataAdapterの仕様についてご教授下さい。


■DataSet/DataAdapterの仕様
DataAdapter には、SELECT、UPDATE、INSERT、DELETEのSQL文が設定できます。
Fillメソッドを実行するとSELECTのSQL文の基づいてDataSetにデータを読み込みます。このときDataSetの各行には「編集なし」のマークがついています。
値を更新するとそのマークが「更新済」、削除すると「削除済」、データを追加すると「追加済」のマークに変わります。
Updateメソッドを実行すると、DataSetの各行のマークに応じて、設定してあるUPDATE、INSERT、DELETEのSQL文を実行します。

558
デフォルトの名無しさん[]   投稿日:2016/04/19 21:57:05  ID:spYNmTFF.net(5)
■実施したい事【概要】
DataAdapterのFillメソッドで取得したDataSet内のDataTableに対して、
挿入/更新操作をかけていき、全ての処理が終わったら、UPDATEを行う。

その際、DataTableに挿入した順番でDBへの挿入SQLが流れてほしい。

559
デフォルトの名無しさん[]   投稿日:2016/04/19 21:57:25  ID:spYNmTFF.net(5)
■実施したい事【詳細】

DataTable^ tbl;//←DataAdapterのFillメソッドで取得したDataSet内のDataTableだとします

while(10000行程度ループ){

DataRow^ tg_row = tbl->Rows->Find(ループ毎に変わる値);

if( static_cast<DataRow^>(tg_row)==nullptr){
DataRow^ row = tbl->NewRow();
row["hogehoge"] = ループ毎に変わる値;
tbl->Rows->Add(row);//←★★★★★★初期挿入★★★★★★★
}
else{
row["hogehoge"] = ループ毎に変わる値;
}

}

上記のソースで5000行のレコードが出来たと仮定します。
※つまり"ループ毎に変わる値"の重複が半分あったということ

この状態でUPDATEを行うと、
なぜか、初期挿入した順番通りにinser

560
デフォルトの名無しさん[]   投稿日:2016/04/19 22:03:12  ID:spYNmTFF.net(5)
■実施したい事【詳細】

DataTable^ tbl;//←DataAdapterのFillメソッドで取得したDataSet内のDataTableだとします

while(10000行程度ループ){

DataRow^ tg_row = tbl->Rows->Find(ループ毎に変わる値);

if( static_cast<DataRow^>(tg_row)==nullptr){
DataRow^ row = tbl->NewRow();
row["hogehoge"] = ループ毎に変わる値;
tbl->Rows->Add(row);//←★★★★★★初期挿入★★★★★★★
}
else{
row["hogehoge"] = ループ毎に変わる値;
}

}

上記のソースで5000行のレコードが出来たと仮定します。
※つまり"ループ毎に変わる値"の重複が半分あったということ

この状態でUPDATEを行うと、
なぜか、初期挿入した順番通りにinsert文が発行されません。
※DB上で見ると順番がごちゃまぜです

561
デフォルトの名無しさん[]   投稿日:2016/04/19 22:03:38  ID:spYNmTFF.net(5)
■質問
なぜ、初期挿入した順番通りにinsert文が発行されないのでしょうか?
tbl->Rows->Findで取得したレコードの値を変更すると順番が変更になってしまうのでしょうか?

■質問
初期挿入した順番にinsert文が発行されようにするには、
どの様にしたら良いでしょうか?
解決策をご教授下さい。

562
デフォルトの名無しさん[sage]   投稿日:2016/04/19 22:18:29  ID:V/GcSRQF.net
マルチうざい

563
デフォルトの名無しさん[sage]   投稿日:2016/04/22 01:49:56  ID:1KOgfd9A.net
下のクラスにデータを渡すってどういう意味?

564
デフォルトの名無しさん[sage]   投稿日:2016/04/22 07:10:33  ID:mTUrU59j.net
床に穴あけて紙を落とす

565
デフォルトの名無しさん[sage]   投稿日:2016/04/22 17:17:56  ID:YFuTfo2Y.net
窓から落とせば下でキャッチしてくれるんじゃね?

566
デフォルトの名無しさん[sage]   投稿日:2016/04/26 00:33:23  ID:8I+PBVG3o
みんなC++のコンパイルどれくらい掛かってる?
今までは100行くらいのファイルでも0.5秒掛からないくらいだったのに
最近急に重たくなり始めた(3秒)

567
デフォルトの名無しさん[]   投稿日:2016/04/28 23:02:13  ID:zdOheClY.net
UNITYでC言語を使うにはどうしたらいいのでしょうか
もしくは、それよりも使い勝手のいい(無料の)ソフトが有るのでしょうか
コメント1件

568
デフォルトの名無しさん[sage]   投稿日:2016/04/28 23:21:07  ID:z9NV8D3z.net
きほんてきにはつかえないです

569
デフォルトの名無しさん[sage]   投稿日:2016/04/29 00:25:49  ID:lxf3O1Zv/
C++はテンプレート使うとコンパイルが遅くなる印象

570
デフォルトの名無しさん[]   投稿日:2016/04/29 17:15:16  ID:dhl0UAMF.net(5)
すみません、弟が独学でC言語を勉強しているのですが
問題が解けなくて困っています。
教えてもらえたら嬉しいです。
問題は1週間で身につくC言語の基本というサイトの
実行例にならい、キーボードから2つの整数を入力させ、関数を用いてそれぞれの数をたて、よこの■の数として、四角形を表示させるプログラムを作りなさい。

実行結果の例

たて:3 ← 正の整数を入力
よこ:5 ← 正の整数を入力
■■■■■
■■■■■
■■■■■ ← 縦3個、横5個の■マークを表示
ただし、関数の概要は以下のようにすること。

関数名 square
処理内容 縦、横に指定された数の■マークを表示する。ただし、どちらかの値が0以下の場合は、何も表示しない。
引数 整数の値×2(縦、横の値)
戻り値 なし
コメント1件

571
デフォルトの名無しさん[]   投稿日:2016/04/29 17:16:55  ID:dhl0UAMF.net(5)
続きです。
弟が書いたコード
--------------------------------------------------------------
#include <stdio.h>
int main(void) {
int tate,yoko;
printf("縦:");
scanf("%d", &tate);
printf("横:");
scanf("%d",&yoko);
int y,x;
for(y=0; tate == y; y++) {
for(x=0; yoko == x; x++) {
printf("■");
}
}
return 0;
}
--------------------------------------------------------------
実行結果
--------------
縦:5
横:5
-------------

このあとうまく■が並んでくれません。

572
デフォルトの名無しさん[]   投稿日:2016/04/29 17:18:26  ID:dhl0UAMF.net(5)
デバッグしてみたらここまで行っていたそうです。
--------------------------------------------------------------
◯ #include <stdio.h>
◯ int main(void) {
◯ int tate,yoko;
◯ printf("縦:");
◯ scanf("%d", &tate);
◯ printf("横:");
◯ scanf("%d",&yoko);
◯ int y,x;
△ for(y=0; tate == y; y++) {
for(x=0; yoko == x; x++) {
printf("■");
}
}
return 0;
}

よろしくお願いします!
コメント1件

573
デフォルトの名無しさん[sage]   投稿日:2016/04/29 17:22:05  ID:kN9lVhLi.net(2)
よーわからんし確認してないけど
こーしてみんしゃい!

for(y=0; y < tate; y++) {
for(x=0; x < yoko; x++) {

574
デフォルトの名無しさん[sage]   投稿日:2016/04/29 17:23:12  ID:kN9lVhLi.net(2)
for(y=0; y < tate; y++) {
for(x=0; x < yoko; x++) {
printf("■");
}
puts("");
}

575
デフォルトの名無しさん[sage]   投稿日:2016/04/29 17:23:36  ID:BBUpf9bB.net
>570
なぜ弟の質問を兄(姉)が?w
--------------------------------------------------------------
#include <stdio.h>
int main(void) {
int tate,yoko;
printf("縦:");
scanf("%d", &tate);
printf("横:");
scanf("%d",&yoko);
int y,x;
for(y=0; y<tate; y++) {
for(x=0; x<yoko; x++) {
printf("■");
}
printf("\n");
}
return 0;
}
--------------------------------------------------------------

576
デフォルトの名無しさん[]   投稿日:2016/04/29 17:34:03  ID:dhl0UAMF.net(5)
できたそうです!
弟はまだ小さいので、2chの存在は秘密です。
本当にありがとうございました!

577
デフォルトの名無しさん[sage]   投稿日:2016/04/29 17:34:30  ID:6AfMLjyX.net
>572
forの条件が
 tate == yはtateとyの値が同じ間
 yoko == xはyokoとxの値が同じ間
になってしまってる
コメント1件

578
デフォルトの名無しさん[]   投稿日:2016/04/29 17:46:00  ID:dhl0UAMF.net(5)
>577
納得しています。
ありがとうございました。

579
デフォルトの名無しさん[]   投稿日:2016/04/29 20:35:21  ID:IiqjVC0E.net(2)
再度すいません>567です。
図々しいですが、使いやすいソフトを教えてくださいませんでしょうか

580
デフォルトの名無しさん[sage]   投稿日:2016/04/29 20:51:35  ID:AWs6LkoN.net(3)
質問の意図が分からんので答えにくい

581
デフォルトの名無しさん[sage]   投稿日:2016/04/29 21:11:35  ID:AWs6LkoN.net(3)
ゲームエンジンは世の中に沢山あるが、
開発言語、動作環境、開発環境、向いてるゲームジャンル、料金形態、初心者向きかどうか、
……同じものは何1つ無いと言っていい。

C/C++を日常で使ってる人で、それらで開発可能なエンジンが知りたいのか、
まず第一にゲームが作りたいという気持ちがあって、そこでメジャーなC言語を選んでみただけなのか、
とにもかくにもUnityが使いたい、あるいはUniyくらいにしか無い機能が使いたいのか、
それぞれ想定される回答が違う。

ちなみにUnity自体は、日本語の資料も充実してるのもあって
かなり使い勝手は良いゲームエンジンの1つだろうね。
まあ>568で言ったように、Cで書かれたDLLを読み込む…とかでもなければCに出番はないけど。

582
デフォルトの名無しさん[]   投稿日:2016/04/29 21:41:45  ID:IiqjVC0E.net(2)
Unityが特段いいというわけだはなく、ゲームの王道という情報があったので選びました
Cなら根本から組み上げられるということも聞いたので、C言語を専攻(?)しています

583
デフォルトの名無しさん[sage]   投稿日:2016/04/29 22:53:42  ID:AWs6LkoN.net(3)
とにかくゲームが作りたいなら、RPGツクールとかそういう類を選ぶべき

584
デフォルトの名無しさん[sage]   投稿日:2016/04/30 00:10:29  ID:4VZu2v0+.net
ローカル変数はブロック途中で宣言できなかったような・・・と思ったら仕様拡張で改善されてたのね

ゲームの製作って意味ならUnityでいいと思うよ
参考文献とかの多さもあるけどアセットが充実してるのが強い
コメント1件

585
デフォルトの名無しさん[sage]   投稿日:2016/04/30 00:39:44  ID:kBEc2ffr.net(7)
>584
お前さんいつの時代から来た人?


586
デフォルトの名無しさん[sage]   投稿日:2016/04/30 08:39:58  ID:RhLYi0Bf.net
多分アセットを買いまくるという発想もないだろうから
Unityすらいらなくて
ウディタかツクールでサンプルいじるくらいで満足するんじゃないの

587
デフォルトの名無しさん[]   投稿日:2016/04/30 10:57:54  ID:ujtZmu08.net(2)
初心者の質問です。教えて下さい。
関数内での変数宣言なのですが、
一般的には関数の処理を記述する波括弧内ですよね。
関数の引数を記述する丸括弧の直後、かつ波括弧の直前での変数宣言にはどういう意味がありますか?

ここで遭遇しました。
github.com/NetHack/NetHack/blob/NetHack-3.6.0/src/dungeon.c#L133

リンク確認したらモバイルサイトでは特定ライン番号にジャンプ出来ないですね。save_dungeon関数です。

588
デフォルトの名無しさん[sage]   投稿日:2016/04/30 12:14:10  ID:kBEc2ffr.net(7)
超大昔にあったらしいC言語言語の関数の記述方法だと思う
ぶっちゃけ忘れていいし、
そういうコードを現代で見かけたら、記念にスクショだけ撮って埋葬するべき
コメント1件

589
デフォルトの名無しさん[sage]   投稿日:2016/04/30 12:15:36  ID:kBEc2ffr.net(7)
なんか日本語おかしいけど気にすんな

590
デフォルトの名無しさん[]   投稿日:2016/04/30 12:45:34  ID:/NIiSTrt.net(16)
何度もすみません。
弟が昨日からずっとこれができなくて
できれば教えてくださいと言っています。
アドバイスをもらえたら嬉しいです。

キーボードから2つの整数値を入力し、その2つの数の最大公約数と最小公倍数を求め、その結果を表示するプログラムを作りなさい。このうち、最大公約数と最小公倍数は、関数を用いて求めること。

実行結果の例
1つ目の値を入力してください:30 ← 整数を入力
2つ目の値を入力してください:12 ← 整数を入力

2つの数の最小公倍数は、60です。
2つの数の最大公約数は、6です。
ただし、関数の概要は以下のようにすること。

関数名 gcd
処理内容 2つの整数の値の最大公約数を求める。
引数 整数の値×2(縦、横の値)
戻り値 なし

関数名 lcm
処理内容 2つの整数の値の最小公倍数を求める。
引数 整数の値×2
戻り値 引数の2つの整数の最小公倍数

591
デフォルトの名無しさん[]   投稿日:2016/04/30 12:50:44  ID:/NIiSTrt.net(16)
コードです↓

#include <stdio.h>
int gcd(int a,b){

int c,tmp;
if(a<b){
tmp = a;
a = b;
b = tmp;
}
for (int i=0;c=!0;i++) {
c=a%b;
a=b%c;
}
return b;
}
int lcm(int a,b){
int c,tmp;
if(a<b){
tmp = a;
a = b;
b = tmp;
}
for (int i=0;c=!0;i++) {
a = b;
b = c;
c = a % b;
}
}

592
デフォルトの名無しさん[]   投稿日:2016/04/30 12:51:20  ID:/NIiSTrt.net(16)
続きです。

int main(void) {
int kone,ktwo;
int aone,atwo;
printf("1つ目の値を入力してください:");
scanf("%d", &kone);
printf("2つ目の値を入力してください:");
scanf("%d",&ktwo); #ーーデバッグしたらここまで進んでいます
aone=gcd(kone,ktwo);
atwo=lcm(kone,ktwo);
printf("2つの数の最小公倍数は、%dです。\n2つの数の最大公約数は、%dです。", aone,atwo);
return 0;
}

すみませんが、よろしくお願いします。

593
デフォルトの名無しさん[sage]   投稿日:2016/04/30 12:51:40  ID:kBEc2ffr.net(7)
それはアドバイスを求めてるんじゃなくて、宿題をやってくれって話よね
本当にアドバイスを求めてるなら、どこでハマったとか言えるでしょ
コメント1件

594
デフォルトの名無しさん[sage]   投稿日:2016/04/30 12:56:14  ID:kBEc2ffr.net(7)
ごめんリロってなかった

ソースを流し読みしただけだけど、
たぶん1回目の入力の時に、後ろにゴミ(改行コード)が残ってて
それが2回目の入力として処理されてしまうんじゃない?
なので、1回目のあとに、何らかの方法で入力をフラッシュする必要がある
コメント1件

595
デフォルトの名無しさん[]   投稿日:2016/04/30 13:00:06  ID:/NIiSTrt.net(16)
>593
そうですね。すみません!
今、弟が習い事に行ってしまったので、帰ったらどこでハマったか聞いてみます。
でも宿題をやってほしいとかではなく、独学でサイト(1週間で覚えるC言語の基本)を見て
一生懸命やってるのでご容赦くださると嬉しいです。
このサイト、答えが載ってないんです。
コメント1件

596
デフォルトの名無しさん[]   投稿日:2016/04/30 13:01:42  ID:/NIiSTrt.net(16)
すみません!私こそリロードしていませんでした。
教えていただいたこと、弟に伝えます。
ありがとうございます。

597
デフォルトの名無しさん[sage]   投稿日:2016/04/30 13:05:00  ID:PNZBHOdI.net(3)
>595
ついでに弟に質問文も考えさせるのはどう?

598
582[sage]   投稿日:2016/04/30 13:11:19  ID:ujtZmu08.net(2)
>588
レスありがとうございます。大昔の名残りなんですね。

ここで質問する前にググりはしたんですが上手い検索ワードを思いつかず、
出てくるのはスコープの話ばかりで困ってました。

599
デフォルトの名無しさん[]   投稿日:2016/04/30 13:14:10  ID:/NIiSTrt.net(16)
質問文とは、よろしくお願いしますとか、そいういう文のことですよね。違ったらすみません。
一応、弟がメールしてそれを貼り付けています。
もっとちゃんと技術的な説明があるといいdwすよね。
そう伝えます。
コメント1件

600
デフォルトの名無しさん[]   投稿日:2016/04/30 13:17:23  ID:/NIiSTrt.net(16)
ミスタイプしました。すみません…

601
デフォルトの名無しさん[sage]   投稿日:2016/04/30 13:17:59  ID:PNZBHOdI.net(3)
>599
そういう意味ではなくて
理想の実行結果だけじゃなくて
・現状の実行結果はこれ
・エラーメッセージが出るならそのメッセージ
こういうのね
コメント1件

602
デフォルトの名無しさん[]   投稿日:2016/04/30 13:22:27  ID:/NIiSTrt.net(16)
>601
エラーメッセージ、そういえば送ってきてました。忘れていました。

エラーは↓
loating point exception: 8

とのことでした。実行結果は後で聞いて貼ります。
コメント1件

603
デフォルトの名無しさん[sage]   投稿日:2016/04/30 13:33:03  ID:kBEc2ffr.net(7)
ただでさえ掲示板を通して間接的にやり取りしてるのに
そこに更に人間を1人挟んだら、伝わるものも伝わらんだろう
コメント1件

604
デフォルトの名無しさん[sage]   投稿日:2016/04/30 13:37:18  ID:PNZBHOdI.net(3)
>602
じゃあそのエラーメッセージで調べてみよう

605
デフォルトの名無しさん[]   投稿日:2016/04/30 13:42:47  ID:/NIiSTrt.net(16)
>603
それについては本当お詫びします。
弟は小さいのですみません…
コメント1件


606
デフォルトの名無しさん[]   投稿日:2016/04/30 13:46:37  ID:/NIiSTrt.net(16)
弟帰ってきたので聞きました。
エラーメッセージをGoogleで調べたら、浮動小数点の桁が足りないと出てきたので
int をダブルに変更したけど、どうも上手くいかないそうです。

実行結果は↓

1つ目の値を入力してください:15
2つ目の値を入力してください:5
Floating point exception: 8

本当にたびたびすみません。弟も感謝してると言っています!
コメント1件

607
デフォルトの名無しさん[]   投稿日:2016/04/30 13:48:42  ID:/NIiSTrt.net(16)
>594
新しいファイルを作って貼り付けてみました。
同じエラーが出てしまうのですが
このやり方で入力をフラッシュしたことになってないでしょうか?

608
デフォルトの名無しさん[sage]   投稿日:2016/04/30 13:52:50  ID:kBEc2ffr.net(7)
新しいファイルってなんだ
コメント1件

609
デフォルトの名無しさん[sage]   投稿日:2016/04/30 13:54:54  ID:P43sHncH.net(2)
>606
ここにコードを貼ってください
http://codepad.org/
コメント1件

610
デフォルトの名無しさん[]   投稿日:2016/04/30 13:57:15  ID:/NIiSTrt.net(16)
>608
新しい.cのファイルを作ってコピペしたそうです。
今入力をフラッシュする方法を調べています。

611
デフォルトの名無しさん[]   投稿日:2016/04/30 13:59:33  ID:/NIiSTrt.net(16)
>609
http://codepad.org/NwryuiaT
これで大丈夫でしょうか。
よろしくお願いします。
コメント1件

612
デフォルトの名無しさん[sage]   投稿日:2016/04/30 14:02:48  ID:JLdVbit+.net
for( int i = 0; c = !0; i++)
っていけるのか?
for( int i = 0; c != 0; i++)
のtypoじゃないのか?
コメント1件

613
デフォルトの名無しさん[sage]   投稿日:2016/04/30 14:02:57  ID:P43sHncH.net(2)
>611
行番号が赤くなっているところを正しく直してください,話はそれからです
コメント1件

614
デフォルトの名無しさん[]   投稿日:2016/04/30 14:08:41  ID:/NIiSTrt.net(16)
>613
このサイトすごいですね。ありがとうございます。
今一生懸命直しています。
ちょっと時間がかかるかもしれません。

615
デフォルトの名無しさん[]   投稿日:2016/04/30 14:14:09  ID:/NIiSTrt.net(16)
http://codepad.org/v8wsGvzl

おかげさまで赤いところはなくなりましたが
やっぱり動かないみたいです。
コメント2件

616
デフォルトの名無しさん[sage]   投稿日:2016/04/30 14:19:00  ID:oKKjAnDv.net(2)
>615
lcmが値を返してない
gcdが値を0で割ってる可能性が高い(12行目)

617
デフォルトの名無しさん[sage]   投稿日:2016/04/30 14:30:00  ID:PDMESqd1.net
ユークリッドの互助法で調べて、アルゴリズムを実装するのがよいと思います。

618
デフォルトの名無しさん[sage]   投稿日:2016/04/30 14:36:16  ID:ETp7HfeC.net
>615
>612が書いてるように
while(c=!0)をwhile(c!=0)に直せ
c=!0だとcにnot(0)を代入してる(と思う)
コメント1件

619
デフォルトの名無しさん[sage]   投稿日:2016/04/30 14:39:40  ID:oKKjAnDv.net(2)
慣れるまでは関数を全て書いてからコンパイルなんて事をせずに
関数一つ式一つ書いてはコンパイルして実行結果を確かめろって事は言いたい

620
デフォルトの名無しさん[]   投稿日:2016/04/30 15:02:58  ID:/NIiSTrt.net(16)
動いたそうです!すごい喜んでます。
http://codepad.org/LFItlotf
本当にありがとうございました!
コメント2件

621
デフォルトの名無しさん[]   投稿日:2016/04/30 22:20:15  ID:uVz81x78.net
GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw

622
デフォルトの名無しさん[sage]   投稿日:2016/05/02 08:34:11  ID:3YV7E0Ft.net
>605
> 弟は小さいのですみません…
C言語使えるならにちゃんぐらい使えるだろ...

623
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2016/05/02 08:55:47  ID:GdZkeqis.net
小さい子どもには2chのやらしい広告を見せたらあかんやろ

624
デフォルトの名無しさん[sage]   投稿日:2016/05/02 11:36:53  ID:HsUuk1k7.net
>618
何を言ってるの?
コメント2件

625
デフォルトの名無しさん[sage]   投稿日:2016/05/02 12:59:40  ID:ag9jY7/D.net
>624
わからなくても問題無い

626
デフォルトの名無しさん[sage]   投稿日:2016/05/02 17:29:34  ID:MM242y+D.net
>620
弟は何歳だ?

627
デフォルトの名無しさん[sage]   投稿日:2016/05/02 18:40:58  ID:fPSF/RLG.net
>624
比較式じゃなくて代入式になってる
>620
最大公約数と最小公倍数は求まらんままだけどいいの?
コメント1件

628
デフォルトの名無しさん[sage]   投稿日:2016/05/02 22:12:07  ID:q1QEjo8z.net
2ちゃんで聞かないといけない兄のクオリティ
コメント1件

629
デフォルトの名無しさん[sage]   投稿日:2016/05/02 23:10:06  ID:FDPPvimu.net
>628
姉だろ

630
デフォルトの名無しさん[]   投稿日:2016/05/03 00:26:44  ID:nDaGYahb.net
>627
コンソールでは一見ちゃんと動いてる感じしたのですが
まだ間違ってますか?弟に言っときます。

私はプログラミングできません。弟と広告の間の壁みたいな役目です。
弟は9歳です。
コメント1件

631
デフォルトの名無しさん[sage]   投稿日:2016/05/03 08:50:16  ID:vE4KzUYN.net
まだ見ていたのか
てっきりいなくなったと思ってた

632
デフォルトの名無しさん[sage]   投稿日:2016/05/03 11:45:06  ID:4dZ6/mF/.net(3)
他の質問者が順番待ちしてるわけでもないし、いいじゃない。
9歳でC言語ってのも頼もしい。俺の9歳ころはROMのBASICだったよ。

ついでに、この流れの中で
「if (num != 0) を if (num =! 0) とタイポしてもCとして正当」
というようなオモシロ情報も得られた。
コメント4件

633
デフォルトの名無しさん[sage]   投稿日:2016/05/03 12:19:59  ID:aV7QMFwi.net(4)
「Cとして正当」の意味がわからない
コメント1件

634
デフォルトの名無しさん[sage]   投稿日:2016/05/03 12:37:41  ID:F8GbsJnn.net(2)
Cの文法としては、何ら間違いではないって事でしょ。
num=!0

num=1 と同等。

635
デフォルトの名無しさん[]   投稿日:2016/05/03 12:43:51  ID:wzb+Bdee.net(2)
流れしらないが上と下は別だろ
num=0のときは1と1
num=1のときは0と1
それ以外は0と1で下はnumの値が変化

636
デフォルトの名無しさん[]   投稿日:2016/05/03 12:45:11  ID:wzb+Bdee.net(2)
num=0のときは0と1
num=1のときは1と1
それ以外は0と1で、下はnum=1に変化
コメント2件

637
デフォルトの名無しさん[sage]   投稿日:2016/05/03 13:21:32  ID:ma13Xhdv.net(2)
>636 固定値の代入文なのにどこに分岐する要素があると勘違いしてしまったのかは興味がある

638
デフォルトの名無しさん[sage]   投稿日:2016/05/03 13:33:05  ID:m0WSkRh/.net
それ以前に何を言ってるのかさっぱりわからん

639
デフォルトの名無しさん[sage]   投稿日:2016/05/03 14:48:59  ID:aV7QMFwi.net(4)
>632後半は if(ret=func(...)) { ... } こういう比較を知らなかったと言っているだけじゃん?
Cでは基礎じゃないのかと思うことだが
ただ「不正な代入」として警告が出ると思うので(出ない環境もあるだろう)明示的に if((ret=func(...))!=0) { ... } などとするほうが良いけど
コメント1件

640
デフォルトの名無しさん[sage]   投稿日:2016/05/03 14:51:39  ID:ma13Xhdv.net(2)
なんか場合分けして書こうとしてるなあくらいにしか読もうとしてなかったけど
単純に!=の条件式と代入文の差を必死に書こうとしてるだけっぽいかな

>636
流れは追わなくてもいいが式をよくみろ!=ではなく=!だ

641
デフォルトの名無しさん[sage]   投稿日:2016/05/03 15:41:47  ID:F8GbsJnn.net(2)
>639
そこまでの知識があって>633のコメントはいただけないな…と思うの。

642
デフォルトの名無しさん[sage]   投稿日:2016/05/03 16:41:07  ID:aV7QMFwi.net(4)
タイポしている時点で正当と評価するのはどうかな?と思ったから
「構文上間違いではない」というのはその通りなんだが
その表現だと「どちらでも結果は同じ」(構文に曖昧さがある)というニュアンスも含まれるんじゃないかと感じた
それはタイポした結果「異なる式」になっただけ
式である以上評価できる(if文にあってもエラーにならない)というだけのことであって
構文に曖昧さがあるかのような表現は違うかなと思った

そう感じたから意味がわからないと真意を確認する意味も含めて感想を述べたまで
それは間違いだと言っているわけじゃない
「構文上間違いではない」という意味以外何も無いならその通りだし

643
デフォルトの名無しさん[sage]   投稿日:2016/05/03 17:07:47  ID:VQ0HMl3p.net(2)
あれえ、自分の理解と違うのかなあ
確認させて欲しいんだけど
( num=!0 ) だとnumに!0が入って括弧の外には常に!0が渡るんだよね?
さらにこの場合どうでもいいけど!0はint型の-1をnumの型にキャストした値で合ってる?

644
デフォルトの名無しさん[sage]   投稿日:2016/05/03 17:26:27  ID:aV7QMFwi.net(4)
>( num=!0 ) だとnumに!0が入って括弧の外には常に!0が渡るんだよね?
はい

>さらにこの場合どうでもいいけど!0はint型の-1をnumの型にキャストした値で合ってる?
!0 は0の論理反転(ビットごとの反転ではない)
うちの環境では1になる
コメント1件

645
デフォルトの名無しさん[sage]   投稿日:2016/05/03 18:04:02  ID:4dZ6/mF/.net(3)
>632 の後半で書いた「Cとして正当」ってのは
「コンパイル時にシンタックスエラーにならない」くらいの意図だった。
ちょいと気取った書き方をしたせいで混乱を招いたみたいで申し訳ない。

もちろん if (num != 0) と if (num =! 0) の違いは知ってるけど、
「 =! を『右辺を論理否定した値を左辺に代入』と解釈するか、そう来たか」
みたいな感じで「オモシロ」と表現した次第。

ちなみに俺が普段使ってるGCCでも警告は出るよ(-Wallの効果だと思う)。
「警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします」
これには割と助けられる。== と書くべき所を = とタイポするせい。
コメント1件

646
640 == 627[sage]   投稿日:2016/05/03 18:06:06  ID:4dZ6/mF/.net(3)
IDを見てもらえば分かるが >632>645 は同一人物だ。
名前欄に番号を入れ忘れた。重ね重ね…。

647
デフォルトの名無しさん[sage]   投稿日:2016/05/03 20:22:40  ID:yNxA1r0S.net
いや大多数の人かまたは全員が知ってて話してると思う
気になるから怖いぜ!くらいの動機

648
デフォルトの名無しさん[sage]   投稿日:2016/05/03 20:24:34  ID:Ga2JkeKt.net
>632
何が面白いのか分からないのですが

649
デフォルトの名無しさん[sage]   投稿日:2016/05/03 20:29:58  ID:VQ0HMl3p.net(2)
>644
ああそうか論理反転ね
ビット反転は~か
ありがとうスッキリした
Cだと処理系によって値が変わるかも知れないね
コメント1件

650
デフォルトの名無しさん[sage]   投稿日:2016/05/03 20:35:35  ID:CPxVolRD.net(2)
>649
確認したけど、The C Programming Languageには
真なら1になるって一応書いてあった

651
デフォルトの名無しさん[sage]   投稿日:2016/05/03 22:53:41  ID:scpTPEwR.net
ところで == と = のtypoなんて20年以上プログラム書いてきて一度も無いんだが、キーを1回打ったか2回打ったか判らないのだろうか?

652
デフォルトの名無しさん[sage]   投稿日:2016/05/03 23:32:54  ID:CPxVolRD.net(2)
Basic系だとif文中の=は等価演算子になる方言もあるし
Lisp系やPascal系だと=は等価演算子になる
そういった言語を触ってると時々取り違えるかな。
俺は10年近くやってて多分2回くらい間違えてる。
コメント1件

653
デフォルトの名無しさん[sage]   投稿日:2016/05/04 00:29:33  ID:qX1/u2G+.net
初心者の頃を除いて、自分のtypoは特に記憶に無いけど、
他人のソース見ててtypoに気付かなかったことなら最近もあった

654
デフォルトの名無しさん[]   投稿日:2016/05/04 10:35:15  ID:PLBcNQ3k.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中)

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)>
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません

655
デフォルトの名無しさん[sage]   投稿日:2016/05/05 10:33:09  ID:pSt39wpo.net
C#での質問なのですが、画像ファイルが存在しなかった場合、代替画像を使用する方法はどうしたらいいのでしょうか

Bitmap pic1 = new Bitmap("C:\hoge\\hogehoge.png");
Bitmap resultPic1 = new Bitmap(pic1);
pictureBox.Image = resultPic1;

656
デフォルトの名無しさん[sage]   投稿日:2016/05/05 10:42:42  ID:lAw+TM4Q.net
とりあえず、スレタイを読む

657
デフォルトの名無しさん[sage]   投稿日:2016/05/05 13:42:50  ID:nB+Q9ZXa.net(2)
>630
もう見てないかもしれんけど求まらんのはいいのかと聞いた手前
お粗末ながら一応コード貼っとく(検算用に素因数分解追加しといた)
http://codepad.org/68Zt5NaH
早く貼りたかったけど偏頭痛が酷くてやっとモニタ見られる様になった
コメント1件

658
デフォルトの名無しさん[sage]   投稿日:2016/05/05 13:47:35  ID:nB+Q9ZXa.net(2)
あ、なんか変なコメント残ったままだ
適当に消しといて

659
デフォルトの名無しさん[sage]   投稿日:2016/05/06 12:12:01  ID:ToIsVvUm.net
>652
> Lisp系やPascal系だと=は等価演算子になる
逆にPascal(と祖先のALGOL)って、変数への代入に2ストローク「:=」必要なんだよねぇ。
比較と代入、どちらが頻繁に使われるか考えれば、打鍵数の少ない識別子を代入操作へ割り当てるのが合理的だろうに。
数学の数式を書いてるんじゃない。
プログラムのコードを書いてるんだよ。
…と何度嘆いたことかw

660
デフォルトの名無しさん[sage]   投稿日:2016/05/06 13:57:26  ID:7zTTCAP1.net
{ の代わりに begin と書く言語に今更何を言ってるんだか

661
デフォルトの名無しさん[]   投稿日:2016/05/08 11:02:56  ID:yMzQXpIN.net
>657
親切な方ありがとうございます!
ユークリッドの互除法使わずにってことですよね。
素因数分解は超時間かかるって困ってた気がするからきっと喜びます。
今習い事の合宿に行ってるので帰ったら見せます。

662
デフォルトの名無しさん[sage]   投稿日:2016/05/08 12:11:30  ID:WYy3H5XU.net(2)
質問です。
環境は VC++2016 です。

http://codepad.org/ym9XHixD

よろしくお願いします。
コメント1件

663
デフォルトの名無しさん[sage]   投稿日:2016/05/08 13:11:00  ID:gvmmmsOx.net
>662
const char*のrangeなんて物は存在し得ない。
char*型文字列は、ナル文字の位置がend()に相当するんだけど
その位置を簡単に求める方法は無い。
ASCIZ文字列について調べて理解してこい
コメント1件

664
デフォルトの名無しさん[]   投稿日:2016/05/08 13:12:35  ID:7MEmH+ja.net
#include <boost/range/as_literal.hpp>
test(boost::as_literal(str));

char[]のほうでも使ったほうがいい
コメント1件

665
657[sage]   投稿日:2016/05/08 13:44:43  ID:WYy3H5XU.net(2)
>663
>664
返信ありがとうございます。

boost::as_literal

まさにこの関数を探していました。
ありがとうございました。

666
デフォルトの名無しさん[sage]   投稿日:2016/05/08 14:57:22  ID:6aMlvRNd.net(2)
こちらのスレでは不適切な内容でしたらご指摘ください。

業務で、VC++6.0で作成されたActiveXOCXをVC++2010に移植しました。
(アップグレードウィザード経由と思われますが、これについては自分が関与していないので
詳細は不明です)
そしてそのActiveXですが、これまでExcelのVBAから呼び出して使用していましたが
こちらもアップグレードということでVB.NET2010でExcelアドインとして再作成する予定になっています。

動作確認ということで、Excelアドインの簡単な枠組みを作成し、ボタンクリックでActiveXの
メソッドを呼び出す処理を作成したところ、実行時に以下のエラーが発生しました。

「System Runtime.InteropServices.COMExceptionで例外が発生しました。
致命的なエラーです。HRESULT=0x8000FFFF(E_UNEXPENTED)」

ネットでもいろいろ調べてみたのですが、VC++でActiveX OCXを作成すること自体がすでに時代遅れなのか
参考になるような事例が見つかりませんでした。
また、VC++6.0からアップデートしたソースに問題があるのかと思い、新規でActiveX OCXを作成してみましたが
結果は同じでした。

何か根本的に間違いを犯しているのでしょうか?
ご教示頂ければ幸いです。
コメント1件

667
デフォルトの名無しさん[sage]   投稿日:2016/05/08 15:24:08  ID:nV7AqIlz.net(2)
全角(S-JIS)と半角(ASCII)が混じった文字列データを全角・半角に分別するソフトを組みたいのですが、
全角文字と半角文字の区別の方法がわかりません。
どなたか教えていただけないでしょうか
コメント2件

668
デフォルトの名無しさん[sage]   投稿日:2016/05/08 15:34:15  ID:CHUcVZyU.net
ascii範囲で全角の後続バイトじゃなければascii

669
デフォルトの名無しさん[sage]   投稿日:2016/05/08 15:42:34  ID:Z7Rc4kW8.net(2)
>666
axitveXではなくてcomアドインで作るという選択肢はないの?
確かそのエラーは何か参照を追加していると出るんじゃないの?似たような経験がある。
コメント1件

670
デフォルトの名無しさん[sage]   投稿日:2016/05/08 15:44:04  ID:Z7Rc4kW8.net(2)
>667
isalpha()みたいな関数無かったっけ?

671
デフォルトの名無しさん[sage]   投稿日:2016/05/08 15:48:46  ID:2KDLdDvi.net
>667
1バイト目で判断できるhttp://charset.7jp.net/sjis.html

672
662[sage]   投稿日:2016/05/08 16:18:29  ID:nV7AqIlz.net(2)
レスサンクス
1バイト目で判断する方法をやってみます

673
デフォルトの名無しさん[sage]   投稿日:2016/05/08 16:25:23  ID:6aMlvRNd.net(2)
>669さん
ありがとうございます。
ActiveX部分もCOMアドインにする方針も俎上に上がりましたが、それだと既存のソースを
書き換える工数が大幅に増えてしまうということで却下されています。

なお、ATLプロジェクトですと、問題なくVB.NET(Excelのアドイン)から呼び出せることまで判明しています。
ですので、やはりActiveXOCXにしがみつくこと自体間違ってないか?という意見もありますが、
そこは固い企業ですので「ActiveXで駄目なのは、お前のやり方が悪いんじゃないのか?」と言われると
C++にさほど詳しくない自分としては何も言えないのが実情です。情けないですが。

引き続き、ご意見ご感想ご叱咤お待ちしております。お願いします。

674
デフォルトの名無しさん[sage]   投稿日:2016/05/08 20:44:12  ID:l6dItGox.net
C++を勉強中です。構造体とかポインタとか難しいことはわかりませんが、DOS画面でのプログラムばっかであきてきました。
起動中のCドライブの丸ごとを別のハードディスクにコピーしたり、パーティションを自在に操作できるようなソフトを作りたいですが、お勧めの書籍などありますか

675
デフォルトの名無しさん[sage]   投稿日:2016/05/08 20:46:08  ID:U52WpjlG.net
C++の機能じゃなくてWindowsの機能だから
そっちを覚えることになるんじゃないかなあ

676
デフォルトの名無しさん[sage]   投稿日:2016/05/09 00:56:12  ID:EI9j01DT.net
char *やwchar *で最後がNULL文字以外で終わっていた場合
どういったときにどういう不具合がでるのですか?わざとNULL文字を入れないようにして試しているんですが普通に動きます
コメント2件

677
デフォルトの名無しさん[sage]   投稿日:2016/05/09 02:12:03  ID:Vrwg3Tws.net
>676
文字列の長さをNULL終端までとして処理する場合に
処理したい文字列の後のデータを余分に文字列として処理してしまう
また確保された領域を越えてアクセスしようとしてしまい例外が発生したりする
コメント1件

678
◆QZaw55cn4c [sage]   投稿日:2016/05/09 07:57:57  ID:ODEtKQkI.net
>676
文字列の長さを別に記録するようにしているのならば,末尾NULL にする必要はない
コメント1件

679
デフォルトの名無しさん[sage]   投稿日:2016/05/09 08:19:41  ID:DB03mCJB.net
>678
#oblomov

680
◆QZaw55cn4c [sage]   投稿日:2016/05/09 10:17:47  ID:nfC7aUi/.net
僕は馬鹿です

681
デフォルトの名無しさん[sage]   投稿日:2016/05/09 20:53:56  ID:sidu2Gua.net(4)
各スレッドが同じグローバルデータを参照するようなマルチスレッドプログラムが、そのデータを同時に参照することになった場合には並列動作出来るのでしょうか?
特に各コアのキャッシュに読み込まれていない初回のデータアクセスに関してはメモリbusを各スレッドが順番待ちで使用して並列動作できないと考えるべきですか?

682
デフォルトの名無しさん[sage]   投稿日:2016/05/09 20:59:21  ID:QYIZFGji.net(3)
普通マルチスレッドなら排他制御するんじゃね?

683
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:01:43  ID:QYIZFGji.net(3)
と思ったら参照だけか。
スマソ。メモリバスレベルのことは俺は知らん。

684
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:03:20  ID:WSElaHek.net(2)
676はC/C++じゃなくてアーキテクチャの話じゃないの?

685
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:11:52  ID:sidu2Gua.net(4)
STLのfuture, threadやマイクロソフトのPPL(c++amp restrict cpu?)などで、マルチスレッド化下場合を想定してください。
アーキテクチャは、intel の市販CPU+チップセット(つまり、普通のPC)とします。

686
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:22:13  ID:sidu2Gua.net(4)
自分で書いてて気がついたのですが、同じグローバルデータに限らず、各コアが異なるアドレスに対してメモリアクセスする場合でも、メモリbusの使用に関して順番待ちになってしまい結局、並列動作できない?
コメント1件

687
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:23:26  ID:WSElaHek.net(2)
C/C++の質問じゃねーじゃんって話なんだけどね

688
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:31:54  ID:sidu2Gua.net(4)
>687
了解しました。
質問取り下げます。

689
デフォルトの名無しさん[sage]   投稿日:2016/05/09 21:33:49  ID:QYIZFGji.net(3)
いやC/C++もハードも含めた総合的な話だろ。

690
デフォルトの名無しさん[sage]   投稿日:2016/05/10 00:56:14  ID:vVT3Tded.net(2)
>677
なるほど
ちなみにVC++2010なんですが、最後にNULL文字が入ってるかどうかってどうやったらわかりますか?
コメント2件

691
デフォルトの名無しさん[sage]   投稿日:2016/05/10 05:20:11  ID:V/U8xU2d.net
つisThereNull()

692
デフォルトの名無しさん[sage]   投稿日:2016/05/10 07:02:18  ID:xA250nOW.net
>690
自分(のプログラム)で保証
ライブラリやAPIによる保証

どちらもない場合はNULL終端ではないとみなす
そうして僕たちは生きてきた
コメント1件

693
デフォルトの名無しさん[sage]   投稿日:2016/05/10 08:42:42  ID:4pZizfk8.net(2)
>690
考え方が逆
『「いわゆるCの文字列」がNULL文字で終わる』のは定義なの
だからCの文字列がNULL文字以外で終わることなんてない
NULL文字以外で終わってたら、それはCの文字列ではない
Cの文字列のつもりなのにNULL文字を付け忘れると、意図通りに動かないし隣の変数を壊したりする
コメント1件

694
デフォルトの名無しさん[sage]   投稿日:2016/05/10 09:56:50  ID:eXhtnP5I.net
>686
コアのキャッシュメモリを見に行くから大丈夫
その代わりミスヒットかキャッシュ無効読み出しするまでバス経由で実体を見に行かない
コンパイラの組み込み関数を使ってコントロールする必要がある

695
デフォルトの名無しさん[sage]   投稿日:2016/05/10 17:02:18  ID:3v8mTcBj.net
キャッシュコヒーレンシーは自動的に保たれるようになってるから
わざわざソフトで特別なコントロールをして実メモリ読込なんてしなくていいよ
並列度を上げるキモはL1(L2も)キャッシュサイズを考慮してキャッシュミスがなるべく少なくなるように設計すること

696
デフォルトの名無しさん[sage]   投稿日:2016/05/10 20:37:58  ID:xG5kTGKm.net(2)
配列ではないポインタをdeleteするときにもとりあえず[]をつけて大丈夫ですか?
やってみたらエラーは出なかったけどこれは要素1つの配列と解釈されたということでしょうか
それならなんでdeleteとdelete[]を使い分けなくてはいけない仕様なんでしょうか
int *p = new int;
delete[] p;
コメント2件

697
デフォルトの名無しさん[sage]   投稿日:2016/05/10 20:55:18  ID:vVT3Tded.net(2)
>692
>693
ではVC++の画面で文字列として扱われている以上NULL文字が入っているということでいいんですか?
コメント1件

698
◆QZaw55cn4c [sage]   投稿日:2016/05/10 21:18:30  ID:HakJiq7i.net
>696
そりゃだめだろう

699
デフォルトの名無しさん[sage]   投稿日:2016/05/10 21:23:44  ID:JjolmsHU.net
>694
>695
質問取り下げたにも関わらず回答ありがとう。

700
デフォルトの名無しさん[sage]   投稿日:2016/05/10 21:57:25  ID:/c+E/E1d.net
>696
>配列ではないポインタをdeleteするときにもとりあえず[]をつけて大丈夫ですか?
確か大丈夫だったと思う

701
デフォルトの名無しさん[sage]   投稿日:2016/05/10 22:48:56  ID:HO4tbZvB.net
途中からdeleteの仕様変わったんだっけ?確か。

702
デフォルトの名無しさん[sage]   投稿日:2016/05/10 23:02:54  ID:4pZizfk8.net(2)
>697
デバッガはchar*は文字列かもしれないから、もし文字列だったらどうなのかをだしてるだけ
メモリを走査していけばいつかは0にあたるし

NULL文字は自分で入れるんだよ
char * str = "abc";
はNULL文字まで入ってる

703
デフォルトの名無しさん[sage]   投稿日:2016/05/10 23:13:42  ID:oNXhVzVr.net
えっ
いまc++11のworking draft見た感じだとdeleteの区別してるっぽいけど?
違った場合動作は未定義ってかいてあるぞ
こっから変わったの?

704
691[sage]   投稿日:2016/05/10 23:48:38  ID:xG5kTGKm.net(2)
関係あるかわかりませんが使っているのはVisualStudioExpress2012です

705
デフォルトの名無しさん[sage]   投稿日:2016/05/11 00:17:08  ID:IWr/hrAP.net
c++の規格としてはやっぱり区別しなきゃいけないんだから
ある環境で正常に動いたとしてもそれはたまたまだと思ってちゃんと規格通り区別すべき
vcは規格と違う仕様が多いから注意したほうがいい、finallyとか

706
デフォルトの名無しさん[sage]   投稿日:2016/05/11 02:59:19  ID:mXAct+cM.net
最初の人とは違いますが
そもそもなぜdeleteとdelete[]の二つが必要だったんですか?
初心者ですが理由がパッと思いつきません…

707
デフォルトの名無しさん[sage]   投稿日:2016/05/11 09:02:54  ID:HF1jtJdR.net(3)
配列の場合、配列サイズが分かる情報が必要だから

708
デフォルトの名無しさん[sage]   投稿日:2016/05/11 11:31:10  ID:Xef87XAV.net
そうじゃないだろ?
サイズならコンパイル時に決定してるじゃん
コメント1件

709
デフォルトの名無しさん[sage]   投稿日:2016/05/11 12:02:29  ID:bRTYzXSU.net
CFoo *の値だけじゃ1個だけなのか配列なのか区別できない
1個だけの時でも配列の時のように数をどこかに隠し持っていればできるが
1個だけの時にオーバーヘッドが出るのが嫌だったんだろう

区別したくない奴は必ず配列で書けばいいんだよ
1個だけしかいらない時でも CFoo * ptr = new CFoo[1]; ...; delete[] ptr; ってね


>708
配列newは普通に実行時に決定ですが
コメント1件

710
デフォルトの名無しさん[sage]   投稿日:2016/05/11 14:43:09  ID:SK3LEuNa.net
>709
newで配列を確保してるんですか?
すごいな、最近のc++ではそんなことできるんだw

711
デフォルトの名無しさん[sage]   投稿日:2016/05/11 15:05:39  ID:GzlL/1jH.net(3)
CFoo * ptr = new CFoo[1];
を配列とでも思ってるでしょうねwww

712
デフォルトの名無しさん[sage]   投稿日:2016/05/11 15:12:58  ID:HF1jtJdR.net(3)
なんだこいつら(?)頭おかしいのか

713
デフォルトの名無しさん[sage]   投稿日:2016/05/11 15:13:33  ID:GzlL/1jH.net(3)
おまえがなw

714
デフォルトの名無しさん[sage]   投稿日:2016/05/11 21:23:08  ID:LnJQmy5e.net
newで取った連続メモリを配列と呼ばないなら何て呼ぶんだ?
コメント1件

715
デフォルトの名無しさん[sage]   投稿日:2016/05/11 21:47:47  ID:GzlL/1jH.net(3)
>714
おまいさんはもう一度C++を勉強しなおせ
sizeof(ptr)
はいくつでしょうか?
コメント3件

716
デフォルトの名無しさん[sage]   投稿日:2016/05/11 21:50:29  ID:D1YLtaNk.net
>715
sizeof(ptr) と delete [] の関係は規格のどの辺に書かれてますか?

717
デフォルトの名無しさん[]   投稿日:2016/05/11 21:59:07  ID:9I7Ewr6L.net
http://cs.nyu.edu/courses/summer11/G22.2110-001/documents/c++20...

5.3.5 Delete
1
[expr.delete]
The delete-expression operator destroys a most derived object (1.8) or array created by a new-expression.
delete-expression:
:: opt delete cast-expression
:: opt delete [ ] cast-expression
The first alternative is for non-array objects, and the second is for arrays.


non-array, arrays
ばっちり書かれとるがな。

718
デフォルトの名無しさん[sage]   投稿日:2016/05/11 22:43:46  ID:HF1jtJdR.net(3)
>715
やっぱりな。こりゃ本物だわ

719
デフォルトの名無しさん[sage]   投稿日:2016/05/12 01:43:52  ID:/RNlf0h0.net
ばかばっかだなw

720
デフォルトの名無しさん[sage]   投稿日:2016/05/12 02:53:45  ID:wGzvcNCy.net
配列とポインタは同じだと思ってるんだろうなw

721
デフォルトの名無しさん[sage]   投稿日:2016/05/12 08:22:31  ID:72xNs51t.net
>715
お前はsizeof(ptr)とsizeof(*ptr)の違いを知れ

722
デフォルトの名無しさん[sage]   投稿日:2016/05/12 08:45:30  ID:G/keDtzh.net
おまえら本当馬鹿ばっかだな
何回言ったらわかるんだ

配列とポインタは違うって・・・

723
デフォルトの名無しさん[sage]   投稿日:2016/05/12 09:35:17  ID:e6oRkxgP.net
まーだIDコロコロしながら基地外晒し続けてるのか
ptrが配列だなんて誰も言ってないんだよ
ptrが指してる先が配列なんだよ
この糞バカ・ドジ・マヌケ

724
デフォルトの名無しさん[sage]   投稿日:2016/05/12 09:52:47  ID:cPh0xdH3.net
newして得たポインタが配列だってよwwwww
コメント1件

725
デフォルトの名無しさん[]   投稿日:2016/05/12 11:37:00  ID:ehHa3Ia2.net
delete: 削除対象のインスタンスは1つのみなので、ポインタが指しているオブジェクトのデストラクタを実行すればよい。
delete[]: 削除対象のインスタンスは配列になっているので、オブジェクトの配列そのものだけではなく、
何回デストラクタを実行すればよいのかを保存しておく必要がある。
delete[] はそれを参照して、繰り返しデストラクタを走らす。

なので、 new int[10] したものを delete で削除してもそもそもデストラクタが存在しないので、
問題が発生することはまずないが、デストラクタで何らかの処理(暗黙、明示的な)をおこなう場合、
本来実行されるべきデストラクタが走らず問題となることがある。
(よく言う delete[] を使うべきところで delete を使うと、リークすることがあるというやつだ)

>724
new A[20] で確保されるのは A型20この配列で、結果はその配列へのポインタだろ。
これのどこに問題他あるんだ? (ポインタが配列なんじゃなく、ポインタが指す先が配列)

また delete ptr; というのは ptr 自体を delete するわけではなく、 ptr が持っているポインタが
指している先のオブジェクトを delete するんだよな。 delete[] ptr 自体を delete するわけではなく、
ptrが指しているオブジェクトの配列を削除する。

つりだとしても面白くなさ過ぎるからいい加減にしろ。

726
デフォルトの名無しさん[sage]   投稿日:2016/05/12 16:19:56  ID:3OjnTRaH.net
結論はdeleteでもdelete[]でもどっちでも良いという事だな。

727
デフォルトの名無しさん[sage]   投稿日:2016/05/12 20:49:15  ID:Vdq3bAon.net
なぜそうなるw

728
デフォルトの名無しさん[sage]   投稿日:2016/05/12 21:42:24  ID:R6+MliT1.net
QZの逆をいくのが

729
デフォルトの名無しさん[sage]   投稿日:2016/05/13 16:02:01  ID:LU5Y7ENM.net
>区別したくない奴は必ず配列で書けばいいんだよ
>1個だけしかいらない時でも CFoo * ptr = new CFoo[1]; ...; delete[] ptr; ってね

これはどうなの

730
デフォルトの名無しさん[sage]   投稿日:2016/05/13 16:34:06  ID:0l3VxkcG.net
new CFoo[n]; は n>=0 で有効(たぶん)

731
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:51:08  ID:Q2K6b21m.net
むむ…質問したものですが難しいですね
発端というのがfreeならメモリ確保したやつってなんでも?(malloc,calloc)、どんな長さでも解放してくれると思ったので
てっきりメモリアドレスと確保した長さをどっかに保持しているのかなと
C++だとやってはくれないから[]付きがあるのかなと漠然と思っていたのですが
もっと難しい問題があるんですね…
コメント1件

732
デフォルトの名無しさん[sage]   投稿日:2016/05/13 23:04:34  ID:2JmOmUY3.net
言われてみれば。
mallocは確かに確保した長さを保持してたと思うが、
newも確保した長さ保持してるよね?
そうなるとdeleteで[]を指定しなきゃならない理由がわからんなぁ。

733
デフォルトの名無しさん[sage]   投稿日:2016/05/13 23:13:30  ID:ZUyuraMo.net
>731
> てっきりメモリアドレスと確保した長さをどっかに保持しているのかなと
K&Rのmallocやglibcのmallocはまさにそういう情報を某所に保持してる。
某所と言うかブロックの先頭アドレスの直前あたりに必要なだけの大きさの領域をこっそり確保したりしてる。

でもそれとこれとは別問題。
delete[]は配列上の全てのオブジェクトのデストラクタを呼び出すけど、
deleteは単一のオブジェクトのデストラクタしか呼び出さない。
難しくないよ。
あと内部構造もちょっと違うみたいでideone.comの環境だとdelete[]するべきところでdeleteするとSegmentation Faultで落ちる。
まぁ異常修了を正常終了と偽るくらいは出来るけど。
https://ideone.com/NjRmLT
コメント1件

734
デフォルトの名無しさん[sage]   投稿日:2016/05/14 00:18:52  ID:mszX5zzu.net
おおー!ありがとうございます
生き死にの関係でシンプルにはできないんですね
やっぱりbetter Cにするにしても中々大変です…

735
デフォルトの名無しさん[sage]   投稿日:2016/05/14 07:48:22  ID:C+tPjEbi.net(5)
>733
visual studioなら正常終了するよね。

736
デフォルトの名無しさん[sage]   投稿日:2016/05/14 10:18:35  ID:Hwp5XNP7.net(9)
VS2015で試してみたけど正常終了しないが
コメント1件

737
デフォルトの名無しさん[sage]   投稿日:2016/05/14 10:47:05  ID:C+tPjEbi.net(5)
>736
俺はvs2013
コメント2件

738
デフォルトの名無しさん[sage]   投稿日:2016/05/14 11:13:20  ID:Hwp5XNP7.net(9)
>737
VS2013でも同じだけど?
例外コード:c0000374
コメント1件

739
デフォルトの名無しさん[sage]   投稿日:2016/05/14 12:20:54  ID:BsF9lC3v.net(7)
>737
もしかしてsignalで11番殺してない?

740
デフォルトの名無しさん[sage]   投稿日:2016/05/14 12:39:01  ID:Hwp5XNP7.net(9)
signal(11, handler);の行が有ろうが無かろうが同じだよSIGSEGVじゃないから
コメント2件

741
デフォルトの名無しさん[sage]   投稿日:2016/05/14 12:52:45  ID:BsF9lC3v.net(7)

742
デフォルトの名無しさん[sage]   投稿日:2016/05/14 12:56:00  ID:Hwp5XNP7.net(9)
>740
あのねVSでWindows環境での話をしてるんだが

743
デフォルトの名無しさん[sage]   投稿日:2016/05/14 12:56:42  ID:BsF9lC3v.net(7)
・・・・・・ごめん、もしかして、そのVisual StudioとかWindowsとかいう環境だと違う値なの?
コメント1件

744
デフォルトの名無しさん[sage]   投稿日:2016/05/14 12:56:59  ID:C+tPjEbi.net(5)
>738
本当か?
おれは今まで一度もdeleteとdelete[]を区別した事がない。
どっちでも同じだと思っていたよ。何十年も。
仕事で書いたコードの中もそうなっている。まあいいか。
コメント1件

745
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:02:55  ID:BsF9lC3v.net(7)
度々ごめんよ
> signal(11, handler);の行が有ろうが無かろうが同じだよSIGSEGVじゃないから
この文の解釈なんだけど、
SIGSEGVが11と違う値になってるから
って意味と
発生するエラーがSIGSEGVでは無いから
って意味の2通りに解釈できて

俺は前者だと思ったんだけど、後者の意味で使ってた?
コメント1件

746
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:03:27  ID:Hwp5XNP7.net(9)
>743
「ハンドルされない例外が 0x77C2E843 (ntdll.dll) で発生しました(DeleteTest2013.exe 内): 0xC0000374: ヒープは壊れています。 」
デバッグビルドだとC++ライブラリのスカラーdeleteコード内で「Debug Assertion Faild!」になる
ヒープの正当性チェックはMS環境のほうがしっかりしてる印象
コメント1件

747
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:06:11  ID:Hwp5XNP7.net(9)
>745
不正なヒープ操作はSegmentation Faultになる以前にランタイム/APIのチェックに引っかかるということ
MS環境では

748
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:10:26  ID:BsF9lC3v.net(7)
>746-747
なるほどなー

ちなみにWindowsのバージョン幾つ?
NTだかMEだかの頃にヒープ周りの内部動作が変わったことが原因で
メモリの解放後に触りに行く類の致命的なバグを含む某ゲームが動かなくなったって記事を
昔どこかで読んだんだけど
コメント1件

749
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:19:20  ID:Hwp5XNP7.net(9)
ちなみにLinux上のclang++(3.8.0)だと
DeleteTest.cpp:35:2: warning: 'delete' applied to a pointer that was allocated with 'new[]'; did you mean 'delete[]'?
[-Wmismatched-new-delete]
delete bar;

になる。
new[]で確保したものをスカラーdeleteするのは完全に違法行為だから「どっちでもいい」なんて
決して考えてはいけない
コメント1件

750
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:21:39  ID:Hwp5XNP7.net(9)
>748
Windows7 pro SP1 64ビット
コメント1件

751
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:27:29  ID:BsF9lC3v.net(7)
>750
ありがとう。

>744さんの環境とは違うんだろうか・・・・・・

752
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:28:49  ID:C+tPjEbi.net(5)
>749
じゃあ
newで要素一個
int *p = new int[1];
の場合なら、
delete p;
delelte[] p;
どっちでもいいか?
コメント1件

753
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:36:48  ID:Hwp5XNP7.net(9)
>752
よくない
一個かどうかの問題じゃなくてnew[]とスカラーnewとじゃメモリレイアウトが違う
コメント1件

754
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:40:07  ID:C+tPjEbi.net(5)
>753
君、なんでそんなに詳しい?
コメント1件

755
デフォルトの名無しさん[sage]   投稿日:2016/05/14 13:44:47  ID:BsF9lC3v.net(7)
>754
内部でどう実装してるか考えたら自然とそういう結論になると思うの

756
デフォルトの名無しさん[sage]   投稿日:2016/05/14 14:24:17  ID:hY9hPc0m.net
ID:BsF9lC3v
コントみたいで吹いたw

757
デフォルトの名無しさん[sage]   投稿日:2016/05/16 08:19:11  ID:vUiBQ3d1.net(3)
質問です。

int 型に -2147483647 を直接入れるとエラー(警告)が出ます。
VC++2016のバグかと思うんですが、どうなんでしょうか。

http://codepad.org/o2GnUBtr

よろしくお願いします。
コメント1件

758
752[sage]   投稿日:2016/05/16 08:20:21  ID:vUiBQ3d1.net(3)
-2147483647 ではなく
-2147483648 の間違いです。

リンク先のコードはあってます。

http://codepad.org/o2GnUBtr

759
デフォルトの名無しさん[sage]   投稿日:2016/05/16 08:51:44  ID:wkAz3sqc.net
i = -2147483647
i = i - 1
やってみてよ
コメント1件

760
デフォルトの名無しさん[sage]   投稿日:2016/05/16 09:08:11  ID:IBGTyv6p.net
C言語の整数リテラルの謎【解説編】
http://qiita.com/raccy/items/e793f67f7e0ab98ef0d9

リテラルにくっつく暗黙変換とか細かい挙動は意外に把握できてなかったりする
コメント2件

761
デフォルトの名無しさん[sage]   投稿日:2016/05/16 09:09:56  ID:5ug0//ZW.net(3)
>757
こんなバグがあるとはw VS2015でもそうなる
i = -2147483647-1;なら通る
コメント1件

762
デフォルトの名無しさん[sage]   投稿日:2016/05/16 09:18:33  ID:5ug0//ZW.net(3)
>760
バグじゃなくて仕様なのか?
確かにVCのINT_MINの定義は(-2147483647-1)になってるわ
それにしても納得出来ないなあ

763
752[sage]   投稿日:2016/05/16 09:19:59  ID:vUiBQ3d1.net(3)
やっぱバグみたいなもんですね。

>759
普通に通ります。

>761
こちらでも通ります。

>760
ありがとうございます。
たぶん 2147483648 が一度 unsigned long long (uint64_t) として扱われてるんじゃないかと思います。


ありがとうございました。
コメント1件

764
デフォルトの名無しさん[sage]   投稿日:2016/05/16 09:26:33  ID:5ug0//ZW.net(3)
>763
>たぶん 2147483648 が一度 unsigned long long (uint64_t) として扱われてるんじゃないかと思います。
たぶんそうだね。でもここに書いてることと矛盾している
https://msdn.microsoft.com/ja-jp/library/c70dax92.aspx
>プレフィックスもサフィックスも付かない場合、コンパイラは整数リテラル値に型 int (32 ビット) を与えます。
>値が収まりきらない場合は型 long long (64 ビット) を与えます。

i = -2147483648LL;なら通るし

765
デフォルトの名無しさん[sage]   投稿日:2016/05/16 14:52:34  ID:Lk4dVwp2.net
最低限C4146で検索しようぜ
https://msdn.microsoft.com/ja-jp/library/4kh09110.aspx

まぁ規格では int -> long int -> long long int ってなってるからバグって言っていいと思う

766
デフォルトの名無しさん[sage]   投稿日:2016/05/16 20:51:52  ID:RI3Zko2J.net(3)
マイナスは後から計算するんだろ。
intならオーバーフローじゃないか。

767
デフォルトの名無しさん[]   投稿日:2016/05/16 21:20:10  ID:1HaCrD/E.net(2)
char*とstd::stringの違いってなんですか?
コメント4件

768
デフォルトの名無しさん[sage]   投稿日:2016/05/16 22:23:01  ID:ygw1DlKj.net(2)
>767
むしろ同じ所が無い
コメント1件

769
762[]   投稿日:2016/05/16 22:37:01  ID:1HaCrD/E.net(2)
>768
具体的に何が違うのでしょうか?
コメント2件

770
デフォルトの名無しさん[sage]   投稿日:2016/05/16 22:38:32  ID:JIPl13T1.net
>769
型が違う

771
デフォルトの名無しさん[sage]   投稿日:2016/05/16 22:48:58  ID:RI3Zko2J.net(3)
和ロス

772
デフォルトの名無しさん[sage]   投稿日:2016/05/16 23:13:00  ID:ygw1DlKj.net(2)
>769
逆に何が同じなのか聞きたいよ…
相互に型を変換出来るようになっているだけで、全く違うものなんだけど…

773
デフォルトの名無しさん[sage]   投稿日:2016/05/16 23:25:41  ID:RVOStkbz.net
でもまあ、char*は文字列を扱うのに使いますと教わっていれば
たしかに違いは分からんかもしらん

774
デフォルトの名無しさん[sage]   投稿日:2016/05/16 23:33:15  ID:RI3Zko2J.net(3)
char*が不便すぎてstringが出来たってことかな。

775
デフォルトの名無しさん[]   投稿日:2016/05/17 00:52:55  ID:uQhb1g5z.net
C++ではcharは規則が特別扱いだからなあ。

776
デフォルトの名無しさん[]   投稿日:2016/05/17 01:42:44  ID:/hMFQ+1O.net
C++14での質問です。
structのメンバ変数を取得する方法は、Boost.Fusionにある
struct_member_name<person, 0>::call()
とかで取得できますが、classにはこの方法は使えません。

classでメンバ変数一覧を取得する方法はないのでしょうか?
一応、
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4113.pdf
こちらに、将来的には、type_traitsにstd::class_memberなるものを実装するようなことが書かれていますが、
現段階で取得する方法はないのでしょうか?
コメント1件

777
デフォルトの名無しさん[sage]   投稿日:2016/05/17 06:17:48  ID:eRIY89eq.net
>767
樽に入れた酒とカップ酒(熱燗機能付き)くらい違う

素人は器に移す時にこぼしたり
計量を間違えたり
栓を忘れたりする

778
デフォルトの名無しさん[sage]   投稿日:2016/05/17 07:07:40  ID:iUzOcy+l.net
例えがわかりにく過ぎ

779
デフォルトの名無しさん[sage]   投稿日:2016/05/17 07:32:08  ID:74/nDTTZ.net
>767
同じだ

780
デフォルトの名無しさん[sage]   投稿日:2016/05/17 10:56:13  ID:dkgGpRzf.net
>767

char* はより低級な型。プリミティブ型。
std::string はより高級な型。STLで定義されてる。

char* で効率よく書けば、普通は最も高速。だけどいろいろ面倒。
std::string は、十分に速いけどchar* よりは低速。だけどいろいろ便利。


>776

struct と class は本質的には同じものだから、class でも取得出来るかと。
試しに class に対して BOOST_FUSION_ADAPT_STRUCT で定義してみたけど、普通に取得出来た。

VisualC++ 2016
boost_1_60_0
コメント1件

781
デフォルトの名無しさん[sage]   投稿日:2016/05/17 11:19:16  ID:35EWU0NF.net(2)
ユニコードについて質問です

CreateWindow("LISTBOX" , ...); で作成したリストボックスはユニコード対応できないのでしょうか
何かフラグ指定すればユニコード対応になるとかはないのですか?
コメント1件

782
デフォルトの名無しさん[sage]   投稿日:2016/05/17 11:33:24  ID:0ndBRKVS.net
>781
手元に環境が無くて試せないんだけど、Unicode版を使ってみたらどうなる?

CreateWindowW(L"LISTBOX", ...);
コメント1件

783
デフォルトの名無しさん[sage]   投稿日:2016/05/17 12:38:43  ID:35EWU0NF.net(2)
>782
ありがとうございます
リストボックスに文字列を追加する際のSendMessageをユニコード対応のSendMessageWにしたところうまく行きました
お手数をおかけしました

784
デフォルトの名無しさん[]   投稿日:2016/05/17 13:19:44  ID:kiryrbN3.net
>780
ありがとうございます。
使い方を間違っていたようです。BOOST_FUSION_ADAPT_STRUCTで予めfusionで扱えるコンテナにする必要があるんですね。
その際、結局メンバ名などが必要になるのですね。。

ちょっとしたORMを実装しようと思っていたので、
これだとちょっと使えなさそうです。

785
デフォルトの名無しさん[age]   投稿日:2016/05/20 11:16:33  ID:czYvqd6J.net
vector<int> v1(10);

v1.push_back(999);
v1.push_back(111);
v1.push_back(666);
v1[3] = 777;

printf("%d\n", v1[0]);
printf("%d\n", v1[1]);
printf("%d\n", v1[2]);
printf("%d\n", v1[3]);

[出力結果]
0
0
0
777

vectorの要素数を10コ確保し
push_back()を呼ぶと配列に代入されず0となるんだが。
どうすれば?
コメント3件

786
デフォルトの名無しさん[sage]   投稿日:2016/05/20 11:40:18  ID:jCV1qcCq.net
>785
そのコードだと、
10個の0に続けて999, 111, 666を追加してる。
コンストラクタとpush_back()の仕様をよく読んでみ

787
デフォルトの名無しさん[sage]   投稿日:2016/05/20 12:42:41  ID:EWS23G7J.net
>785
v1.size()で要素数を確認!

788
デフォルトの名無しさん[sage]   投稿日:2016/05/20 19:14:43  ID:COmJEZ9N.net
>785
capacity()を使え

vector<int> v1;
v1.capacity(10);

v1.push_back(999);
v1.push_back(111);
v1.push_back(666);
コメント1件

789
デフォルトの名無しさん[sage]   投稿日:2016/05/20 23:14:26  ID:aa5yUFRV.net
reserve

790
デフォルトの名無しさん[sage]   投稿日:2016/05/20 23:27:57  ID:OCEBmLiZ.net
昔reserveつかって結構なパフォーマンス改善したことあってビビったわ。

791
デフォルトの名無しさん[sage]   投稿日:2016/05/21 14:44:21  ID:af3CQIfx.net
>788
その方法で、質問者の問題が何か解決するの?

792
デフォルトの名無しさん[]   投稿日:2016/05/22 19:05:21  ID:6HgZ7OjL.net(2)
asioのサンプルコードを見ていたら[this]というものが出てきました。
acceptor_.async_accept(socket_,
[this](std::error_code ec)
[this]とはどういう意味なのでしょうか?

793
デフォルトの名無しさん[sage]   投稿日:2016/05/22 19:26:28  ID:8P2D0URL.net
async_accept の accept_handler として lambda を渡して
その variable capture してるんじゃないの?
コメント1件

794
787[]   投稿日:2016/05/22 19:30:59  ID:6HgZ7OjL.net(2)
>793
あ、これがラムダなんですね。
ありがとうございます!

795
デフォルトの名無しさん[]   投稿日:2016/05/24 04:10:06  ID:YXVEPgBa.net
http://pastebin.com/ZsCtQBXF
do_accept()が呼ばれるたびにstd::make_shared<Session>(std::move(socket_))->start();が実行されているのですがstd::moveしているのにsocket_を参照できるのはなぜですか?
コメント1件

796
デフォルトの名無しさん[]   投稿日:2016/05/24 16:47:12  ID:nQh0KP4n.net(2)
変数の命名について質問です。

797
デフォルトの名無しさん[]   投稿日:2016/05/24 16:48:42  ID:nQh0KP4n.net(2)
↑なぜか2行目から表示されなかったので連投失礼します。
変数の命名について質問です。
"_"+大文字から始まる名前や、"__"を含む名前は予約語と被るのでつけない方が良いとのことですが、
では"_"+小文字から始まる名前なら問題ないのでしょうか?
クラスのメンバ変数に"_a"もしくは"a_"と命名したいと思っています。
コメント2件

798
デフォルトの名無しさん[sage]   投稿日:2016/05/24 18:14:10  ID:TtTF6uFS.net(3)
>797
環境依存。
実際に使ってみて、駄目だったら使うな。

799
デフォルトの名無しさん[sage]   投稿日:2016/05/24 18:45:15  ID:Nm28gk1A5(2)
グローバル変数、グローバル関数の場合は問題になるけど、
ローカル変数やメンバ変数の場合は影響なかったはず。

800
デフォルトの名無しさん[sage]   投稿日:2016/05/24 19:24:21  ID:/CRqdm6R.net(2)
そんなひどいw

801
デフォルトの名無しさん[sage]   投稿日:2016/05/24 20:11:53  ID:/CRqdm6R.net(2)
移植するとき発狂するぞw

802
デフォルトの名無しさん[sage]   投稿日:2016/05/24 21:06:09  ID:TtTF6uFS.net(3)
_allocaなんかはどこかのクソ環境だと被るよね。

803
デフォルトの名無しさん[]   投稿日:2016/05/24 21:10:26  ID:uzPl1U54.net(4)
#include <iostream>
using namespace std;
class pokemon{
private:
int height;
double weight;
public:
void show();
void setNumGas(int h, double w);
};
void pokemon::show(){
cout <<

804
デフォルトの名無しさん[sage]   投稿日:2016/05/24 21:18:38  ID:Nm28gk1A5(2)
まじかよ。こういうの普通に書いてるんだが、マズイのか。

struct X {
void f() { _exit(0); }
void g() { this->_exit(0); }
void _exit(int x) { ::_exit(x); }
};

805
デフォルトの名無しさん[]   投稿日:2016/05/24 21:12:13  ID:uzPl1U54.net(4)
上記のプログラムの実行結果が
500は正しい体重ではありません
変更できませんでした
ポケモンの身長は4196992です
ポケモンの体重は2.07321e-317です
となります
なぜでしょうか?

806
デフォルトの名無しさん[]   投稿日:2016/05/24 21:13:01  ID:uzPl1U54.net(4)
void pokemon::show(){
cout << "ポケモンの身長は" << height << "です\n";
cout << "ポケモンの体重は" << weight << "です\n" ;
}
void pokemon::setNumGas(int h,double w){
if(h > 0 && h <500){
height = h;
weight = w;
cout <<"身長を"<< height <<"に体重を" <<weight <<"にしました\n";
}
else{
cout << w <<"は正しい体重ではありません\n";
cout <<"変更できませんでした\n";
}}
int main()
{ pokemon pikachu;
// pikachu.height = 10000;
// pikachu.weight = 10000;
pikachu.setNumGas(1000,500);
pikachu.show();
}

807
デフォルトの名無しさん[sage]   投稿日:2016/05/24 21:15:34  ID:TtTF6uFS.net(3)
1000 < 500はfalseだよね

808
デフォルトの名無しさん[sage]   投稿日:2016/05/24 21:34:23  ID:+9luGJWT.net
1〜499じゃないとelseにいく

本題とは別な突っ込みになるけど
0 < h && h < 500 か 500 > h && h > 0 にした方が見やすいよ
右に行くほど大きくか左に行くほど大きくか統一って意味ね
コメント1件

809
デフォルトの名無しさん[]   投稿日:2016/05/24 22:25:42  ID:uzPl1U54.net(4)
>808
わかりました

810
デフォルトの名無しさん[sage]   投稿日:2016/05/24 23:13:18  ID:RnD2X6bw.net
>795
ムーブ後のtcp::socketオブジェクトは閉じた状態の正常なソケットになるだけだから
それと承知なら(読み書きしようとすればエラーを返す)問題なく参照できる
コメント1件

811
デフォルトの名無しさん[sage]   投稿日:2016/05/25 00:04:49  ID:0v8CMiQb.net
>797-802
a_ はOK

_a は、ややこしいからダメ。
とにかく、_ を先頭に使ったらダメ

812
デフォルトの名無しさん[sage]   投稿日:2016/05/25 02:23:32  ID:aTqwr9d2.net
仕様と、環境ごとの話と、デファクトスタンダードと、自分の好み
わざと混ぜて話す人が多そう

813
デフォルトの名無しさん[sage]   投稿日:2016/05/25 02:34:25  ID:ww7whTPS.net(8)
メンバ変数は_小文字がベスト
これで問題起きるって言ってる奴は単に頭腐ってる奴だから無視でOK
_allocaの例にしてもww
コメント1件

814
デフォルトの名無しさん[sage]   投稿日:2016/05/25 02:45:36  ID:MxlKt/PB.net(3)
好み(宗教)の問題だろうに、ベストとか言っちゃうのは残念な感じだな
コメント1件

815
デフォルトの名無しさん[sage]   投稿日:2016/05/25 02:47:57  ID:ww7whTPS.net(8)
>814
好み(宗教)で済むと断言してるのもあなたの好み(宗教)でしかないですね

816
デフォルトの名無しさん[sage]   投稿日:2016/05/25 02:55:24  ID:MxlKt/PB.net(3)
返しも残念だったと

817
デフォルトの名無しさん[sage]   投稿日:2016/05/25 03:01:10  ID:ww7whTPS.net(8)
メンバ変数は_小文字がベストというのはもちろん俺の意見だけど
何の意見も言わずにケチ付けるだけしか能のないお前よりマシだよ
このクソ低能

818
デフォルトの名無しさん[sage]   投稿日:2016/05/25 03:10:48  ID:ww7whTPS.net(8)
メンバ変数のプリフィックス(あるいはポストフィックス)をどうするるべきか?
或いはthis->を使うべきか?、そもそもそんなもものは必要ないのか?、
という話題はC++の歴史の中で嫌になるほど繰り返し繰り返し出てるのに
「好み(宗教)」で済むと言ってるお前は何も考えてない思考停止野郎なんだということ自覚しろよ
少なくとも俺は自分の意見を言った
コメント1件

819
デフォルトの名無しさん[sage]   投稿日:2016/05/25 07:10:18  ID:SLfE9uQ3.net
宗教戦争だという結論

820
デフォルトの名無しさん[sage]   投稿日:2016/05/25 07:44:59  ID:RPqKSRgi.net
_で始まるシンボル名はQACで警告が出るから使わない

821
デフォルトの名無しさん[sage]   投稿日:2016/05/25 08:11:41  ID:6ZfKurqy.net(2)
> 0 < h && h < 500
これ一択

822
デフォルトの名無しさん[sage]   投稿日:2016/05/25 08:16:55  ID:6ZfKurqy.net(2)
>818
> 少なくとも俺は自分の意見を言った

だからそう言う行為が
> 歴史の中で嫌になるほど繰り返し繰り返し出てるのに
いい加減学習しろよ

823
デフォルトの名無しさん[sage]   投稿日:2016/05/25 09:41:15  ID:8+OpaV01.net(5)
>813
GoogleのC++スタイルガイドによると、「アンダースコアで終わる小文字とアンダースコアの列にする」のがベスト
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
> データメンバ(インスタンス変数やメンバ変数とも呼ばれる)は通常の変数名と同様、
> アンダースコアを含む小文字にします。ただし、必ずアンダースコアで終わってください。

アンダースコアで開始するのがベストってソース何処よ
コメント1件

824
デフォルトの名無しさん[sage]   投稿日:2016/05/25 09:42:48  ID:ww7whTPS.net(8)
QAC?古代人は大変だねえ(げらげら)

825
デフォルトの名無しさん[sage]   投稿日:2016/05/25 09:45:39  ID:ww7whTPS.net(8)
>823
Googleスタイルガイドはお前にとってはユダヤ教徒にとってのタルムードみたいなものなんか?
あーこわこわ
コメント1件

826
デフォルトの名無しさん[sage]   投稿日:2016/05/25 09:51:42  ID:8+OpaV01.net(5)
>825
宗教の問題を宗教的喩えで表現するのか。斬新だな。
小文字_がベストってのは俺だけじゃなく、Googleで働いてる殆ど全てのC++プログラマの意見なんだけど(前確認した)
_小文字がベストっていうのは君個人の意見だって事しか俺は知らないんだ。

素晴らしい能力を持つGoogleの多くのプログラマの意見と、
能力不明な君の意見と、
一般的に言ってどっちが正しいと俺が考えると思う?

827
デフォルトの名無しさん[sage]   投稿日:2016/05/25 09:57:43  ID:ww7whTPS.net(8)
ついに思考停止のお前の脳みそがどう判断するかが基準になったかw
勝手にすれば良いけど_小文字が問題あるかのようなデマを流して俺に迷惑かけるなよ
コメント1件

828
デフォルトの名無しさん[sage]   投稿日:2016/05/25 10:13:37  ID:8+OpaV01.net(5)
>827
デマじゃないよ。

n3690の17.6.4.3.2によると
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.
と書かれていて、_小文字が安全かどうかは実装依存だよ。

いい加減、問題じゃないどころか_小文字はベストだって言うならソースをくれよ。

829
デフォルトの名無しさん[sage]   投稿日:2016/05/25 10:15:43  ID:8+OpaV01.net(5)
あぁ、メンバ変数の名前として使うケースだと、ここからは危険だとは読み取れないね。

830
デフォルトの名無しさん[sage]   投稿日:2016/05/25 11:30:55  ID:ww7whTPS.net(8)
「ああ」「読み取れない」www
"in the global namespace. "
知ってるよそんなことくらいw

831
デフォルトの名無しさん[sage]   投稿日:2016/05/25 11:53:53  ID:MxlKt/PB.net(3)
宗教なんて言われるのは、他の宗教を認めないからか(自分の宗教がベスト)
好みの問題じゃなかったな、スマソ

832
デフォルトの名無しさん[sage]   投稿日:2016/05/25 12:48:00  ID:F7idSeRd.net(2)
そのソースを使い回したりせず、
アセンブリでデバッグしないと断言できるならプリフィクスに_付けるのも良いんじゃないの

俺は謙虚だからそんなことしないけどな

833
デフォルトの名無しさん[sage]   投稿日:2016/05/25 12:54:37  ID:/FbN3Qal.net
命名ルールで熱くなれるなんてスケールが小さくてうらやましいな。
俺もしょっぽいことにいちいち熱くなれるようになりたい。

834
デフォルトの名無しさん[sage]   投稿日:2016/05/25 13:01:12  ID:F7idSeRd.net(2)
おうどうした、スケールの大きい悩みがあるなら聞いてやるぞ
コメント1件

835
790[]   投稿日:2016/05/25 15:51:07  ID:Y0+hoqGR.net
>810
ありがとうございます!

836
◆QZaw55cn4c [sage]   投稿日:2016/05/25 20:53:58  ID:xoXxd0b5.net
>834
きいてくれ
書くたびにクソ呼ばわりされるんだが,どこをなおせばいい?
コメント2件

837
デフォルトの名無しさん[sage]   投稿日:2016/05/25 20:55:13  ID:8+OpaV01.net(5)
うまれをなおせばいい

838
デフォルトの名無しさん[sage]   投稿日:2016/05/26 10:44:14  ID:ZOuyJMgW.net
>836
まずそのクソコテを隠せ。


…すまん。普段はこんな悪い言葉の投稿をしないのだけど、
書いておかないと >836 の相談内容自体がウソになってしまうでな。

839
デフォルトの名無しさん[sage]   投稿日:2016/05/26 12:53:12  ID:6KAnMnB/.net
クソコテ隠してもうんこ臭プンプンだから無理
コメント1件

840
デフォルトの名無しさん[sage]   投稿日:2016/05/26 21:17:08  ID:v90G5jKa.net
>839
何がにおうのですか?

841
デフォルトの名無しさん[sage]   投稿日:2016/05/26 21:55:39  ID:tNvxuks+.net
糞コテ遣いは言動が一々臭う

842
デフォルトの名無しさん[sage]   投稿日:2016/05/27 20:21:08  ID:NL0NZsmD.net
前からこのスレみてるけど妙に攻撃的だったり見下したがる人おおいよね

うんこが臭いのはあたりまえなんだから我慢しろよ
コメント1件

843
デフォルトの名無しさん[]   投稿日:2016/05/27 20:34:01  ID:lJ+WMBHh.net
>842
いや流せよ

844
デフォルトの名無しさん[sage]   投稿日:2016/05/27 21:16:01  ID:3Xstiw/6.net

845
デフォルトの名無しさん[sage]   投稿日:2016/05/28 11:18:10  ID:LQ2fY6xq.net(2)
C++14/C++1z スレってどこ行ったの?

846
デフォルトの名無しさん[sage]   投稿日:2016/05/28 18:20:20  ID:24etQgqN.net
そんなスレとっくに落ちただろ

847
デフォルトの名無しさん[sage]   投稿日:2016/05/28 20:46:00  ID:LQ2fY6xq.net(2)
やっぱそうか……

848
gsag5y4[]   投稿日:2016/06/04 14:34:02  ID:2hWy5mYV.net(2)
HttpWebRequestについての質問です。

JavaScript実行後のHTMLを取得する方法を教えて下さい。

現在HttpWebRequestのGetResponseメソッドで特定URLのHTMLを取得するコードを実装しているのですが、
取得したHTMLから、さらに呼ばれているJavaScriptの処理で、そのHTMLの内容が変わります。
※innerHTML 等で

JavaScriptが処理された後のHTMLを自動的に生成する方法を教えて下さい!!
コメント1件

849
デフォルトの名無しさん[sage]   投稿日:2016/06/04 20:36:35  ID:d22dIUhO.net
マルチ

850
デフォルトの名無しさん[]   投稿日:2016/06/04 21:27:43  ID:2hWy5mYV.net(2)
WebBrowserクラスを継承したクラスを作成していて、
OnDocumentCompletedメソッドをオーバラーライドしたいのですが、
コンパイルエラーとなります!!

コンパイル警告/エラー無しで正しく継承する具体的なコーディング内容を教えて下さい。

■環境
Visual Studio 2012
C++ CLI

■ソース
public ref class ClassHTTPAuto : WebBrowser{

virtual void OnDocumentCompleted(WebBrowserDocumentCompletedEventArgs e) override = WebBrowser::OnDocumentCompleted{//★
}

};

■コンパイルエラー内容 ★の箇所
'System::Windows::Forms::WebBrowser::OnDocumentCompleted' : 明示的なオーバーライドの署名に一致するメンバーはありません。
'ClassHTTPAuto::OnDocumentCompleted' : 関数は 'System::Windows::Forms::WebBrowser::OnDocumentCompleted' をオーバーライドしません
'override' : オーバーライド指定子の使用法が不適切です。'ClassHTTPAuto::OnDocumentCompleted' は基本 ref クラス メソッドと一致しません
コメント1件

851
デフォルトの名無しさん[sage]   投稿日:2016/06/04 21:53:03  ID:8+lzdY1A.net

852
デフォルトの名無しさん[sage]   投稿日:2016/06/05 06:47:51  ID:3QH2XO7h.net
いや単にマルチでしょ。知恵袋にも同じのあった。ひどすぎる。

853
デフォルトの名無しさん[sage]   投稿日:2016/06/05 07:02:18  ID:VJ6TUrY4.net
錯乱とか認知力低下を引き起こす感染症は色々あるから否定はしない

854
デフォルトの名無しさん[sage]   投稿日:2016/06/05 08:50:47  ID:n7k60ruZ.net
C++ CLI

855
デフォルトの名無しさん[sage]   投稿日:2016/06/06 05:35:43  ID:Xo9HHLdt.net
オーバーフローしない程度のintのインクリメントや足し算はnorxcept?
最近何でもnoexcept付けようとしてる

856
デフォルトの名無しさん[sage]   投稿日:2016/06/06 06:51:13  ID:k9RTHU5H.net
オーバーフローもアンダーフローもそのまま走り続けて、
例外はそもそも投げられないだろ?
オーバーフローすることを前提にしたコードは、
未定義動作でコンパイラが勝手に何かするだけだよ

857
デフォルトの名無しさん[sage]   投稿日:2016/06/06 20:31:08  ID:kaGUGMa9e
オーバーフローって未定義動作だったの?
普通にオーバーフロー活用したコードがあるんだが、これまずいのか?

858
デフォルトの名無しさん[sage]   投稿日:2016/06/07 17:39:46  ID:kzeIv7/s2
char型関係は結構オーバーフローつかったテクニック多そう。

859
デフォルトの名無しさん[sage]   投稿日:2016/06/12 20:56:57  ID:XZVC5asv.net
自作ライブラリのインターフェース設計について質問させてください。
以下find_person_XXX関数のように、データベース等から何らかのデータを検索する関数を定義する際、どちらの定義の方が一般的でしょうか。

struct person {
int id;
char *name;
};

int find_person_A(int person_id, struct person **result);
int find_person_B(int person_id, struct person *result);

int main(void)
{
/* パターンA: 関数内でstruct personとnameを共にアロケートする
呼び出し側はアロケート不要 */
struct person *person_A;
int err_A = find_person_A(&person_A);

/* パターンB: 関数内でnameのみをアロケートする
struct personのアロケートは呼び出し側に任せる(この例ではスタックに確保) */
struct person person_B;
int err_B = find_person_B(&person_B);

return 0;
}

戻り値はエラーコードに使用したいので、検索結果を引数のポインタ越しに設定する仕組みにしたいと思います。
ただ、検索結果を表す構造体のアロケーションをライブラリ側でするのか、ユーザーに任せるのかで迷っています。
いくつか既存のライブラリのインターフェースを調べてみたのですが、上記のパターンAのように完全にライブラリ側でアロケートするものと、
パターンBのように、結果を表す構造体自体はユーザーにアロケートさせて、その結果に紐づくデータのみをライブラリ側でアロケートするものがあり、
どちらが一般的なのか分かりませんでした。
コメント1件

860
デフォルトの名無しさん[sage]   投稿日:2016/06/12 21:07:01  ID:sWm805v9.net
結果がひとつもしくは最大数をユーザが指定するならパターンBでもいいだろうけど
検索結果がいくつになるのかは検索してみないと分からないとかならパターンAじゃね?
開放もユーザにdeleteさせるんじゃなくてReleaseXXXとかFreeXXXとか作ってそれに渡すようにする

861
デフォルトの名無しさん[sage]   投稿日:2016/06/12 22:37:34  ID:CwU67sCL.net(2)
そもそもこういう場面でポインタなんて使うな

862
デフォルトの名無しさん[sage]   投稿日:2016/06/12 22:57:05  ID:CwU67sCL.net(2)
ああCの話かw古代人は大変だねw

863
デフォルトの名無しさん[sage]   投稿日:2016/06/13 08:15:27  ID:mDNzzuCL.net
>859
C言語なら、俺は win32api 方式を好んで使ってる。
破棄関数も提供して、中でアロケートする方法。
構築と破棄は同じレベルでやらないとバグりやすいのと、構造体の詳細な作りは隠したい、ってのを両立できるところが良かった。
コメント1件

864
デフォルトの名無しさん[sage]   投稿日:2016/06/14 03:39:40  ID:f6jk1oMA.net
>863
>構築と破棄は同じレベルでやらないとバグりやすい
いや,これをいろんなレベルにもってこれるところが,Cの使いやすいところではないか
malloc/free でオブジェクトへのポインタを扱う際に,敢えてラベルも供給して,あわせてチェックをかけるようにしてはいるが

865
デフォルトの名無しさん[sage]   投稿日:2016/06/14 09:08:16  ID:hbCOme/i.net
win32に限らず獲得解放を抽象化するものは多いね。fopen,fcloseとか
ただwin32は一回目は故意に失敗させて領域サイズを返して、領域確保してから再度呼ばせるような
気持ち悪いのも多い
コメント1件

866
デフォルトの名無しさん[sage]   投稿日:2016/06/14 22:17:06  ID:VJ/4c5wE.net
俺は統一的なインターフェースで確保と解放したい
リソースの種類ごとに個性豊かな確保と解放のペアが仲間に入るなんて面倒だ

867
デフォルトの名無しさん[sage]   投稿日:2016/06/14 22:36:52  ID:F7mhDIzv.net(2)
obj->lpVtbl->Release( (void *)obj );

868
デフォルトの名無しさん[sage]   投稿日:2016/06/14 23:24:06  ID:L7twjF32.net
>865
一回失敗っつーか最初に必要サイズ求めてそこにデータを返すやり方は、プロセス境界や
モジュール境界を越えたメモリブロックの受け渡しが可能であるという前提を置けない状況じゃ、
ごく普通に使われるAPIデザインだろ。OpenCLなんかもそうだな。

869
デフォルトの名無しさん[sage]   投稿日:2016/06/14 23:59:37  ID:F7mhDIzv.net(2)
Get〜〜〜Size() っていう必要なバッファ長を求める専用のAPIを作っても
本処理のAPIと引数がほとんど同じになるから、ええい、一緒くたにしてしまえ!ってことだろうね

870
デフォルトの名無しさん[sage]   投稿日:2016/06/15 09:52:22  ID:mXhxmNv3.net
wcsprintf「」

871
デフォルトの名無しさん[sage]   投稿日:2016/06/19 13:25:09  ID:ilDPPRX5p
C++開発でBoost実際に使ってる人いるの?
Boost重いし、標準ライブラリで十分だと思ってる。

872
デフォルトの名無しさん[sage]   投稿日:2016/06/21 17:57:16  ID:cl+vsLo5.net(2)
while文を何千回まわすごとに1回処理を行う,っていうプログラムを書いてるんですが
while文1回あたりにかかる時間って0.00001秒とか何らかの時間で固定されてるんでしょうか?
それともその時々のPCの気分次第で変わったりするんでしょうか?
コメント1件

873
デフォルトの名無しさん[sage]   投稿日:2016/06/21 18:03:42  ID:VIf3jitY.net(3)
>872
while文の中身はなんなんだよ

>while文1回あたりにかかる時間って0.00001秒とか何らかの時間で固定されてるんでしょうか?
固定はされていない
PCの処理能力に影響されるしコンパイラの最適化にも影響される

単純に数ミリ秒〜ごとに一回処理を行うんなら Sleep()入れれば良いだけでは?
コメント1件

874
デフォルトの名無しさん[]   投稿日:2016/06/21 18:24:26  ID:cl+vsLo5.net(2)
>873
ありがとうございます.
学校の授業で,while文を何回か回す毎に1回他のPCに対してデータを送信して
ネットワークの転送速度を調べる,みたいなプログラムを配布されたんですけど
while文を回す回数は引数で変化させていく感じになってたんです.
もしwhileの1回の処理にかかる時間が一定なら,送信されるデータと引数の間の関係は比例関係になるんでは,と思ったんですが
実験データはそうならなかったんですよね.なので,配布されたプログラムを弄るわけにはいかないのでSleepとかは使えないんです.
PCの処理能力やコンパイラに影響されるってことは
同じPCで同じコンパイラを使ったらwhile文1回あたりの時間は同じだったりするんですかね?
同じPCでもやっぱりその時々の気分次第で変わるってことでしょうか.
コメント2件

875
デフォルトの名無しさん[sage]   投稿日:2016/06/21 18:40:29  ID:kCDz8ExS.net
PCの処理能力やコンパイラの最適化やOSの種類及び設定や他のプロセスの影響を受ける

876
デフォルトの名無しさん[sage]   投稿日:2016/06/21 18:49:55  ID:0KtWTAet.net
そのwhile文をうpした方が

877
デフォルトの名無しさん[sage]   投稿日:2016/06/21 19:08:38  ID:VIf3jitY.net(3)
>874
>PCの処理能力やコンパイラに影響されるってことは
>同じPCで同じコンパイラを使ったらwhile文1回あたりの時間は同じだったりするんですかね?
同じPCでも他に動いているプログラムにも影響されるのでなんとも言えない
自分は他にソフトウェア使ってないと思っていてもOS自体が様々なプログラムを動かしている
ただ影響すると言っても頻繁に大きく差が出るというものではないので授業では考慮しない感じなのだろう

というかプログラムの授業で「配布されたプログラムを弄るわけにはいかない」ならもう何も出来ないんじゃね?
宿題かどうかは分からんけどその授業でそのプログラムを使って何を求められているわけ?

878
デフォルトの名無しさん[sage]   投稿日:2016/06/21 19:34:06  ID:VIf3jitY.net(3)
>874
>ネットワークの転送速度を
速度というのは単位時間当たりに何バイト(何ビット)データを送れたかというもの

>while文を回す回数は引数で変化させていく感じになってたんです.
これは「全体でX回while文を回し、Y回に一回データを送信する」と言うもののうち
XをさすのかYをさすのかどっち?

仮にXをさすなら「whileの一定回ループ(=Yは固定)につき一定のデータサイズを転送」だから転送速度は比例しない=ほぼ一定。
※ただしループ全体が“単位時間”以内に完結するものだった場合、観測する上で「比例する」が正しい(観測の方法として正しいとは思えないが)。
そしてもしYをさすなら「Yが増えるほど1秒間に送る回数が減る」ので転送速度は反比例する。

と思う。

879
デフォルトの名無しさん[sage]   投稿日:2016/06/22 03:41:09  ID:tA6VaAaS.net(3)
int i, loop = atoi(argv[1]);
for(i = 0; i < 1000; ++i)
{
int j = 0;
while(j < loop) ++j; //←(1)
send_proc();
}

みたいなプログラムじゃないだろうな?
これだと(1)のループは最適化で完全に消える可能性あるぞ

880
デフォルトの名無しさん[sage]   投稿日:2016/06/22 04:24:33  ID:jdKVcriH.net
例えば、OSが動かしている、他のプロセスが100あって、
その中に、君のプロセスよりも優先度が高いプロセスがあって、
それがインターネット回線などの資源をロックすれば、

優先度の低いプロセスは、資源が開放されるまで、待たされるため、
様々な外部環境に影響を受ける

881
デフォルトの名無しさん[sage]   投稿日:2016/06/22 08:47:41  ID:0rcNr1i5.net
static int a = 0;
のaはどのような環境でも、いつでも同じアドレスなのですか?
コメント1件

882
デフォルトの名無しさん[sage]   投稿日:2016/06/22 10:28:48  ID:MRu4Wqea.net
>881
環境によってアドレスは同じではない

883
デフォルトの名無しさん[sage]   投稿日:2016/06/22 13:04:52  ID:206G0i1n.net(3)
同じ環境でも起動するたびに違うことだってある
コメント1件

884
デフォルトの名無しさん[sage]   投稿日:2016/06/22 14:45:36  ID:tA6VaAaS.net(3)
>883
i386系のプロテクトモードで同じ実行環境なら、実アドレスは違っても
論理アドレスは完全同一じゃまいか?
コメント2件

885
デフォルトの名無しさん[sage]   投稿日:2016/06/22 14:49:26  ID:206G0i1n.net(3)
>884
実アドレスがプロセス毎に違うじゃんって話じゃなくて?
コメント1件

886
デフォルトの名無しさん[sage]   投稿日:2016/06/22 14:55:36  ID:tA6VaAaS.net(3)
>885
いや、どっちの話かははっきり知らんけど、C/C++普通に書く時って
実アドレス意識しない(あるいは扱えない)のが普通かと
コメント1件

887
デフォルトの名無しさん[sage]   投稿日:2016/06/22 15:10:27  ID:206G0i1n.net(3)
>886
うむ、全く同意
組み込みで直接触らざるを得ないとか変な事情が
ない限り
アドレスとか全然意識したことないし
変に触ると保護違反になるから触ろうとも思わないしね

888
デフォルトの名無しさん[sage]   投稿日:2016/06/22 15:24:52  ID:1owlsp3d.net
通じているのか通じてないのか

889
デフォルトの名無しさん[sage]   投稿日:2016/06/22 15:38:46  ID:xXWwCG6b.net
立ち位置は同じでも、
違う方向を見て、自分のおかれた状況を説明してるようだ

890
デフォルトの名無しさん[sage]   投稿日:2016/06/22 16:30:19  ID:zcuo6YLx.net
>884
ASLRというセキュリティ分野の技術がある


891
デフォルトの名無しさん[]   投稿日:2016/06/25 15:59:35  ID:PMddZNv3.net
関数コールバックでコールバッククラスを宣言して関数を登録するにはどうすればいいでしょうか?
コメント1件

892
デフォルトの名無しさん[sage]   投稿日:2016/06/25 16:55:07  ID:5bDhhxrt.net
>891
せめて、どういう仕様の関数に渡したいのかをぷりーず。

893
デフォルトの名無しさん[sage]   投稿日:2016/06/26 23:32:28  ID:vm1KBNYW.net
VS2013でデバッグの停止ボタン押した時って
WM_CLOSEもWM_DESTROYも実行されないみたいなんですが、
停止ボタン押した時はウィンドウメッセージは流れてこないのでしょうか?

894
デフォルトの名無しさん[sage]   投稿日:2016/06/26 23:51:43  ID:Pdgj+EY0.net
飛んでくるわけないだろう
コメント1件

895
デフォルトの名無しさん[sage]   投稿日:2016/06/27 21:27:21  ID:5p9RfYxG4
そういうほのぼのとした質問嫌いじゃないぞ

896
デフォルトの名無しさん[sage]   投稿日:2016/06/27 21:49:46  ID:VebqeWPm.net
>894
それはなぜ?
飛んできてないのになぜWindowが閉じるの?
コメント1件

897
デフォルトの名無しさん[sage]   投稿日:2016/06/27 23:15:00  ID:ojCp4Laa.net
メッセージが送信される前にインスタンスが無くなってるから

898
デフォルトの名無しさん[sage]   投稿日:2016/06/28 05:49:24  ID:OvBtnOuN.net
WM_CLOSEなどのメッセージは正常終了する際の手順を順に行うために送られる
停止ボタンではTerminateProcessでプログラムが強制終了される
正常終了の手順は必要では無い
コメント1件

899
デフォルトの名無しさん[sage]   投稿日:2016/06/28 12:19:07  ID:S/r3XE9J.net
>898
強制終了されるとなぜWindowが閉じるんですか?
コメント1件

900
デフォルトの名無しさん[sage]   投稿日:2016/06/28 12:36:42  ID:Zn9flS9b.net
Windowsがそういう仕様だから

901
デフォルトの名無しさん[sage]   投稿日:2016/06/28 12:42:55  ID:NUWWCRCh.net
>899
windowsのos内部でTerminateProcessがどう実装されているかについて知りたいのか?だったら

Win32API質問箱 Build122

のスレにでも聞いてくれ
普通はそんなos内部の話なんて意識する必要なく、そうゆうもんだと割りきるものだが興味があるなら自分で調べてくれ

902
デフォルトの名無しさん[]   投稿日:2016/07/02 13:50:34  ID:xr6iRJSv.net(2)
急遽C++使うことになったんだけど独学のいい教材ないですかね?
C言語なら「学校ではJavaとしか教わってません」レベルの新人に初歩的なことを教えられる程度にはできるつもり。
OOPというのは一応C#でクラスと、クラスの継承とメソッドのオーバーライドとオーバーロードぐらいは理解できてる(はず)

つまずいてるのがテンプレート関数と、メソッドのコールバック関数化。
独自フレームワークのソースメンテしろとか言われたんだけど、それを構築した会社が既に解散しててドキュメント類も不備っててソースから追いかけてくしかないんだけど、
export template<templatename T1,templatename T2>int func(T1* obj,void(T2::*metod)(int));
見たいな感じで定義されてるテンプレートの機能拡張が必要なんだけど、テンプレートなのに実体がない(exportされてるあたりでお察しください状態www)とか酷い状態なのよ。
で、C言語しかできません!のおっさんが仕事の片手間にC++覚えられそうな(急ぎ必要なのはテンプレートと面罵変数のコールバック周り)判りやすい教材、あったら教えてもらえませんか?

書籍類でもWebコンテンツでもどちらでもかまわないので。
コメント3件

903
891[]   投稿日:2016/07/02 13:54:18  ID:xr6iRJSv.net(2)
>902
「面罵変数」ってなんだよぉ・・・
「メンバー関数」です。

補足すると、同じテンプレートを呼んで「class1::CallBak」と「class2::CallBak」どちらもコールバックしたいという実装です。
class1もclass2も同じクラスを継承してる前提で、CallBak()自体はclass1とclass2それぞれで実装されてるpublicの関数です。

904
デフォルトの名無しさん[sage]   投稿日:2016/07/02 14:18:44  ID:9rtmvwfu.net(2)
>896
定年退職と即時解雇の違いだよ

905
デフォルトの名無しさん[sage]   投稿日:2016/07/02 14:25:07  ID:9rtmvwfu.net(2)
>902
やりたいことがわからんけど案外、
C# ならイベントのデリゲート書いて一丁上がり♪ のケースじゃないの?
コメント1件

906
デフォルトの名無しさん[sage]   投稿日:2016/07/02 14:59:39  ID:CZjSynQU.net(2)
>902
exportもtemplatenameもC++のキーワードじゃない
「僕が考えたかっこいい実装」なんだろうね
御愁傷さま… としか
コメント1件

907
デフォルトの名無しさん[]   投稿日:2016/07/02 15:29:14  ID:rm6TBDFW.net(2)
>905
C#で書くんじゃなくて、C++で書かれてるのを改造しなきゃならんのですよ。
大きく躓いたのが「テンプレートってなんじゃぁ!」ってところで、ネットで調べても良く判らんし。
作業できる場所は外部ネットつなげられないからプリントアウトするなり書籍なりでもちこまんとダメなんで・・・

>906
あ〜・・・すまん。typenameだった。
ソースいじれる環境から外部のネットにつなげられないんで「記憶コピー」だったから。

テンプレート関数はexportで定義と実体を分けられるでしょ?
ロジック書いたあとに実体化しないとダメっぽいけど(とりあえずそこまではぐぐれた・・・

908
デフォルトの名無しさん[sage]   投稿日:2016/07/02 15:35:37  ID:CZjSynQU.net(2)
ああ、すまん exportはc++11の新しい機能か

909
デフォルトの名無しさん[sage]   投稿日:2016/07/02 16:46:37  ID:LWusTCIC.net
c++が現場を困らせる典型だ…

910
デフォルトの名無しさん[sage]   投稿日:2016/07/02 19:04:01  ID:CPkPc7f9.net
exportは実装されたコンパイラーほとんどないしc++11からは逆に規格から取り除かれてるよ

911
ID:xr6iRJSv[]   投稿日:2016/07/02 20:10:00  ID:rm6TBDFW.net(2)
exportって廃止になったの?
難易度さらにアップなのかな。
既存のソースとライブラリでリンクまで行けたから少し弄るだけですむかと思ってた。

急がば回れ、で基礎からやった方が良さそうね。
密林でオライリとかの文法書当たってみますわ。

912
デフォルトの名無しさん[sage]   投稿日:2016/07/02 20:41:25  ID:no/g4eo0.net
林 晴比古・柴田望洋あたりで、「速習〜」みたいな本は無いか?
コメント1件

913
デフォルトの名無しさん[sage]   投稿日:2016/07/02 22:27:23  ID:22sSoOcK.net
プログラミング初心者の頃にstlとboost眺めて勉強したなぁ懐かしい
天ぷらライブラリ書けるようになるまで半年かかったよ
コメント1件

914
uy ◆e6.oHu1j.o []   投稿日:2016/07/03 17:22:48  ID:VJyaYSRj.net
>913
IQ低そう
コメント1件

915
デフォルトの名無しさん[sage]   投稿日:2016/07/04 21:04:46  ID:/A9poSsO.net

916
デフォルトの名無しさん[sage]   投稿日:2016/07/04 23:36:10  ID:usjNXWI/.net
>914
確かに140しかないけどさ

917
デフォルトの名無しさん[sage]   投稿日:2016/07/05 00:46:56  ID:/sOVcq36.net
140ってww
そんなやつが2chやるわけないだろww

918
デフォルトの名無しさん[sage]   投稿日:2016/07/05 15:37:47  ID:THFzv4qe.net
身長の話じゃねーの?

919
デフォルトの名無しさん[sage]   投稿日:2016/07/05 22:13:05  ID:iT1PYIae.net
チン長かと

920
デフォルトの名無しさん[sage]   投稿日:2016/07/06 08:34:12  ID:7Bpki8tS.net
単位はmmか

921
デフォルトの名無しさん[sage]   投稿日:2016/07/11 22:20:47  ID:2eMs4C3s.net
お前ら的にはアポロ11号のソースコードどうなの?

922
デフォルトの名無しさん[sage]   投稿日:2016/07/12 00:30:52  ID:8XYiu/ca.net(2)
アセンブラをソースと言っていいのかなって感じ

923
デフォルトの名無しさん[sage]   投稿日:2016/07/12 03:46:16  ID:N99QS+PT.net
機械語はコード、それ以外はソース
2005年あたりから増えてきた、高級言語のソースをコードと呼ぶ風潮はうんこだと思うぜ
コメント2件

924
デフォルトの名無しさん[sage]   投稿日:2016/07/12 04:41:11  ID:Vf+ZIi05.net
機械語は実行コード
それ以外はソースコード

925
デフォルトの名無しさん[sage]   投稿日:2016/07/12 07:42:05  ID:8XYiu/ca.net(2)
機械語はバイナリじゃね

926
デフォルトの名無しさん[sage]   投稿日:2016/07/12 09:54:08  ID:j6bBSSGB.net(2)
>923
> 高級言語のソースをコードと呼ぶ風潮はうんこ
ソースはソースコードの略だからうんこになるほどの問題は孕んでいないと思う。
http://e-words.jp/w/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%...
> 機械語はコード、それ以外はソース
バイナリ(やオブジェクト)とソースという対比で呼ぶべきでは?
コメント1件

927
デフォルトの名無しさん[sage]   投稿日:2016/07/12 11:51:57  ID:sw++mtzw.net
>926
そりゃ正式名はソースコードだけど、それを略してコードと呼ぶと意味をなさなくなるんだよ
とくに、仮想マシンで動くようなJAVAコード、.Netコードってへっぽこプログラマーが言うじゃん? よく聞いてみると以下略

>バイナリ
バイナリ⊃機械語 だね

スレ違いなので雑談スレででも
コメント3件


928
デフォルトの名無しさん[sage]   投稿日:2016/07/12 12:01:19  ID:j6bBSSGB.net(2)
>927
すまない。915は撤回するわ。

929
デフォルトの名無しさん[sage]   投稿日:2016/07/12 13:12:03  ID:bfn2nev7.net
>927
普通に英語なんだが

coderとは言うけどsourcerとは言わんぞ

930
デフォルトの名無しさん[sage]   投稿日:2016/07/12 13:24:32  ID:M7aV+wc6.net
機械語の源(source)となる符号(code)が元の意味だろうから
機械語はコードでしかないが他はソースでもコードでもあるでしょ
コメント1件

931
デフォルトの名無しさん[sage]   投稿日:2016/07/12 15:51:05  ID:x9hMoHCp.net
コーディング規約とも言うしな

932
デフォルトの名無しさん[sage]   投稿日:2016/07/12 17:21:10  ID:aYUQCZhN.net(2)
>923
機械語(machine code)だってプログラム言語のひとつ(machine language)
要するに高水準言語→低水準言語、つまり source code から machine code へ移り変わる中ですべての状態がcodeだと思うよ

933
デフォルトの名無しさん[sage]   投稿日:2016/07/12 17:23:58  ID:aYUQCZhN.net(2)
「要するに」って要らなかったな

高水準言語→低水準言語、つまり source code から machine code へ移り変わる中ですべての状態がcodeだと思うよ

に訂正

934
デフォルトの名無しさん[sage]   投稿日:2016/07/12 17:57:56  ID:pGmCQdwG5
いい機会だから昔から疑問に思ってることを質問したい。
C言語はソースコードをアセンブラに変換するもので、
コンパイル後の実行ファイルはアセンブラっていう認識で合ってる?

935
デフォルトの名無しさん[sage]   投稿日:2016/07/12 19:10:50  ID:OhKVznsb.net
>927
逆だよ。ソースじゃ通じないがコードなら通じる

936
デフォルトの名無しさん[sage]   投稿日:2016/07/13 01:36:17  ID:/AeOD/09.net
>930
機械語の源じゃなくて、ソフトウェアの源じゃないかな
中間コードはソースとは言わないでしょ

937
デフォルトの名無しさん[sage]   投稿日:2016/07/28 11:08:15  ID:UbVdigRT.net(4)
Cを一通り終えてC++を勉強してます。
仮想関数という機能の意義というか、利点が分かりません。

そもそも親と違う処理をしたいから、派生クラスで関数を定義しなおすワケですよね?
関数の名前を変えれば済む話、というか、変えるべきなのでは?

http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/virtua...
例で言えば、最初から

class Clock
{
  void Action_beep()
  {
    // 時計がピーピー
  }
};

class LaughClock : public Clock
{
public:
  void Action_laugh()
  {
    // 時計がケタケタ
  }
};

と定義しておいて、笑いたければ baby.Action_laugh(); で事足りると思うのです。

素人の目からは、異なる処理を行う関数に同じ名前を付けることは、百害あって一利無し、バグを誘発することくらいしか意味がないように思えます。
このサイトでも 「ここで注意していただきたいのは…」 と書かれてますが、注意が必要になったのは、異なる処理に同じ関数名をつけたことが原因ですよね?
この欠点を補えるほどの利点て、何かありますか?
コメント2件

938
デフォルトの名無しさん[sage]   投稿日:2016/07/28 12:07:53  ID:sTpn4H8D.net(2)
>937
たとえば fwrite() にしたって、呼び出した先では違う処理が動くというのはわかるよな?
fwrite_usbmemoryfile() とか、fwrite_ssdfile() なんてものがあったらいやすぎるだろう。
コメント1件

939
デフォルトの名無しさん[sage]   投稿日:2016/07/28 12:18:39  ID:6luxzfPz.net
>937
例えば、アラーム機能を考えると
「設定された時間にビープ」と「設定された時間に笑わせる」と2つの機能を実装するか
「設定された時間に時計の種類を見てビープまたは笑わせる」って機能を実装することになるよね

仮想関数なら「設定された時間に鳴らす」って処理を書いておけば
「鳴らす」部分をビープやら笑わせる機能に差し替えることができる
ちゃんと書いとけば「やっぱ振動で」とかそういうのもアラーム機能は修正しなくて済む
コメント1件

940
デフォルトの名無しさん[sage]   投稿日:2016/07/28 13:17:17  ID:49cPLP5e.net(3)
という机上の空論で作られたのが仮想関数です
あまり深く考えず
何かコールバックさせたいときに関数ポインタを隠蔽するために使う
と理解しておけば十分であり、問題は起きないです
少なくとも関数ポインタを使うよりは構文になっているという意味で安全
必要でない場合は使わなくてよいです
というかなるべく使わないように書くのがテクニックともいえます
制御フローはトップダウンかつ静的になるように心がけましょう
コメント2件

941
デフォルトの名無しさん[sage]   投稿日:2016/07/28 13:24:19  ID:UbVdigRT.net(4)
皆様、レスありがとうございます。
せっかく解説してくださったのに、まだ理解できないようです。出来るの悪い子ですみませんorz

>938
私の技量ではうまく言い表せないのですが‥
fwriteはバッファの内容をファイルに書き出すという動作において、プログラムからみれば
書き出し先がUSDでもSSDでも区別が必要ないと思います。
なので単一のfwriteでもOKかな‥と。
※強いて意識するのはfopen時だけですよね。
Action()はプログラムから処理内容を区別するので、本質が違うような気がします。

>939
この「差し替え」は機能として理解できるのですが、
関数名から処理内容が一意に決まらなくなる‥という欠点が発生しますよね。
それが利点としてしっくりこないような…
それともオブジェクト名まで含めて判断する訓練を積めば克服できるものですかね?
先の例だとclock.Action()ならビープ、 baby.Action()なら笑う、みたいに。
Action()の処理内容が直感的に分かるオブジェクト名をつけないと、いちいち
クラス定義まで見返す手間がかえって増えそうな…

>940
> という机上の空論で作られたのが仮想関数です
そう言われれば納得できるようなw

> 何かコールバックさせたいときに関数ポインタを隠蔽するために使う
> と理解しておけば十分であり、問題は起きないです
すみません。
初心者にはハードルが高いご解説なため、これからじっくり調べて考えて理解します…
コメント1件

942
929[sage]   投稿日:2016/07/28 13:38:39  ID:UbVdigRT.net(4)
色々書きミスしてました。申し訳ありません。

誤: 出来るの悪い子ですみませんorz
正: 出来の悪い子ですみませんorz

誤: 書き出し先がUSDでもSSDでも区別が必要ないと思います。
正: 書き出し先がUSBメモリでもSSDでも区別が必要ないと思います。
コメント2件

943
デフォルトの名無しさん[sage]   投稿日:2016/07/28 13:56:36  ID:ini9YyYv.net(2)
>942
> クラス定義まで見返す手間がかえって増えそうな…
ちゃうねん
自分で派生クラス作るんやから見返す必要ないねん

蛇口クラスがあって「水圧管理」と「排水機能」を持ってるとするで
基底クラスが上の2つを持ってるわけやな
基本は水で出すとする場合基底クラスのActionが水や
けどお湯が欲しくなった場合蛇口は1個しかないから
派生クラスのActionでお湯を出すんや

この場合排水する目的は同じで
共通する機能を基底クラスが持ってるわけや
何が出てくるかが違うわけやから何が出てくるのかを自分で定義する
酒好きならシャンパン出してもええねん

944
デフォルトの名無しさん[sage]   投稿日:2016/07/28 14:01:51  ID:s42UkHaU.net
>先の例だとclock.Action()ならビープ、 baby.Action()なら笑う、みたいに。
>Action()の処理内容が直感的に分かるオブジェクト名をつけないと、いちいち
>クラス定義まで見返す手間がかえって増えそうな…
baby は LaughClockクラスのオブジェクトだよね?
LaughClockクラスのAction()が「笑う」なのは、そんなに変?
変数名の付け方が妥当かどうかは仮想関数とオーバーライドの話とは関係ないけど
(関数名の話がオブジェクト名の話にすり替わってる)

945
デフォルトの名無しさん[sage]   投稿日:2016/07/28 14:01:53  ID:ini9YyYv.net(2)
>942
関数の名前を変えたのを派生クラスで作ってしまったら
水専用の蛇口からお湯が出たりして苦情くるで

946
デフォルトの名無しさん[sage]   投稿日:2016/07/28 14:21:54  ID:VDwuXaep.net(2)
机上の空論ってw
C#にもJavaにもあるinterfaceまで空論扱いする勢いだな

947
デフォルトの名無しさん[sage]   投稿日:2016/07/28 14:27:37  ID:VDwuXaep.net(2)
>941
>関数名から処理内容が一意に決まらなくなる‥という欠点が発生しますよね。
一意に決めたくないから仮想関数という仕組みがあるんだよ
それが何の役に立つのかは実務でソフト組んでれば分かるよ

948
デフォルトの名無しさん[sage]   投稿日:2016/07/28 14:29:27  ID:DlRIQQvn.net
>940
>制御フローはトップダウンかつ静的になるように心がけましょう

動的な制御フローってあるん?
コメント1件

949
デフォルトの名無しさん[sage]   投稿日:2016/07/28 14:39:37  ID:sTpn4H8D.net(2)
>948
AIは全体で見れば動的と呼んでもいいんじゃ無いか?
同じ入力でも1回目と2回目じゃ結果が異なる可能性もある

950
デフォルトの名無しさん[sage]   投稿日:2016/07/28 15:27:25  ID:49cPLP5e.net(3)
彼は自分で言っているように初心者なんだろうけど
初心者ゆえにプログラミングの基本的なスタイルを守っていて
それゆえに仮想関数の必要性がわからないのだろう
つまり、関数は常に必要に応じて自分で呼び出し
プログラミングは自分で流れを作っていくものだと
考えているのだろう
その限りにおいては、仮想関数の必要性は無いかもしれない
処理が分岐するならswitchすればよいだろう、位に考えているだろう
その初心は忘れないほうが良いと思うが

一度何かのフレームワークを触ってみるとよい
特にラムダがなかった時代の昔のフレームワークは全部仮想関数で解決しようとしていた
猫も杓子も仮想関数で多態が流行った時代があった
君の抜群のセンスなら非常に不毛であると感じるかもしれないが
同時に仮想関数が必要であった理由もわかるはず

そのうえで、自分で書く部分(今時プログラムを一から全部書く人はいない)に
俺俺フレームワークを構築するか、しないかは、よく考える必要がある
場面場面で
コメント1件

951
デフォルトの名無しさん[sage]   投稿日:2016/07/28 16:51:03  ID:UbVdigRT.net(4)
>950
> 一度何かのフレームワークを触ってみるとよい
この一言!
心の琴線に触れる? とはまさにこのことで、分かりました!
(というか、分かりかけてきました!)

たしかにフルスクラッチでプログラムを作成する状況なら仮想関数を
使わなくても済みそうで、「なぜ重複しない関数名で最初からクラスを設計しないんだろう?」と
疑問だったのですが、それがままならない開発環境もある、ってことですね。
正直、調べても、フレームワークの理解はアバウトなんですが、
それでも関数オーバーライドが必須となりそうな状況は納得できました。

今日を2chで最良の日と心に刻みつけておきます。ありがとうございました。
コメント1件

952
デフォルトの名無しさん[sage]   投稿日:2016/07/28 17:49:20  ID:xeepOtn0.net
>951
フルスクラッチか既存のライブラリやフレームワークを利用するかというのは重要じゃない
インターフェースをどのように設計するかという問題

fwriteの例でいうとFILEという抽象化されたオブジェクトに対してfwriteを実行するだけで
オブジェクトの実態がexFAT上のファイルを扱うクラスのオブジェクトなのかNTFSなのか
あるいはもっと別のext4とかZFSとか呼び側が気にする必要が無い

953
デフォルトの名無しさん[sage]   投稿日:2016/07/28 18:54:53  ID:49cPLP5e.net(3)
それは彼の今の認識ではswitchすりゃ良いじゃんってなるんだよ

実際に何かのフレームワークを触って、どういう風に仮想関数が使われているか
見て学んだほうが早いだろう
フレームワークのコールバックが関数ポインタかデリゲートかラムダか仮想関数か
何の方式を採用している分からないが、C++のフレームワークなら大概仮想関数だろう
特にフレームワークの場合はフレームワークのメインルーチンを勝手に変更できないという
制限があるので、(ソースコードすらない場合もある)
呼び出し元のコードを変えずに、とか、呼び出し元のコードを一本化して、とか
重要なキーワードを肌で感じることができるだろう
switchじゃどうにもならないということも、すぐに理解できるはず
あとは自分のプログラムに応用するかしないか、本人次第
一つ言えることは、概念上の問題より、運用上の問題のほうが大事

猫と犬は哺乳類クラスで猫はニャーと鳴き犬はワンと鳴く、とか言ったって
これは理解できている人にしかわからない説明なんだよ

954
デフォルトの名無しさん[sage]   投稿日:2016/07/28 21:55:49  ID:YFw1hd80.net
エントリポイントとなる関数を用意して
その中でifなり何なりで分岐させても、抽象化の目的としては達成されるしなー

955
デフォルトの名無しさん[sage]   投稿日:2016/07/29 06:52:14  ID:S0Kp402r.net(2)
フレームワーク触るのもいいけど、フルスクラッチの場合も役に立つ
例えばウィンドウシステムの実装
大抵のウィンドウシステムでは、ボタンもダイアログもテキストエリアも同じウィンドウクラスから導出されている
なぜなら、マウスで触れる矩形領域の機能としてほとんど同じだからだ
ただ、それぞれクリックに対する反応とか表示内容なんかでちょっと違う部分が各部品ごとに山のようにあるので
違う部分だけメソッド(関数)単位で実装してオーバーライドする
もし仮想関数を使わずウィンドウシステムを書くことになったら、各部品のちょっと違う部分だけのために部品クラスをコピペで量産しないといけない
コピペで量産したクラスの弊害は、また別の話になるけど

ところでC++関係なくない?
単純にオブジェクト指向の質問じゃないのか

956
デフォルトの名無しさん[sage]   投稿日:2016/07/29 07:43:09  ID:S0Kp402r.net(2)
見直してたら気付いた
>もし仮想関数を使わずウィンドウシステムを書くことになったら、各部品のちょっと違う部分だけのために部品クラスをコピペで量産しないといけない
訂正:
各部品のちょっと違う部分だけのためにフル機能の部品クラスをコピペで量産しないといけない

要は差分だけ書けば機能を実現するという目的にも仮想関数は使えるってこった
差分コーディングでググれば色々見られる


957
デフォルトの名無しさん[sage]   投稿日:2016/07/29 11:20:59  ID:/QPn21bb.net
オブジェクト指向の話どころか、抽象化する意味を聞かれてるのでは?

958
デフォルトの名無しさん[sage]   投稿日:2016/07/29 16:20:12  ID:QKf643uU.net
純粋仮想関数により抽象化したクラスはデザインパターンで使う

959
デフォルトの名無しさん[sage]   投稿日:2016/08/06 21:21:09  ID:CIMwAPv1.net
class A {
public:
 funcA();
}
class B {
private
 A a;
}
class C {
private
 B b;
public:
 funcC();
};
この状態でfuncCからfuncAを呼ぶには
class BにpublicなfuncBを追加してfuncBからfuncAを呼ぶようにする(funcC内でb.funcB)
これ以外にスマートなやり方って何かな?
変数はprivate、関数は必要があればpublicやprotectedの方がいいよね?

960
デフォルトの名無しさん[sage]   投稿日:2016/08/06 21:25:55  ID:NvZG+ERe.net

961
デフォルトの名無しさん[sage]   投稿日:2016/08/06 21:34:07  ID:ywdq7rGj.net
ものによってはstaticとかでも行けるかも?

まあ、スマートっていう意味では、
CからAを触らせないのが一番スマートかもしれんけどね

962
デフォルトの名無しさん[sage]   投稿日:2016/08/06 22:03:23  ID:wD7Fq13i.net
> まあ、スマートっていう意味では、
> CからAを触らせないのが一番スマートかもしれんけどね
確かにこれが一番スマートやな

他のやり方としてはBのaをprotectedにしてCはBをprivate継承するとかな

963
デフォルトの名無しさん[sage]   投稿日:2016/08/07 08:40:15  ID:zBYc/KkC.net
>960-9620
ありがとう!

964
デフォルトの名無しさん[sage]   投稿日:2016/08/10 19:58:07  ID:oJSizC1Q.net(2)
func()の中でswitch()で分岐してる状態で
case 1: 何かやる break;
case 2: 何かやる break;
func()を書き換えずに何かやる部分をプロジェクトによって変えるような事はできる?
コメント1件

965
デフォルトの名無しさん[sage]   投稿日:2016/08/10 20:29:50  ID:FPLZcb1n.net
関数ポインタ仮想関数ラムダ
コメント1件

966
デフォルトの名無しさん[sage]   投稿日:2016/08/10 20:31:27  ID:DNEsHj4R.net
プロジェクトごとに条件を定義して #define, #ifdef, #ifndef, #else, #endif などで切り替える
コメント1件

967
デフォルトの名無しさん[sage]   投稿日:2016/08/10 21:24:43  ID:oJSizC1Q.net(2)
>965
色々あるんだね

>966
プロジェクトが増えるとfuncも書き換えないといけない

968
デフォルトの名無しさん[sage]   投稿日:2016/08/11 00:06:31  ID:FqLT9pgZ.net
case 1: func_case1(); break;
case 2: func_case2(); break;
...
とやってプロジェクトごとに異なるfunc_caseXの定義を書けばいいんでは
コメント2件

969
デフォルトの名無しさん[sage]   投稿日:2016/08/11 05:28:06  ID:Zd798CT0.net(4)
>968
> func()を書き換えずに
コメント2件

970
デフォルトの名無しさん[sage]   投稿日:2016/08/11 05:29:47  ID:Zd798CT0.net(4)
>969
って事だから競合起こさないようにした方がよくね?

971
デフォルトの名無しさん[sage]   投稿日:2016/08/11 10:07:08  ID:fF/OSXWkL
たぶんマクロしか無いよ。
#ifdef PROJECT_A
void func() { a... }
#else
void func() { b... }
#endif

好きな方使えばいい
#ifdef PROJECT_A
#define func func_project_a;
#else
#define func func_project_b;
#endif

972
デフォルトの名無しさん[sage]   投稿日:2016/08/11 10:12:33  ID:xfJcHpdP.net(2)
funcを書き換えずにってのは一度書いたfunc自体のソースだけはどのプロジェクトでも書き換えずに使うって意味じゃないのか

973
デフォルトの名無しさん[sage]   投稿日:2016/08/11 11:20:31  ID:Zd798CT0.net(4)
プロジェクト1
 func()
プロジェクト2
 func()
ここまでok

プロジェクト3
 プロジェクト1
  func()->func_case1()
 プロジェクト2
  func()->func_case1()
どっち呼ぶんや?
コメント4件

974
デフォルトの名無しさん[sage]   投稿日:2016/08/11 11:22:12  ID:ZnWKVyt1.net
そういう意味だともうよ
だから、関数ポインタ仮想関数ラムダ関数オブジェクト
まぁこれはC++での呼び名だが
何らかの方法でコードブロックをコールバックしてもらうしかないと思うよ
一般的によく行われることだし問題ないっしょ

975
デフォルトの名無しさん[sage]   投稿日:2016/08/11 13:19:34  ID:xfJcHpdP.net(2)
>973
そのプロジェクト3でfunc()を呼んだらプロジェクト1と2のどっちのfunc()を呼ぶんだ?
コメント1件

976
デフォルトの名無しさん[sage]   投稿日:2016/08/11 14:27:00  ID:Zd798CT0.net(4)
>975
func自体は変更無しなんだから問題じゃなくね?
コメント1件

977
デフォルトの名無しさん[sage]   投稿日:2016/08/11 21:21:58  ID:TQheNK/m.net
>973
そのプロジェクトってなんだ?

978
デフォルトの名無しさん[sage]   投稿日:2016/08/11 21:39:36  ID:GJmRLzEl.net
>976
プロジェクト1とプロジェクト2でfuncの(最終的な)動作は変わるんだろ
その両方の動作を使いたいからプロジェクト3ではプロジェクト1,2両方を取り込んでいるんであって
そうしたからには使いたい動作にあわせて意図的に呼び分けができないとだめだろ
コメント2件

979
デフォルトの名無しさん[sage]   投稿日:2016/08/12 01:02:36  ID:tIcwp4Gc.net(2)
なんで両方の動作を使いたいって話になってるんだ?

プロジェクト1でfunc()を呼び出したらプロジェクト1のfunc_caseXXX()が呼ばれる
プロジェクト2でfunc()を呼び出したらプロジェクト2のfunc_caseXXX()が呼ばれる
プロジェクト3でfunc()を呼び出したらプロジェクト3のfunc_caseXXX()が呼ばれる
プロジェクトがいくら増えてもfunc()の中身自体は修正を必要としない

ということがやりたいんだろ?>964

980
デフォルトの名無しさん[sage]   投稿日:2016/08/12 08:55:39  ID:V4dr4yFb.net(2)
>978
プロジェクト3ではプロジェクト1と2の両方のfunc_case呼ぶってなんで?
プロジェクト3専用のfunc_caseだろw
コメント1件

981
デフォルトの名無しさん[sage]   投稿日:2016/08/12 10:09:26  ID:A6nfo0WT.net
>968,966,967のやり方じゃだめだって>969=958=960=963が>973で例を出して言ってるんだろ
>973の例にはfuncの中身以前に問題があるんじゃないのという疑問だろ
コメント2件

982
デフォルトの名無しさん[sage]   投稿日:2016/08/12 12:00:33  ID:tIcwp4Gc.net(2)
>981
つまりどういうこと?

983
デフォルトの名無しさん[sage]   投稿日:2016/08/12 12:28:25  ID:V4dr4yFb.net(2)
>981
>980ではむしろ>978を否定したつもりなんだが

984
デフォルトの名無しさん[sage]   投稿日:2016/08/13 09:29:25  ID:ShTSXbfa.net(7)
pを使った処理はAとBどっちに書くのがセオリ?

try {
 p = new int;
 // A
}
catch() {
 // 失敗時の処理
 return;
}
// B
コメント1件

985
デフォルトの名無しさん[sage]   投稿日:2016/08/13 11:58:33  ID:xf3MhneS.net
書き手がなにを重視しているかの視点・哲学の話だからどっちでもいい
コメント1件

986
デフォルトの名無しさん[sage]   投稿日:2016/08/13 12:22:48  ID:zvhXM4IK.net
その「pを使った処理」で発生した例外をそのcatchで捕まえたいかどうか次第じゃないかと。

987
デフォルトの名無しさん[sage]   投稿日:2016/08/13 12:37:38  ID:ShTSXbfa.net(7)
つまり
例外が発生する処理を1つのtryブロックでまとめるか
処理毎にtryブロックを用意するかの違いって事かな

try { p = new int; /* pを使った処理 */ q = new int; } catch() { return; }

try { p = new int; } catch() { return; }
// pを使った処理
try { q = new int; } catch() { return; }

こんな感じ?

988
デフォルトの名無しさん[]   投稿日:2016/08/13 12:49:18  ID:sDKArTxu.net(5)
全部間違いcatch()なんてコンパイル通らないし
そもそもそんなところでnewなんて使うな
コメント1件

989
デフォルトの名無しさん[sage]   投稿日:2016/08/13 13:11:33  ID:woc51egB.net(3)
try-catchもなんだかんだで行数食うし、
どうしても分離できないところ以外は、なるべくまとめた方が良さげ
コメント1件

990
デフォルトの名無しさん[sage]   投稿日:2016/08/13 13:27:50  ID:ShTSXbfa.net(7)
>988
突っ込むなら本題でつっこんでくれ
例に対して的外れな突っ込みになってるぞ

>989
そういうもんなんだな
コメント2件

991
デフォルトの名無しさん[]   投稿日:2016/08/13 13:35:00  ID:sDKArTxu.net(5)
>990
本題?そんなものにセオリなんてないというのが答え
そもそも「pを使った処理」の内容が分からないのに

992
976[sage]   投稿日:2016/08/13 13:41:10  ID:woc51egB.net(3)
ごめん>989の日本語おかしかった

 誤:
 どうしても分離できないところ以外は

 正:
 本当は分けてcatchしたいのに、まとめてtryブロックに突っ込むと
 そのままでは例外クラスの関係でまとまってしまう(分離に一手間かかる)ところ以外は

どうやら脳内補完してくれたみたいで、感謝


>990
あくまで個人的な見解なので、メリット・デメリットはあると思う
tryブロックが長すぎても大変だろうしね
コメント1件

993
デフォルトの名無しさん[]   投稿日:2016/08/13 13:56:22  ID:sDKArTxu.net(5)
何を大変がってるのか理解不能
最初からnew intなんて馬鹿なことしなけりゃいいのに
コメント2件

994
デフォルトの名無しさん[sage]   投稿日:2016/08/13 14:04:27  ID:woc51egB.net(3)
>993
例文としてnew intを使ったのは質問者で(さらにその例文には特に意味もない)
「大変」という言葉を使ったのは質問者じゃなく俺(>992)なわけだが
一体誰に何をレスしてるんだ?
コメント1件

995
デフォルトの名無しさん[sage]   投稿日:2016/08/13 14:07:57  ID:ShTSXbfa.net(7)
>992,981
そうだなありがとう
煽りたがりなんだよたぶん

>993
最初から的外れな指摘しなけりゃいいのに

996
デフォルトの名無しさん[sage]   投稿日:2016/08/13 14:08:54  ID:ShTSXbfa.net(7)
>985-986もアンカ付けてなかったけどありがとね

997
デフォルトの名無しさん[]   投稿日:2016/08/13 14:09:23  ID:jehnS6hp.net
まあ、あれだ。
いつもの「空気の読めない君」が登場しただけだから気にするな。
質問者の意図が理解できずに、会話にならないアの字の人が一人か二人いる。
コメント1件

998
デフォルトの名無しさん[]   投稿日:2016/08/13 14:19:57  ID:sDKArTxu.net(5)
>994
両方にレスしてる
>984の「pを使った処理」をBに書いてもいいなら、「pを使った処理」では例外が発生しないものとしていいんだよな?
だったらどっちでもいいし

newでbad_alloc発生するかもしれないし「pを使った処理」で別の例外が発生するかもしれないよ。どうしたらいいの(泣)
ってことなら

まとめたとしても
catch(bad_alloc e) {
return;
}
catch(...) {
delete p;
return;
}
とでもすればいいだけだし議論するようなことじゃない
catch()とか書いてる時点でC++の例外処理について何もわかっていないんじゃないかと

そもそもnew失敗時にreturnって何をしたいのか意味不明なんですけどね(笑)
コメント2件

999
デフォルトの名無しさん[]   投稿日:2016/08/13 14:29:14  ID:sDKArTxu.net(5)
>997
出た「空気読め」
無能はいつだってこうだね
しまいには「ア」呼ばわりして勝利宣言w

1000
デフォルトの名無しさん[sage]   投稿日:2016/08/13 14:39:41  ID:ShTSXbfa.net(7)
>998
catchした場合はBの処理はされないという意味のreturnなんだが読み取れなかったか?
それともわざわざ「catchブロックはこの際重要ではない」と書けばよかったか?

引っ込みがつかなくなって狂っただけか?

1001
デフォルトの名無しさん[sage]   投稿日:2016/08/13 14:46:10  ID:ShTSXbfa.net(7)
>998
途中送信失礼

お前がやってる的外れな指摘はこういう事なんだがわかるかな?
catch(const bad_alloc &e)だろ

そこは今重要じゃないだろ?

1002
デフォルトの名無しさん[]   投稿日:2016/08/13 15:49:08  ID:SZzp1Vb3.net
はぁ、、、勝利とか何の話なのかな?
議論に勝ち負けがあると思ってる時点でちょっと斜め上。

1003
デフォルトの名無しさん[sage]   投稿日:2016/08/13 18:35:59  ID:OPjVywq7.net
回答者同士で煽りあってるのかと思えば質問者と回答者だったのか
どっちがセオリーというかpを使った処理次第だし失敗時の処理次第ってところでどっちもあり

>そもそもnew失敗時にreturnって何をしたいのか意味不明なんですけどね(笑)
Bの場合に例外を飛ばさずに処理を終了させたい(Bを実行しない)ってことだろ

1004
デフォルトの名無しさん[sage]   投稿日:2016/08/13 23:39:33  ID:CLd1bccm.net
ループ展開やブロッキングのような最適化手法って他にありますか?
あと並列化特有の最適化の方法とかがあるなら教えて下さい
コメント2件

1005
デフォルトの名無しさん[]   投稿日:2016/08/14 00:04:41  ID:z6U1tRVC.net

1006
デフォルトの名無しさん[sage]   投稿日:2016/08/14 18:24:32  ID:DuaY2f9q.net
>1004
OpenMPの話?
コメント1件

1007
デフォルトの名無しさん[sage]   投稿日:2016/08/15 10:29:06  ID:SYEcbM5V.net
コンパイラがC/C++ならOpenMPの話しはここでもいいんじゃないかな
レスが付くかどうかはわからんが
>1004
wikipediaで"コンパイラ最適化"で項目があるから、ざっくりとわかるとおもう
コメント1件

1008
デフォルトの名無しさん[sage]   投稿日:2016/08/15 10:39:36  ID:4wJ3nkHn.net
>1006
>1007
openMPに限らず他に最適化手法が無いかなと思って聞きました
見たところwikiにもいろいろ載ってました
ありがとうございます

1009
デフォルトの名無しさん[sage]   投稿日:2016/08/15 15:16:30  ID:ZZZ997rF.net(2)
隔離病棟って何だよ

1010
デフォルトの名無しさん[sage]   投稿日:2016/08/15 15:32:27  ID:ywF/52Nh.net
俺の家だよ

1011
デフォルトの名無しさん[sage]   投稿日:2016/08/15 19:11:52  ID:bftlQCDN.net
独り占めすんなよ。
「俺たちの家」と言うべきだろ。

1012
デフォルトの名無しさん[sage]   投稿日:2016/08/15 19:14:58  ID:E6/w/wVK.net
ナース服来たメイドさんうらやま

1013
デフォルトの名無しさん[sage]   投稿日:2016/08/15 19:20:16  ID:ZZZ997rF.net(2)
梅酒
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
バイキングとグッディ★1 (680)フジ実況
実況 ◆ TBSテレビ 27576 江藤愛がクールビズなので水着でひるおび進行 (418)TBS実況
実況 ◆ 日本テレビ 55038 (799)NTV実況
実況 ◆ フジテレビ 83246 (526)フジ実況
NHK総合を常に実況し続けるスレ 133400 しょうがない (241)NHK実況
実況 ◆ テレビ朝日 47705 大下すあーん (67)テレ朝実況
連続テレビ小説 ひよっこ★45 (577)NHK実況
羽鳥慎一モーニングショー★4 (221)テレ朝実況
このスレッドが人気です(ニュース系)
【浜離宮】オイル染み「私かも」40代女性が名乗り出る オリーブオイルを購入後、庭園散策中に落としてビンを割る (417)ニュー速+
【東京】深夜の渋谷駅ホームに人糞30個が散乱 (146)ニュー速+
【テレビ】<東野>「女子高校生ではサッカーと野球どっちが人気?」女子高校生「サッカー」長嶋一茂「下世話なこと言っていい?」★3 (241)音楽・芸能ニュース
【札幌】コンビニ駐車場でカーステレオ音量を巡り口論 その後「制裁として」車ではねる 46歳男を逮捕 (1000)ニュー速+
【テレビ】<東野>「女子高校生ではサッカーと野球どっちが人気?」女子高校生「サッカー」長嶋一茂「下世話なこと言っていい?」★2 (1000)音楽・芸能ニュース
【社会】知的障害がある40代男性、男女数人に大阪市内の飲食店などを連れ回されて計約1500万円をATMから引き出される被害 (597)ニュー速+
【世論調査】安倍内閣支持率60%と横ばい 失言・不祥事の影響軽微 [日経新聞]★5 (377)ニュー速+
【国際】トランプ大統領「金正恩はなかなかの切れ者」と評価 (711)ニュー速+
プログラム板の人気スレ
Ruby 初心者スレッド Part 60 (57)
オブジェクト指向って自然な文法だな 3 (575)
Excel VBA 質問スレ Part47 (705)
ねねっちと一緒にプログラムを勉強するスレ第2話 (600)
C言語なら俺に聞け 139 (891)
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代 (150)
スレ立てるまでもない質問はここで 147匹目 (442)
【統計分析】機械学習・データマイニング15 (158)
推薦図書/必読書のためのスレッド 81 (905)
くだすれPython(超初心者用) その33 (351)
ふらっと C#,C♯,C#(初心者用) Part127 (408)
C++相談室 part130 (276)
Pythonのお勉強 Part52 (873)
Git 15 (672)
C#, C♯, C#相談室 Part94 (64)
Xamarin Part3 (845)
Visual Studio 2015 Part8 (715)
Swift part10 (462)
Visual Studio 2017 Part2 (139)
クラス名・変数名に迷ったら書き込むスレ。Part27 (948)
C# vs Java どっちが好き? その3 (214)
Java入門・初心者質問スレ Part.3 (140)
Ruby 初心者スレッド Part 59 (1000)
プログラミング言語 Rust 2 (817)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (643)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (636)
Androidプログラミング質問スレ revision53 (212)
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】 (545)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)