板検索:
スレを勃てるまでもないC/C++の質問はここで 23 (1027)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2015/01/04 22:51:08  ID:BvikwYSt.net


2
デフォルトの名無しさん[sage]   投稿日:2015/01/04 23:21:56  ID:AZoVKcHR.net
前スレ999さんありがとうございました。

3
デフォルトの名無しさん[]   投稿日:2015/01/06 20:38:52  ID:hpet63Tg.net
1乙です

質問宜しいでしょうか?
Linux用で変数が変化するまで待機するプログラムはsyscall、SYS_futexで出来ますでしょうか?
出来るならどのように書けば良いのか教えてください

4
デフォルトの名無しさん[sage]   投稿日:2015/01/07 01:03:17  ID:9/4UCKaT.net
みんな構造体の宣言とかって毎回ググってる?
manとかで見れると便利だなあって思ったんだけどコマンドなんかない?
コメント1件

5
デフォルトの名無しさん[sage]   投稿日:2015/01/07 01:20:06  ID:IbCBqkxU.net
manよりも、infoの方が情報が新しいらしい

6
デフォルトの名無しさん[sage]   投稿日:2015/01/07 10:33:44  ID:Jika4sDC.net
VS2013で cout があいまいですというメッセージが出ます。
ビルドや実行は出来るのですが、何が原因でしょうか?

7
デフォルトの名無しさん[sage]   投稿日:2015/01/07 17:50:37  ID:DIYY1wPV.net
ERROR: 質問があいまいです

8
デフォルトの名無しさん[sage]   投稿日:2015/01/07 20:27:25  ID:ArlGb+1Q.net
>4
何を検索しているんだ?

9
デフォルトの名無しさん[sage]   投稿日:2015/01/08 15:17:38  ID:eBsSYFBf8
99の表を表示する関数maku_kukuを作成。引数としてnをうけとりnの倍率は表示しない
このプログラムをよければおしえてください

10
デフォルトの名無しさん[sage]   投稿日:2015/01/12 04:40:49  ID:Pgt9wbS9.net(3)
メモリの動的確保について質問です
たとえばCではmallocで確保した変数をfreeで
解放しないといけないのは理解できます
ですが二重解放をしてはいけないというのが理解できません
理解というよりはどういう仕組みになっているか気になります
なぜ解放してあるかをチェックしないのでしょうか
コメント1件

11
デフォルトの名無しさん[sage]   投稿日:2015/01/12 07:42:35  ID:0gHWSTX6.net
>10
後でそのメモリ空間が再びmallocされたら、それを誤ってfreeすることになる。

12
デフォルトの名無しさん[sage]   投稿日:2015/01/12 08:29:34  ID:JDGRgzhV.net
p = malloc();
・・・
free(p)
free(p)
の事だろ二重解放って

13
9[sage]   投稿日:2015/01/12 10:34:49  ID:Pgt9wbS9.net(3)
freeを2回以上した場合、内部的にどういう状態になるのか気になります
処理系によるとは思いますが、一般的な環境(Unix系、Windows等)ではどうなるのでしょうか
コメント1件

14
デフォルトの名無しさん[]   投稿日:2015/01/12 11:16:54  ID:plV1fcgm.net(3)
無効か別に利用されてるアドレスの開放になってどうなるかは未定義なんだろ。
コメント1件

15
デフォルトの名無しさん[sage]   投稿日:2015/01/12 12:02:21  ID:dz9wpGuy.net(2)
>13
たとえばヒープ領域とかヒープメモリで検索するといろいろと出てくるよ
http://www.atmarkit.co.jp/ait/articles/1408/28/news010.html など

余談だけど、むかしfjのC言語グループで
プログラムが終了する際にmallocした領域をイチイチfreeする奴は馬鹿だ、という情報工学の先生がいたなー
こんなセンセーに教育された学生はうちの会社にはいらないw
コメント2件


16
デフォルトの名無しさん[]   投稿日:2015/01/12 12:32:51  ID:plV1fcgm.net(3)
>15
そんな高級なことでなく、C/C++の規定で無効なアドレスに対する動作が決められてないだけだろ。
コメント1件

17
デフォルトの名無しさん[]   投稿日:2015/01/12 12:39:09  ID:plV1fcgm.net(3)
存在しないファイルをオープンしたとき、Cはエラーメッセージを出してくれない状況と同様かと。
コンパイラは「ファイルが存在しません」「メモリはすでに開放されています」と出そうとしたら可能だろうが
パフォーマンスと互換性からそうしないんだろう。
コメント1件

18
デフォルトの名無しさん[sage]   投稿日:2015/01/12 13:03:16  ID:Pgt9wbS9.net(3)
>15
なるほど
もしこのように実装されていたら(実際はもっと複雑なんでしょうけど)
一度目の解放後に双方向リストのリンクが変わっていたり、
確保していたアドレスに別の変数のメモリを確保していたら、
もう一度解放するとリンクが滅茶苦茶になる可能性がありますね

>14, >16-17
そういう可能性もありますか…

自分でも調べてみます
ありがとうございました

19
デフォルトの名無しさん[sage]   投稿日:2015/01/12 13:39:05  ID:dz9wpGuy.net(2)
>17
> 存在しないファイルをオープンしたとき、Cはエラーメッセージを出してくれない状況と同様かと。

#include <string.h>
char *strerror(int errnum);

#include <errno.h>
errno

エラーメッセージを出すように組まなきゃ出ないのは当たり前だが

20
デフォルトの名無しさん[]   投稿日:2015/01/12 15:35:19  ID:GOoAet7L.net(3)
式を選択した後ニュートン法で解を求めるプログラムなのですが、最後のpfのとこに波線が現れ「関数型(もしくはpointer to object型)である必要がありますとでてエラーになります。
どこが間違っているか教えていただけるととても助かります
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define max 1000 //最大繰り返し回数
#define eps 1.0e-5 //収束条件

double f1(double x);
double f2(double x);
double f3(double x);
double df(double x,int pf,int j);
void newton(void);


int main()
{
newton();

return 0;
}

void newton(void)
{
int(*pf[])() = { f1, f2, f3 };
int i,j;
double a=1, na;
printf("equation NO.\n");
printf("0: 3cos(x2)-sin(x)\n");
printf("1: x3-x2-x-3\n");

21
デフォルトの名無しさん[]   投稿日:2015/01/12 15:36:39  ID:GOoAet7L.net(3)
printf("2: x*sin(x)+log(x)\n");
printf("which equation:");
scanf("%d", &j);

if ((j < 0) | (j > 2)) return 0;
for (i=0;i<max+1;i++) {

na = a - (*pf[j])(a)/df(a,pf,j);
if (fabs(na - a)<eps) break;

a = na;

if (i== max) {
printf("収束しませんでした。\n");
exit(1);
}
}

printf("解は%fです\n", na);

}

22
デフォルトの名無しさん[]   投稿日:2015/01/12 15:37:16  ID:GOoAet7L.net(3)
double f1(double x)
{
return 3*cos(x*x)-sin(x);
}

double f2(double x)
{
return x*x*x - x*x - x - 3;
}

double f3(double x)
{
return x*sin(x) + log(x);
}

double df(double x,int *pf,int j)
{
return ((pf[j])(x+eps)-f(x))/eps;
}

23
デフォルトの名無しさん[sage]   投稿日:2015/01/12 16:03:47  ID:NYq12SDF.net
> if ((j < 0) | (j > 2)) return 0;
if (...)
{
  fprintf(stderr, "error: equation number is invalid\nplease input 0, 1 or 2\n");
  exit(1);
}

24
デフォルトの名無しさん[sage]   投稿日:2015/01/12 16:39:30  ID:KGNTKkPE.net
エラーメッセージの通り。typedef した方が楽。

25
デフォルトの名無しさん[sage]   投稿日:2015/01/13 09:17:24  ID:p5zUoyxu.net(2)
int(*pf[])() の宣言ってあってる?
double (*pf[])(double)
じゃないのかな?

26
デフォルトの名無しさん[sage]   投稿日:2015/01/13 13:28:46  ID:Xd+ASo4R.net
関数ポインタがガバガバだからちゃんと勉強した方がいい
コメント1件

27
デフォルトの名無しさん[sage]   投稿日:2015/01/13 17:23:23  ID:p5zUoyxu.net(2)
>26
すまん(_ _) 精進するわ orz

28
デフォルトの名無しさん[]   投稿日:2015/01/15 05:04:37  ID:sN1/S68L.net
fstreamで
ファイルの長さを短くするには
どうしたらできますか?
コメント1件

29
デフォルトの名無しさん[sage]   投稿日:2015/01/15 09:03:31  ID:+X0UBnJQ.net
>28
ストリームなのにサイズを小さくできるわけないだろいい加減にしろ
強いて言えばftruncate

30
デフォルトの名無しさん[]   投稿日:2015/01/15 11:20:21  ID:lMW8kkLc.net(2)
UNREFERENCED_PARAMETER()
を警告対策で入れまくっているのですが、こんな長い文字列がソースの中の
至る所にあると目ざわりなので
UP() とか短い名前で定義しなおすみたいな小細工は、馬鹿でしょうか?
お勧めな方法を教えれ。
コメント1件

31
デフォルトの名無しさん[sage]   投稿日:2015/01/15 11:32:12  ID:mt3DJv6M.net
そもそもそんなに使わない気がするんだが。

32
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/01/15 14:57:44  ID:OiYOltU9.net
>30
//#1
void func(int param) {
...
param = param;
}

//#2
void func(int /*param*/) {
...
}
コメント1件

33
デフォルトの名無しさん[]   投稿日:2015/01/15 18:26:35  ID:lMW8kkLc.net(2)
>32
アドバイスありがとうございました。
#2で行こうかなと思います。これをマクロで
#define  コメント(a)     /* a */
みたいなのが定義出来たら、
void func(int コメント(param)){
みたいに書けるかなと思ったのですが、こんなマクロは作れないでしょうか?
単なる興味です。
コメント1件

34
デフォルトの名無しさん[sage]   投稿日:2015/01/15 18:45:31  ID:Fnh8Qa/J.net
作れません

35
デフォルトの名無しさん[sage]   投稿日:2015/01/15 23:25:56  ID:7CYyJ2nZ.net
>33
#define  コメント(a)

でいいじゃん

36
デフォルトの名無しさん[sage]   投稿日:2015/01/17 13:12:48  ID:46CXHtx0.net
>558
超余裕w

37
sage[sage]   投稿日:2015/01/19 12:55:39  ID:0l2kTrnM.net
STL のコンテナの内容をデバッグ中に表示させたいのだが
gdb の pretty printer というやつがどうやってもうまく有効化できん。。
(gcc 4.8.4, gdb 7.8.1)

同じようなことできているひといますか?

38
デフォルトの名無しさん[]   投稿日:2015/02/01 07:06:55  ID:RggaqYXQ.net
Linux + gstreamer-1.0 + C++の質問はここでも宜しいですか?
問題が有るようなら誘導をおねがいします。

filesrc -> decodebin -> audioconvert -> appsink
appsinkからデータを取り出して弄ってappsrcに入れる
appsrc -> audioconvert(動かないので入れてみた) -> autoaudiosink
で音が出ません(gstreamer-0.10では動いていた)

gst_buffer_map( buffer, &info, GST_MAP_WRITE );
info.dataにデータを入れて(ここまでは入っているようです)
gst_app_src_push_buffer( GST_APP_SRC(appsrc), buffer );
gst_element_set_state( playpipe, GST_STATE_PLAYING );
で再生しています。(bufferが1秒に満たない場合は再生を止めてbufferがたまるまで待ちます)
ネットをあさってみたのですが、どうもbufferがわたっているのか設定が必要なのか再生時に問題が発生しているのか
よく分かりませんでした。なにかヒントを頂けると嬉しいです。
返信レスは遅れると思いますが、よろしくお願い致します。

39
デフォルトの名無しさん[]   投稿日:2015/02/03 00:49:09  ID:O9Z5gBA+.net(4)
助けて下さい

<stdio.h>をインクルードして、
getcとputcを使った箇所でエラーが出ました。引数が少ないとか言われたけど、
何を追加するかわからないし、そもそも本の通りにやったのに・・・何故エラー?

linux.c: In function ‘LoadMapData’:
linux.c:37:7: error: too few arguments to function ‘_IO_getc’
Map[x][y] = getc();
In file included from /usr/include/stdio.h:74:0,
from linux.c:1:
/usr/include/libio.h:434:12: note: declared here
extern int _IO_getc (_IO_FILE *__fp);
linux.c: In function ‘SaveMapData’:
linux.c:53:21: error: macro "putc" requires 2 arguments, but only 1 given
putc(Map[x][y]);

//37: Map[x][y] = getc();
//53: putc(Map[x][y]);
コメント2件

40
デフォルトの名無しさん[sage]   投稿日:2015/02/03 01:05:40  ID:hgFb4HHg.net
>39
本の通りってどんな本使ってんだよ

41
デフォルトの名無しさん[sage]   投稿日:2015/02/03 01:36:23  ID:QU1jdhII.net(3)
なんでファイルポインタがいるんだよ
getc()の実態が何になってるか見てみて

42
デフォルトの名無しさん[]   投稿日:2015/02/03 02:45:00  ID:O9Z5gBA+.net(4)
実態ってこんな感じの?
http://ohmoriws1.ms.kagu.tus.ac.jp/1997/sotsuken/miyakosi/c03.html

実践 linux システムプログラミング C for Linux って本500P弱あるんだけど
19Pのそれで止まってもう動けない泣きたいww


43
デフォルトの名無しさん[sage]   投稿日:2015/02/03 03:26:42  ID:QU1jdhII.net(3)
ideoneにソース載せてみて

44
デフォルトの名無しさん[]   投稿日:2015/02/03 03:46:21  ID:O9Z5gBA+.net(4)
そういうサイトの存在を初めて知りました!
勉強になります。

これで見れますかね?
http://ideone.com/iRHNDJ

45
デフォルトの名無しさん[sage]   投稿日:2015/02/03 04:06:55  ID:yGwE0+2u.net(3)
>39
ほんとうに本のとおりか?
なおすとすれば http://ideone.com/sPoJJs だがあまり意味の感じられない内容だ
コメント1件

46
デフォルトの名無しさん[]   投稿日:2015/02/03 04:33:33  ID:O9Z5gBA+.net(4)
>45
有り難うございます。できました!!
先を見ると、これを元にどんどん拡張していく感じのようです。

ガンガン進めてみます!

47
デフォルトの名無しさん[sage]   投稿日:2015/02/03 04:38:48  ID:GMpj9RJ2.net(3)
誘導されてきました。

質問です。
抽象クラス(親クラスとする)を継承した派生クラス(子クラスとする)を
親クラスの型のメンバー変数に子クラス型でnew()し、抽象化して保持してます。


このメンバーをdelete してすぐNULLを代入しても、参照が残ってるみたいで
エラーがでる場合があります。

抽象化しているオブジェクトの削除の、お作法みたいなものってありますでしょうか。
コメント3件

48
デフォルトの名無しさん[sage]   投稿日:2015/02/03 05:04:38  ID:yGwE0+2u.net(3)
>47
>参照が残ってるみたいでエラーがでる場合があります。
なぜそう判断した?
コメント2件

49
デフォルトの名無しさん[sage]   投稿日:2015/02/03 05:19:50  ID:yGwE0+2u.net(3)
>47
仮想デストラクタ

50
デフォルトの名無しさん[sage]   投稿日:2015/02/03 05:24:28  ID:GMpj9RJ2.net(3)
>48
deleteしたはずの親クラスに定義している純粋仮想関数への
アクセスをしているようで、アクセス違反でメモリリークを起こしています。

自分なりに調べて、親クラスのデストラクタをVirtualにするなど今試みていましたが、
だめでした。

http://shnya.jp/moin/C++%E3%81%AE%E8%90%BD%E3%81%A8%E3%81%97%...#A.2BfRR8i07uYPOVomVwMG5.2FYA-
こちらのサイトの
純粋仮想関数の罠

の項の

しかし……私は嘘をつきました。抽象クラスのインスタンスを構築することはできるのです。
継承された具体クラスを構築している時に、一瞬ですが基底クラスは存在します。 継承されたクラスのコンストラクタが呼ばれる前に、純粋仮想関数が呼ばれた場合、プログラムは不正終了します。

が原因に近しいのはないかと踏んでいますが、具体的な対策が見出せません。
というのが恐らく一番近い原

51
デフォルトの名無しさん[sage]   投稿日:2015/02/03 07:10:28  ID:GMpj9RJ2.net(3)
自己解決しました。

親クラスのコンストラクタかデストラクタが呼ばれるタイミングで
仮想関数が呼ばれていると pure virtual method called になるようで、

純粋にその場面では仮想関数を呼ばないように工夫することで解決しました。
>48さん、お付き合い頂きましてありがとうございました。

52
デフォルトの名無しさん[sage]   投稿日:2015/02/03 09:26:12  ID:orcEUXbE.net
不思議な解決方法だな…
そもそも親クラスのコンストラクタ・デストラクタが純粋仮想関数を呼ぶように作られているというのが不思議だ。
もしかして最初から作り方を間違えていたのを、直し方を間違えたまま、現象だけ解決してるんじゃないか?

53
デフォルトの名無しさん[sage]   投稿日:2015/02/03 10:08:38  ID:415X5y7P.net
そもそも抽象クラスとは関係なく
コンストラクタ内での仮想関数呼び出しはいつもと同じようには機能しない
c++ コンストラクタ内での仮想関数呼び出し
でぐぐって勉強しとけや

54
デフォルトの名無しさん[sage]   投稿日:2015/02/03 10:27:16  ID:vbeiF6Sp.net
全然理解できないけど、理解しないで良い知識だと思った

55
デフォルトの名無しさん[sage]   投稿日:2015/02/03 17:29:43  ID:QU1jdhII.net(3)
>47
親コンストラクタ
子コンストラクタ
子デストラクタ
親デストラクタ
の順番怪しくないの?

56
デフォルトの名無しさん[sage]   投稿日:2015/02/08 02:05:07  ID:BueC27lR.net
ポインタを返す関数の戻り値を受けるのにautoで書くとき、
auto x = func();
と書くのと
auto * x = func();
と書くのは同じなんでしょうか。
下の例のxはポインタのアドレスになってしまうんでしょうか。
コメント1件

57
デフォルトの名無しさん[sage]   投稿日:2015/02/08 02:09:34  ID:JJBPIwXc.net
下はコンパイル通りません

58
デフォルトの名無しさん[sage]   投稿日:2015/02/09 12:16:48  ID:oe5uzBMp.net
>56
そこで宣言するのがx一つならどちらも同じでxはただのポインタ
宣言するのが二つ以上のときに違いがでる

// xとyは同じ型。どちらもポインタ
auto x = func(), y = func();

// エラー
// xはポインタだけどyは違うので初期化できない
// int *x = a, y = b;のときと同じようなこと
auto * x = func(), y = func();

59
デフォルトの名無しさん[sage]   投稿日:2015/02/10 17:29:32  ID:6CiTLKPy.net(3)
cの経験は少しあって最近c++始めたんですが、vectorとstringだけでも十分便利
何ですが、この後何を覚えると
良いでしょうか?
コメント1件

60
デフォルトの名無しさん[sage]   投稿日:2015/02/10 17:32:54  ID:wTvHI6bs.net
unique_ptr shared_ptr

61
デフォルトの名無しさん[sage]   投稿日:2015/02/10 17:51:16  ID:Igj7O7oB.net
ところでvectorとstringってC++なの?

62
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/02/10 17:55:47  ID:ZZYSwCjN.net
std::vectorとstd::stringはC++のクラスだよ。

63
デフォルトの名無しさん[sage]   投稿日:2015/02/10 18:00:25  ID:fc6wBG1e.net
Cではないことは確か

64
デフォルトの名無しさん[sage]   投稿日:2015/02/10 19:48:17  ID:NjPy1BDR.net
>59
map
あとコンパイラが対応してるなら楽できる便利機能として
auto や range based for あたり
コメント1件

65
デフォルトの名無しさん[sage]   投稿日:2015/02/10 23:20:53  ID:6CiTLKPy.net(3)
>64
レス有難うございます。
mapって言うのは少し知っているのですが
どういう状況で使ったらどんなメリット
が有るのかよく分かりません。

66
デフォルトの名無しさん[]   投稿日:2015/02/10 23:31:36  ID:Aoer/888.net(3)
配列のインデックスに文字列がつかえる。
そんなもんAWK, Perlにもある。

mapがなかったら…
2本の配列を用意して、一方に文字列(Cなら2次元配列)、もう一方に数字をいれます。
おなじインデックスで、文字列および数値をとりだす。
たいへんだぁ(?)
それでできますが、mapなら
文字列 → 数値
が一発でできる
コメント1件

67
デフォルトの名無しさん[]   投稿日:2015/02/10 23:38:54  ID:Aoer/888.net(3)
STLのmapは、二進木で管理されていて、検索しやすい
find
もう用意されている
イテレータもある

68
デフォルトの名無しさん[sage]   投稿日:2015/02/10 23:42:56  ID:6CiTLKPy.net(3)
>66
配列のインデックスに文字列が必要に
なる状況が思いつかないのですが、
どんなアプリを作るとそういう状況に
なりますか?
コメント3件

69
デフォルトの名無しさん[]   投稿日:2015/02/10 23:49:02  ID:Aoer/888.net(3)
人間は、文字列を入力します
数字も文字列だ

名前
住所
年齢は、数字(数字を数値に変換すればいいが、数字のままでもいける)
性別は、2値でいい。これも文字列のままでいける

70
デフォルトの名無しさん[sage]   投稿日:2015/02/10 23:56:47  ID:7yL7ZV6a.net
>68
文字列に限らずデータの対応付けぐらい普通にやるだろ
JSONとか知らない?

71
デフォルトの名無しさん[sage]   投稿日:2015/02/10 23:59:30  ID:MwNGRsKL.net
特定の文字列に特定の数値なり構造体なりを割り当てたいときとかあると思うんだが
文字列じゃなくても連番ではない特殊な数値を関連付けに利用してもいいわけだし

72
デフォルトの名無しさん[sage]   投稿日:2015/02/11 00:14:07  ID:vLqody7u.net
多言語なら辞書とか連想配列とか呼ばれてるものと同じようなもの
C++のはキーに任意の型が使える

73
デフォルトの名無しさん[sage]   投稿日:2015/02/11 00:58:31  ID:D/QOH335.net
人工知能の情報関連付けの処理で活躍してそうだな

74
デフォルトの名無しさん[sage]   投稿日:2015/02/11 01:11:41  ID:oz4RTyK1.net
>68
配列の中身を検索するときいちいち全部ループで回すのか

75
デフォルトの名無しさん[sage]   投稿日:2015/02/11 04:44:28  ID:aYb/ZX4Z.net(2)
map はポインタをキーとして使われることも多いよ。
キー側データにメンバを追加できないとき、あるいは
非破壊的に値を保持したい時などに使う。

76
デフォルトの名無しさん[sage]   投稿日:2015/02/11 04:44:37  ID:ZlZsHmR5.net
>68
処理速度重視か作成効率かどちらを取るかで考え方が変わるね
Cでとことん処理速度に拘ってた人は抵抗あるかも知れない
CPUやらハードの性能が上がれば、速度なんて後でついてくる位の気持ちになることが大事

77
デフォルトの名無しさん[sage]   投稿日:2015/02/11 04:52:35  ID:aYb/ZX4Z.net(2)
チューニングするときにはプロファイルとりつつ
「ここは高々数件だから配列に入れて検索した方が速いか」とかするとしても、
まずは map や unordered_map で実装しとくのがいいよね。

78
デフォルトの名無しさん[sage]   投稿日:2015/02/11 05:32:39  ID:X7wVt/Fu.net
There is an apple.
This apple is red.

word = "apple"
words[word] += 1

空白区切りで、すべての単語を取り出し、
それらの使われた回数を数える
is, appleは2回
コメント1件

79
デフォルトの名無しさん[sage]   投稿日:2015/02/11 09:09:02  ID:yrYT/hzd.net
>78
どういうふうに入力されるかわからないしアドバイスしようがないな。
宿題片付けたいだけなら宿題スレへ。

80
デフォルトの名無しさん[sage]   投稿日:2015/02/12 00:39:49  ID:mbIhPfz6c
C++初心者です
最近template学んだんだけど

template<class T> T plus5(T value) {
   return (value + 5);
}

関数plus5をこんな感じで定義しました
このときTがintなら何も問題ない
だけどTがfloatやdoubleだったとき、定数項が5.0fか5.0である必要があります

キャストする以外の方法で定数項をTと対応させるにはどうすればいいか教えて下さい

81
デフォルトの名無しさん[sage]   投稿日:2015/02/15 17:50:17  ID:B1xPkbHY.net
class Hoge{

private:

Hoge &operator=(const Hoge &hoge){}
};



Hoge &Hoge::operator=(const Hoge &hoge){}

は同じなのでしょうか?
互換性があるかどうか調べるためにまず上を宣言してから、
下に書き換えるべくいじくったらこれでエラーが出なくなったのですが
コメント1件

82
デフォルトの名無しさん[sage]   投稿日:2015/02/15 18:35:49  ID:auAw66hR.net
>81
クラス定義の中でメンバ関数の定義を書けば暗黙的にinlineになる

違いはそれだけなので
> 下に書き換えるべくいじくったらこれでエラーが出なくなったのですが
は気がついていなかったミスが書き換えてるうちに勝手に修正されただけだろう

83
デフォルトの名無しさん[sage]   投稿日:2015/02/15 21:37:37  ID:cBAJ0xmb.net(2)
型名 クラス名::変数名で静的メンバ変数を宣言しつつ初期化することはできないのですか?
コメント1件

84
デフォルトの名無しさん[sage]   投稿日:2015/02/15 22:23:37  ID:oIrwp9Au.net
>83
すればいいだろ
https://ideone.com/b2UMf5
クラス定義に書いてない変数を
クラス定義の外で定義したいのであれば無理

85
デフォルトの名無しさん[sage]   投稿日:2015/02/15 22:59:17  ID:cBAJ0xmb.net(2)
あー…やっぱりクラス宣言の時にsatatic定義しないとstaticとして初期化できないんですか
static 型名 クラス名::変数名のように書いて一気にこなそうと思ったんですが、
その際にストレージクラスは宣言できないって怒られちゃって
当初考えていた通りヘッダの宣言で定義しておくことにします ありがとうございました

86
デフォルトの名無しさん[]   投稿日:2015/02/16 12:07:40  ID:vGSFacHj.net(2)
coutをclose出来ますか?

close(1);する前に
fclose(stdout);みたいな事がしたいのです。

87
デフォルトの名無しさん[sage]   投稿日:2015/02/16 12:22:35  ID:DWHkwfYs.net
flushじゃいかんのか?
コメント1件

88
bti[]   投稿日:2015/02/16 12:45:55  ID:KKpFX0J7.net
ビットコインをはじめよう
このリンクからビットコイン購入・販売所bitFlyerにご登録すると
1000円分のビットコインがもらえます!

https://bitflyer.jp/gift/fn0tlipl

話のネタに、とにかく一応もらっておくといいです。
間もなく終了するようです。

89
デフォルトの名無しさん[]   投稿日:2015/02/16 13:01:04  ID:vGSFacHj.net(2)
>87
回答ありがとうございます。

cout.flush();close(1);

で大丈夫でしょうか?
処理の途中で標準出力をクローズしたいのです。

90
デフォルトの名無しさん[sage]   投稿日:2015/02/17 18:52:31  ID:FQU0SBpo.net
double d1 = DBL_MIN;
double d2 = DBL_MIN;
double d3 = 1.0;
とした時に
if(d1==d2)
if(d1==d3)
みたいな比較をしても良いのでしょうか?
コメント1件

91
デフォルトの名無しさん[sage]   投稿日:2015/02/17 20:23:53  ID:WP6LEt4U.net
プリプロセッサの仕様を思い出してみるといい

92
デフォルトの名無しさん[sage]   投稿日:2015/02/17 22:04:02  ID:p0gP7/RW.net
#define DBL_MIN 1.0ならok

93
デフォルトの名無しさん[sage]   投稿日:2015/02/17 22:10:55  ID:y95d2Nc1.net
訊きたいのは
if (d1 == DBL_MIN)
の成立が保証されてるかじゃないのか?

94
デフォルトの名無しさん[]   投稿日:2015/02/18 00:21:05  ID:CW9ZV6LJ.net(2)
質問の意図もC++も分からないけど
「DBL_MINはdouble型で表現可能な最小な正数」だから
1.0ではないんじゃね?
ググったけど
2.225074e-308
みたいな値だろ?

等号での比較は「偽」だろうけど比較をする事自体は問題無いよ。
答えになってるかな?

95
デフォルトの名無しさん[]   投稿日:2015/02/18 00:23:35  ID:CW9ZV6LJ.net(2)
double型での等価の比較はあまりオススメ出来ないとか
そんな答えを求めているのかな。

96
デフォルトの名無しさん[sage]   投稿日:2015/02/18 12:24:16  ID:cxgRNEsa.net
うちだとdoubleやfloat変数を==で比較してる時点で社内レビューではねられるな。例外は即値が整数のときだけ


97
デフォルトの名無しさん[sage]   投稿日:2015/02/18 13:16:02  ID:492Iwxk8.net
DBL_MIN==DBL_MIN を気にしてるんか? どこにフォーカスしてるのか

98
デフォルトの名無しさん[sage]   投稿日:2015/02/18 13:38:50  ID:9GHJc1N/.net
>90
しても構わないが浮動少数では誤差が出るから正確な答えがでない可能性は高いよ

99
デフォルトの名無しさん[sage]   投稿日:2015/02/18 16:30:13  ID:UnM/2wIq.net
最大値や最小値が揺れるってのは概念としては考えづらいんだけど、
コンパイラや仕様によって起きるのだろうか 気になる

100
デフォルトの名無しさん[sage]   投稿日:2015/02/18 20:56:44  ID:wgfycviw.net
そりゃ
double d1 = DBL_MIN;
この時点で値が変わってるだろ

101
デフォルトの名無しさん[sage]   投稿日:2015/02/18 21:07:49  ID:s5Vrc8eg.net
doubleで表現できる最小な正数値なのにdoubleに代入しただけで値が変わるとはいかに

102
デフォルトの名無しさん[sage]   投稿日:2015/02/19 13:19:57  ID:PwGKmnLr.net(2)
浮動小数点の誤差って、演算後の話で、代入だけしかしてなければ == で判定してもきっちり判定できるよね?
コメント2件

103
デフォルトの名無しさん[sage]   投稿日:2015/02/19 14:34:52  ID:fdKBoaCS.net
>102
同じ型同士で同じ値を代入しただけなら==でも判定できそうな気がするけど(詳細は知らん)
以下のような場合は判定できないと思った方がよいと思うよ
doubleに代入した時点で厳密に1000ではなくなるから
int i = 1000;
double d = 1000;
if ( i == d )

実際に1000だとうまくいくかは試してない
コメント2件

104
デフォルトの名無しさん[sage]   投稿日:2015/02/19 14:43:34  ID:7oFSdK4O.net(2)
>103
どっちもint(1000)がdoubleに暗黙で変換されてるから一緒だろ

105
デフォルトの名無しさん[]   投稿日:2015/02/19 15:09:24  ID:IU8xWBqQ.net
>103
等号が成立しなくなる理由はいくつかあって、

a)循環少数になる場合
b)基数が10でない為正確な数値を表現出来ない事
c)桁落ち

a)は数値で計算してる為の丸め誤差
b)はC++のdoubleなんかの小数点以下の数値の表現の問題。
c)はC++のdoubleなんかの有効桁が固定されている為の問題。

でおそらくb)の説明だよね。
であるなら整数であればたぶん大丈夫なはず。

106
デフォルトの名無しさん[sage]   投稿日:2015/02/19 16:03:16  ID:MTWKGuO0.net
>102
計算機イプシロンより絶対値の小さい値a,bがあるとして
数学上はa≠bでも、変数に格納して両者を比較するとプログラムの動作ではa=bとなってしまう
だから「==」できっちりと判定できるとは限らない
まぁこれを逆手にとって、たとえば、二つの浮動小数点数の差の絶対値が計算機イプシロンより小さければ
「==」とみなす‥というコーディングをしたりします

107
デフォルトの名無しさん[sage]   投稿日:2015/02/19 16:19:57  ID:PwGKmnLr.net(2)
なるほど… 鼎任

整数を扱っているうちは大丈夫、小数点下も同じ値を代入した直後なら多分大丈夫、と
計算機イプシロンのほうはぴんとこないけど。

doubleの内部的な動きがいまいちぴんとこないから、double避けて書いてる…使う用事がないことを祈りつつ
コメント2件

108
デフォルトの名無しさん[sage]   投稿日:2015/02/19 16:30:34  ID:7oFSdK4O.net(2)
IEEE754でググれ
JavaとかC#とかの多くの言語で採用されてる方法だから
固定長の浮動小数点型でこれ以外の方法で実装されてる環境を探す方が難しいぐらい

109
デフォルトの名無しさん[sage]   投稿日:2015/02/19 16:32:53  ID:MJrK0vGE.net
まあ浮動小数点演算ユニットからしてIEEE754に最適化されてるだろうしな

110
デフォルトの名無しさん[sage]   投稿日:2015/02/19 17:28:23  ID:GY4p95fn.net
>107
ゲームでの座標計算って大抵floatかdoubleじゃね
理由は主に斜め移動などの少数になる演算

キャスト使って全部無理やりintにはできるけど

111
デフォルトの名無しさん[sage]   投稿日:2015/02/19 18:43:58  ID:x3p0g+OH.net
>107
double使うなら基礎知識として浮動小数点誤差は知っておくべき

112
デフォルトの名無しさん[sage]   投稿日:2015/02/21 20:03:43  ID:l44iTosq.net(2)
自作のWindowsアプリが連続で何時間も動かすとタスクマネージャで
メモリの使用量が徐々に増えていくのですが、それをグラフに書きたい
のですが、自分でメモリ使用量調べるのは面倒なので、何か簡単なツールで
特定のプロセスIDを指定したら、そのプロセスのメモリ使用量を
10分ごととかでファイルに保存してくれるようなそんなツール無いでしょうか?
あれば教えてください。

113
デフォルトの名無しさん[]   投稿日:2015/02/21 20:06:47  ID:g1tTND+u.net
それは知らないがメモリリークしてるだろ。そっちは無視か。

114
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/02/21 20:09:37  ID:swM6o0zc.net(3)
Visual Studioのデバッグ機能を使えばメモリーリークくらい余裕でわかるだろ。
コメント1件

115
デフォルトの名無しさん[sage]   投稿日:2015/02/21 20:28:23  ID:l44iTosq.net(2)
>114
コツを教えてください。
コメント2件

116
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/02/21 20:33:54  ID:swM6o0zc.net(3)
>115
「VC デバッグ メモリーリーク」で検索

117
デフォルトの名無しさん[sage]   投稿日:2015/02/21 20:36:49  ID:MtQcH0ET.net(2)
>115
その質問が出るレベルなら、newをプロジェクトから検索、deleteを検索
数が合ってたら、
Createとreleaseで同じように
でも増えていくメモリの大きさから大体見当つくだろ

118
デフォルトの名無しさん[sage]   投稿日:2015/02/21 20:42:14  ID:qCqW+14K.net
new と delete (malloc() と free()) が同じ数とはかぎらないだろう‥
個人的にはラッパ(new/delete のオーバーロード)できっちり把握する
メモリ以外のリソースも同様に

119
デフォルトの名無しさん[sage]   投稿日:2015/02/21 20:47:14  ID:78/Ireu0.net
deleteしててもその型が基底クラスだったりしたら場合によってはリークするしな

120
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/02/21 20:52:12  ID:swM6o0zc.net(3)
C++11以降は生ポ使うな、スマポ使え

121
デフォルトの名無しさん[sage]   投稿日:2015/02/21 21:35:37  ID:MtQcH0ET.net(2)
質問のレベルに合わせないと更なる質問を産む事になる

122
デフォルトの名無しさん[sage]   投稿日:2015/02/21 23:32:02  ID:Ujipb/FI.net(2)
shred_ptrやweak_ptrは煩わしいあれこれからマを解放するために生み出された物なので、
知らない人がいたらどんどん教えていくべき

なお物によっては使えなかったり結局明示的なdeleteに近い処理を書く必要がある模様

123
デフォルトの名無しさん[sage]   投稿日:2015/02/21 23:41:25  ID:Ujipb/FI.net(2)
aが抜けてるよaが…shared_ptr

124
デフォルトの名無しさん[]   投稿日:2015/02/22 00:27:11  ID:qWw/awps.net

125
デフォルトの名無しさん[sage]   投稿日:2015/02/22 00:35:44  ID:0njaRTk3.net
宿題はこっちのスレに投げるべし
C/C++の宿題片付けます 168代目

126
デフォルトの名無しさん[]   投稿日:2015/02/22 12:28:56  ID:2HG+oh7E.net(3)
if (::_stricmp(foo->bar(j).ToCStr(), "hoge") == 0)

みたいな文の :: (コロン2個)って何の意味がありますか?
初めて見たのですが。
コメント1件

127
デフォルトの名無しさん[sage]   投稿日:2015/02/22 12:31:08  ID:RFHyaT+D.net
なんか他人のソースに書いてあってカッコいいのでマネしてみました
意味はよくわかっていません

128
デフォルトの名無しさん[]   投稿日:2015/02/22 12:37:32  ID:2HG+oh7E.net(3)
いやいや、ほんとに教えて下さい。
コメント1件

129
デフォルトの名無しさん[]   投稿日:2015/02/22 12:44:15  ID:vG1FeYAO.net
C言語とJAVA比べた時出力処理ってどっちのほうが長いの?
JAVAの出力処理が長すぎて萎えたんだけどwwww

130
デフォルトの名無しさん[sage]   投稿日:2015/02/22 12:47:28  ID:J+2bP69K.net
>128
名前解決演算子(name resolution operator)で調べてこい。
C++で_stricmpがグローバル名前空間の_stricmpであることを明示するために使用

int v;
namespace N1 {int v;}
int j = ::v; // 一行目のvを指す
コメント1件

131
デフォルトの名無しさん[sage]   投稿日:2015/02/22 12:47:38  ID:TRUNFqhM.net
>126
名前空間の指定だよ、この場合はグローバル名前空間を指す

132
デフォルトの名無しさん[sage]   投稿日:2015/02/22 12:52:37  ID:2HG+oh7E.net(3)
>130-131

なるほど分かりました。
ありがとうございます。

133
デフォルトの名無しさん[sage]   投稿日:2015/02/22 13:58:32  ID:+D+VdwAu.net
つまり、この外側にこの変数が所属する名前空間自体の定義があるはずなんだが、
一部分のみを見てしまったためわからなくなってしまったという

134
デフォルトの名無しさん[sage]   投稿日:2015/02/22 15:59:14  ID:i2HJL1En.net
変数じゃなくて関数っぽくね

135
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:05:50  ID:pMjCWY3N.net(6)
int i_g;
void func(int &i){
  i_g = i;
  i_g = 777;
  i = i_g;     // この行無しで
}
void main()
{
  int i = -1;
  func(i);
  printf("i = %d\n", i);    // 777
}
これ実行すると、777と出力出来るのですが、[この行無しで]の代入無しでも
同じ結果にすることは可能でしょうか?
つまり、funcの中で,i_gに何らかの値を代入するだけで、main()に戻った時にもその
値がiに戻って来るように出来ますか?
コメント2件

136
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:10:10  ID:Su9wFgfT.net(4)
代入してないのに値が変わったらミラクルだわ
printf("i = %d\n", i_g);
じゃダメなのか
コメント1件

137
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:10:11  ID:zZTzM7Nf.net(4)
>135
int &i=i_g;
i_g=777;
とりあえず、そんな糞コード書く前にポイントとか参照の基礎を学べ

138
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:17:56  ID:pMjCWY3N.net(6)
>136
mainは変更しない前提でお願いします。
コメント1件

139
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:21:00  ID:Su9wFgfT.net(4)
スタックを書き換える方法を聞いてるのか?
どちらにしろiに代入するしか方法はないが
コメント1件

140
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:26:42  ID:pMjCWY3N.net(6)
>139
説明不足ですみません。
int i_gではなく
int *p_g
としてfunc内で
p_g=&i
とすれば
*p_gに代入した値はmainに戻せますが
ポインタ変数を使わずに実現出来ますか?
参照だけで出来ますか?

141
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:27:41  ID:zZTzM7Nf.net(4)
>138
void func(int &i_g){
i_g=777;
}
はい、要件満たしてやったぞ。
コメント1件

142
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:28:43  ID:Su9wFgfT.net(4)
参照なら>135でいいだろ

143
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:30:54  ID:pMjCWY3N.net(6)
>141
i_gはグローバル変数でお願いします。
コメント1件

144
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:32:14  ID:zZTzM7Nf.net(4)
>143
グローバル変数である必要がありません。
コメント1件

145
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:33:22  ID:pMjCWY3N.net(6)
>144
私には必要なんです
コメント1件

146
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:33:31  ID:Su9wFgfT.net(4)
グローバル変数は参照にできないから不可能

147
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:46:15  ID:zZTzM7Nf.net(4)
>145
ポインタにしたとしてどう使うんだよそのグローバル変数は

148
デフォルトの名無しさん[sage]   投稿日:2015/02/23 17:47:44  ID:RAjknDke.net
  i = i_g;     // この行無しで

この行を削らないといけない理由は?
コメント1件

149
デフォルトの名無しさん[sage]   投稿日:2015/02/23 23:57:52  ID:pMjCWY3N.net(6)
>148
そんなに深い理由はないのですが、
削っても出来るかなという素朴な疑問でした。
コメント2件

150
デフォルトの名無しさん[sage]   投稿日:2015/02/23 23:59:40  ID:cWkGfwjm.net
>149
君の頭と貴重な時間を削ってもできるかな

151
デフォルトの名無しさん[sage]   投稿日:2015/02/24 03:22:23  ID:G4iqMc1S.net
>149
ろくに答えもしない人はたいがい「なんでそんな事をするのか」だから答えなくていいよ

152
デフォルトの名無しさん[sage]   投稿日:2015/02/24 06:25:16  ID:RxQOhZJD.net
そういうやつは一生糞みたいなコード書いてればいいよ。
間違っても仕事にすんなよまわりが迷惑するから。

153
デフォルトの名無しさん[sage]   投稿日:2015/02/27 02:32:04  ID:GOSdj3hN.net
uint16_t data[] = {0,1,2,3,4,5,6,7};
int skip = 4;
auto p = reinterpret_cast<uint16_t (*)[skip]>(data);
printf("%d %d %d\n", p[0][0], p[0][1], p[0][2]); // => 0 1 2
printf("%d %d %d\n", p[1][0], p[1][1], p[1][2]); // => 4 5 6

こうやって変数で配列のサイズを指定するのって、
c++11 でも規格ではなく GCC独自拡張でしょうか?
コメント3件

154
デフォルトの名無しさん[]   投稿日:2015/02/27 02:34:29  ID:Iu53F2aP.net
自分はわからないが、危険だとおもったら文法的に安全な方法で。

155
デフォルトの名無しさん[sage]   投稿日:2015/02/27 09:54:11  ID:MHy9s9iY.net
>153
cでならc99で規格化されてるがc++では(今のところ)コンパイラの独自拡張

156
デフォルトの名無しさん[]   投稿日:2015/02/27 10:19:22  ID:vnP6fImO.net

157
デフォルトの名無しさん[]   投稿日:2015/03/02 22:17:43  ID:j/CocTLkG
>153

きたねえ糞コードだなあ

158
デフォルトの名無しさん[]   投稿日:2015/03/09 03:55:55  ID:oMflzd71.net
char buff1[定数];
char buff2[定数];
if(strcmp(buff2,"++")==0){
buff2 = buff1 +1;
}

という式を書いたのですがbuff2は変更不可能というエラーが出てしまいます。ポインタなのが問題らしいのですがポインタでなくbuff2に入っている文字列の数値を計算して書き換えるにはどう修正すればいいのでしょうか?
buff2の中身が"++"の時はbuff1(数値)に1加えた数値をbuff2に代入するという式を書きたいです。
コメント3件

159
デフォルトの名無しさん[sage]   投稿日:2015/03/09 04:16:20  ID:UEMwm/ZM.net
>158
ポインタとアドレス、配列アドレスと配列バッファを混同してる
buff1とbuff2の値を見て見るべき
ついでにヒントとしてbuff1[0]とbuff2[0]の値もね
コメント1件

160
デフォルトの名無しさん[sage]   投稿日:2015/03/09 04:47:05  ID:C8nwOi6u.net
>158
int num=atoi(buff1);
num=num+1;
sprintf(buff2,”%d”,num);

161
デフォルトの名無しさん[sage]   投稿日:2015/03/09 05:46:16  ID:d8cjeDnQ.net
>158
if(strcmp(buff2, "++") == 0) {
sprintf(buff2, "%d", atoi(buff1) + 1);
}

162
デフォルトの名無しさん[sage]   投稿日:2015/03/09 07:47:02  ID:N0bMeNoe.net(2)
vector<int> test;
vector<int>::iterator begin,end;

2行目の::はなんですか??
名前空間に属している事を示す::と、クラスのメソッドである事を示す::しか知らないのですが
iteratorはvectorクラスのどういうものなんですか?
コメント1件

163
デフォルトの名無しさん[sage]   投稿日:2015/03/09 08:00:26  ID:lCvEf7bM.net
>162
:: はスコープ指定演算子で、iterator は vector のネストされた内部のクラス
コメント1件

164
デフォルトの名無しさん[sage]   投稿日:2015/03/09 08:18:41  ID:N0bMeNoe.net(2)
>163
ご返答ありがとうございました

165
デフォルトの名無しさん[sage]   投稿日:2015/03/09 17:29:38  ID:b0X+6jZ8.net(2)
C++でクラスがconstなメンバ変数を持つと代入演算子が生成できない
みたいなエラーが出ますが、対策としては自前で代入演算子を定義する
など有るみたいですが、そんなことしなくても、const以外のメンバ変数は
普通に代入して、constメンバは何もしないみたいな処理を勝手にやってくれる
ような楽ちんな方法はありませんか?VS2013です。
コメント1件

166
デフォルトの名無しさん[sage]   投稿日:2015/03/09 18:19:22  ID:Z3OokkBM.net

167
デフォルトの名無しさん[sage]   投稿日:2015/03/09 18:37:06  ID:b0X+6jZ8.net(2)
>166
うまく行きました。ありがとうございました。

168
デフォルトの名無しさん[]   投稿日:2015/03/09 22:50:27  ID:AQB4uEfR.net
>159-161
ありがとうございました。おかげで無事できました。
javascript齧ってた程度なのでポインタやアドレスはイマイチわからない……C系は難しい
コメント1件

169
デフォルトの名無しさん[sage]   投稿日:2015/03/10 02:54:49  ID:J40sdYqt.net
>168
Javascriptも文字列のまま四則演算とか出来ないでしょ。
Cの文字列は色々面倒だからC++のstd::string使った方がいいよ

170
デフォルトの名無しさん[sage]   投稿日:2015/03/10 10:30:47  ID:Zsa8IBTe.net
void* operator new(size_t size, const char* file, int line) {
return std::malloc(size);
}
void operator delete(void* p, const char* file, int line) {
std::free(p);
}

こんな感じでnew/deleteをオーバーロードしたとき、
オブジェクト作成は
  Hoge* p = new (__FILE__, __LINE__) Hoge;
のように記述できますが、破棄は
  p->~Hoge();
  ::operator delete(p, __FILE__, __LINE__);
のようにしなければならないようで若干面倒です。
こちらも例えば
  delete (__FILE__, __LINE__) p;
のように記述する文法は用意されていないのでしょうか?

171
デフォルトの名無しさん[sage]   投稿日:2015/03/10 12:46:26  ID:Zt65CvSc.net
用意されていない

172
デフォルトの名無しさん[sage]   投稿日:2015/03/12 13:38:06  ID:bakilSIy.net
マクロでなんとかしる

173
デフォルトの名無しさん[]   投稿日:2015/03/14 00:04:39  ID:rKRQmeKw.net(3)
udpパケットを16進数で受け取るにはどうすればいいんですか?
受信したパケットを
AA BB CC
みたいな感じで表示させたいです。
また、パケットの先頭から何bitまで抽出するにはどうしたらいいですか?
コメント2件

174
デフォルトの名無しさん[sage]   投稿日:2015/03/14 00:08:03  ID:OeJNA3gM.net
>173
お前は通信の前に基礎を勉強しろ

175
sage[]   投稿日:2015/03/14 07:48:45  ID:heK9BCvf.net
>166
テキトーなこと教えんな
氏ね
コメント1件

176
デフォルトの名無しさん[]   投稿日:2015/03/14 10:29:23  ID:PbzhoJJP.net(2)
>175
mutable

177
デフォルトの名無しさん[sage]   投稿日:2015/03/14 10:36:07  ID:ulb+QBES.net(3)
>173
パケット内容をダンプするのが目的なのか、ネットワークプログラミングを学習するのが目的なのか
前者ならWireSharkというツールが既にありますし、後者ならトランスポート層に直接アクセスする必要があるのでSocketでは無理。たぶんドライバレベルの知識が必要でしょう
コメント1件

178
デフォルトの名無しさん[]   投稿日:2015/03/14 12:55:42  ID:PbzhoJJP.net(2)
「後者なら」の意味がわからんが、データリンクへのアプローチだったらLinuxならソケット、BSDならBPFでいけるんでねぇの。
トランスポート以前でモニタ・加工ってことな。
コメント1件

179
デフォルトの名無しさん[]   投稿日:2015/03/14 13:01:04  ID:rKRQmeKw.net(3)
>177
パケットの 内容をそのままダンプしたいだけですね。
確かにワイヤシャークなどのツールがありますが、勉強のために簡単なものを
自分で作ってみようとおもいました。
コメント1件

180
デフォルトの名無しさん[sage]   投稿日:2015/03/14 13:43:04  ID:ulb+QBES.net(3)
>178
SOCK_RAWを使えばできそうですね。失礼しました

181
デフォルトの名無しさん[sage]   投稿日:2015/03/14 13:47:33  ID:ulb+QBES.net(3)
途中送信申し訳ない...
>179
こちらが参考になるかも
http://www.whiteboard.ne.jp/~admin2/index.php?Linux%20socket%20%A5%D7%A5%...

182
デフォルトの名無しさん[]   投稿日:2015/03/14 23:00:02  ID:rKRQmeKw.net(3)
raw_socketならできそうです。
ありがとうございました。

183
デフォルトの名無しさん[sage]   投稿日:2015/03/15 05:23:07  ID:NNq1Z6It.net(2)
静的な多次元配列をクラスメンバの動的配列にコンストラクタで引き渡す(コピー)するにはどうすればいいですか?

184
デフォルトの名無しさん[sage]   投稿日:2015/03/15 06:03:16  ID:NNq1Z6It.net(2)
すいません解決しました

185
デフォルトの名無しさん[]   投稿日:2015/03/16 17:42:14  ID:c3Hz1edW.net(2)
特定のポート番号のみのパケットを受信しようとしてもうまくいきません。
どうすれば、良いですか?

//ソケット作成
sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

memset(&amp;sll, 0xff, sizeof(sll));
sll.sll_family = AF_PACKET; /* allways AF_PACKET */
sll.sll_protocol = htons(ETH_P_ALL);
sll.sll_ifindex = interface_index;
bind(pd, (struct sockaddr *)&amp;sll, sizeof sll);

htons(ETH_P_ALL)というところの設定を変えたりしました。

186
デフォルトの名無しさん[sage]   投稿日:2015/03/16 19:16:48  ID:rl2BM/P0.net
プログラム以外の所に原因があるケースが多い
ポート開放でググって先に原因と対策を調べるべき
コメント1件

187
デフォルトの名無しさん[]   投稿日:2015/03/16 20:35:43  ID:c3Hz1edW.net(2)
>186
ありがとうございます。確かにiptablesの設定で弾いているかもしれませんね。
htons()何ですが、htons(80)と指定することでポート80番にパケットのみひろうと
いう解釈でよろしいでしょうか?

188
デフォルトの名無しさん[]   投稿日:2015/03/16 22:20:36  ID:bhsTaUEk.net(2)
ネットワーク上はビッグエンディアンで扱うから Host TO Network byte order, Short してる。
アプリケーションレベルで通信相手を特定するならconnet(2)
どのOSかしらんけど。

189
デフォルトの名無しさん[]   投稿日:2015/03/16 22:23:26  ID:bhsTaUEk.net(2)
データグラムを recvfrom したまま応答なし、メインのシェルがブロックされたままだとキー受け付けないとかあるからお気をつけあそばせ〜。

190
デフォルトの名無しさん[sage]   投稿日:2015/03/22 17:07:18  ID:fw6k4Nmy.net
ポインタを上書きしてしまうと前のポインタが示すデータはどうなるんですか?
ずっとどこかに残ったままですか?
コメント1件

191
デフォルトの名無しさん[sage]   投稿日:2015/03/22 17:13:02  ID:CvAUvH6J.net
どうもしませんよ

192
デフォルトの名無しさん[sage]   投稿日:2015/03/22 18:01:42  ID:KcTTsKQ+.net
>190
スマポじゃなきゃメモリーリークになる

193
デフォルトの名無しさん[sage]   投稿日:2015/03/28 16:48:23  ID:NmdYaBEp.net(6)
初歩的な質問で恐れ入ります。

http://www.slideshare.net/herumi/cmovmaxps

ここの資料を見てたら

unsigned int a, b, x;
if( a<=x && x<=b ) {...}

上記の条件式を下記に書き換えれば、(条件)分岐は1回で済む、と紹介されてました。

if( (x-a) <= (b-a) ) {...}

でもこの書き換えって等価なんでしょうか?
たとえば a=70; b=90; x=60; だとおかしいような‥
コメント2件

194
デフォルトの名無しさん[]   投稿日:2015/03/28 16:55:40  ID:zJiPBq01.net(3)
つねにxがa以上を仮定すれば上下の成立条件は同じと見た。
コメント1件

195
デフォルトの名無しさん[sage]   投稿日:2015/03/28 16:56:30  ID:LZ/SArZZ.net(2)
unsigned前提だからだろ
コメント1件

196
デフォルトの名無しさん[sage]   投稿日:2015/03/28 17:00:21  ID:NmdYaBEp.net(6)
>194
でもつねにxがa以上なら、この部分を記述する必要はないのではないでしょうか?
if( /* a<=x && */ x<=b ) {...}

197
デフォルトの名無しさん[]   投稿日:2015/03/28 17:02:43  ID:zJiPBq01.net(3)
a>x とすると、つねに上は不成立だが。
このときx-aが非常に大きい正数(b-aよりも)であると仮定すれば
下も不成立だな。

198
デフォルトの名無しさん[]   投稿日:2015/03/28 17:16:02  ID:zJiPBq01.net(3)
a=70; b=90; x=60; でMを扱える最大数とすると、

(x-a) <= (b-a)は、-(M-9) < 20で不成立。前者も不成立でこの場合は同じ分岐だな。

つねに一致するにはbとxに条件がいる気がするが。

199
デフォルトの名無しさん[sage]   投稿日:2015/03/28 17:17:46  ID:NmdYaBEp.net(6)
最初の条件式はxがa〜bの範囲内(両端含む)かどうかを調べるということですよね。
x<aの時も、そうでない時も、両方のケースを想定している条件式なんじゃないでしょうか。

200
デフォルトの名無しさん[sage]   投稿日:2015/03/28 17:19:36  ID:NmdYaBEp.net(6)
アンカー忘れ、すみません。196は194へのレスでした。

201
デフォルトの名無しさん[sage]   投稿日:2015/03/28 17:46:19  ID:NmdYaBEp.net(6)
ideoneで試したらx<aのケースだと下記のifも不成立でした。私のミス、すみません。
unsigned intの計算途中で負数になった際の取り扱いを勉強し直します。
レス下さった方々、ありがとうございました。

202
デフォルトの名無しさん[sage]   投稿日:2015/03/28 18:00:54  ID:p+oUvV+T.net(2)
>193
リンク先をみてもよくわからなかったが

>if( a<=x && x<=b ) {...}
>上記の条件式を下記に書き換えれば、(条件)分岐は1回で済む、と紹介されてました。
>if( (x-a) <= (b-a) ) {...}

ここだけ抜き出して論じるのであれば、これは明らかにおかしい
なぜって不等式
x - a <= b - a
を解けばいい、両辺 a を足して
x <= b

a と x に関する条件がぬけてしまっている
コメント1件

203
デフォルトの名無しさん[sage]   投稿日:2015/03/28 18:38:44  ID:NmdYaBEp.net(6)
>202
printf("%u\n",(x-a));
で4294967286となるので、「変数がunsignedで計算途中で負数が生じた時の挙動」が
追加の条件(情報?)になるのではないでしょうか。
数学的には-10だから両方の条件式は矛盾しますよね。
コメント1件

204
デフォルトの名無しさん[sage]   投稿日:2015/03/28 19:32:54  ID:LZ/SArZZ.net(2)
条件というか、変更した式は数学的には

mod(N+x-a,N) <= mod(N+b-a,N) (ただし 0 <= a,b,x < N)

なので、両辺にaを足しても

x <= b

にはならない。

205
デフォルトの名無しさん[sage]   投稿日:2015/03/28 20:48:16  ID:p+oUvV+T.net(2)
>203
ほーなるほど‥

206
デフォルトの名無しさん[sage]   投稿日:2015/03/29 00:33:59  ID:nF1Ol+9b.net(2)
>193
それは、xがa以上b以下であるかどうかを判定しようとしている式だろうから
a < b が暗黙の前提になっていると思われる。
あとは、>195 が言うように unsigned ということ考えれば、成立する

a=70, b=90, x=60 の場合、(intが32bitすると)
x - a = 2^32 - 10 = 4294967286
b - a = 20
で false になり、 a <= x && x <= b と一致する。

207
デフォルトの名無しさん[sage]   投稿日:2015/03/29 00:54:33  ID:nF1Ol+9b.net(2)
数直線に a と b があって、その間に x がある条件をイメージすれば
直感的に (x - a) <= (b -a) になると思う

-----+----+-----+--------->
    a    x    b

x < a の場合は a - x がラップして b - a より大きくなることを使ってるので
最初の式の第1項は a <= x じゃなければならないね

208
デフォルトの名無しさん[]   投稿日:2015/03/29 02:14:17  ID:PjXq8DMp.net(11)
そういうことだな。a<=xなら常に一致。
a>xならb-aが(2の補数などで一回転しない)正数だったら一致。

209
デフォルトの名無しさん[sage]   投稿日:2015/03/29 10:42:27  ID:L3D4TSkJ.net(5)
重箱のスミで申し訳ない
unsigned int a, x; a=70; x=60; ※intは32bit
だとして
x - a == 4294967286
が成り立つことは規格で保証されているんだろうけど
ネット上で探しても文献が見つけられない
知ってる方がいたらリンクとか具体的記述とか教えてもらえればありがたいです
コメント2件

210
デフォルトの名無しさん[]   投稿日:2015/03/29 10:51:01  ID:Lkr8cLwC.net
#define CURVEP_BEZIER (1<<0)
#define CURVEP_CORNER (1<<1)
#define CURVEP_LOCKED_Y (1<<2)

フラグの定義ですけど
この二重の不等号みたいなのって、何の意味というか、どんな動作をしますか?
intに格納されるみたいですが。

211
デフォルトの名無しさん[sage]   投稿日:2015/03/29 10:58:28  ID:gR6bL9ge.net
シフト演算子と言うものだ
教科書を入手するとこを推奨する

212
デフォルトの名無しさん[]   投稿日:2015/03/29 11:02:43  ID:PjXq8DMp.net(11)
>209
そんな保証はないはず。
CPUなどハードウェア的に1の補数や2の補数という仕組みがあったり
コンパイラによってもちがったりするだろう。

213
デフォルトの名無しさん[]   投稿日:2015/03/29 11:06:38  ID:PjXq8DMp.net(11)

214
デフォルトの名無しさん[sage]   投稿日:2015/03/29 11:15:29  ID:XfQU9N1R.net

215
デフォルトの名無しさん[]   投稿日:2015/03/29 11:30:08  ID:PjXq8DMp.net(11)
それは初めて知った。
騙すつもりはないんだが。
しかしC11(ISO/IEC 9899-2011)だからそれ以前のコンパイラは違うかもしれない。

216
デフォルトの名無しさん[]   投稿日:2015/03/29 11:48:18  ID:PjXq8DMp.net(11)
はじめからなのかわからないが。符号なしではオーバーフローが未定義ではないということは、符号あり計算のほうが速度が出る可能性はあるってことだな。



Success is a Journey, not a Destination: 全てのCプログラマが未定義な振る舞いについて知っておくべきこと

符合なし整数型のオーバーフローは、2の補数になる(wrapする)ことが保証されていて、これは常に活用できることを指摘しておく。
符号つき整数のオーバーフローの振る舞いを定義するコストとしては、これらの最適化が全く使えなくなることがある。
(たとえば、よくある症状としては64bitプラットフォームでのループ内で大量に符号拡張をしなくてはならなくなる。)
ClangもGCCも "-fwrapv" フラッグをサポートしており、これをつけると、符号付き整数のオーバーフローを定義済みの挙動とするようにコンパイラに強制できる。
(ただし、INT_MINを-1で割った場合のみ、依然として未定義となる)

http://blog-ja.intransient.info/2011/05/c-13.html
コメント1件

217
デフォルトの名無しさん[sage]   投稿日:2015/03/29 12:02:18  ID:GySB0qzL.net(5)
1行目の結論が意味わからん
符号なし以上に早くなるようには思えないんだけど

>しかしC11(ISO/IEC 9899-2011)だからそれ以前のコンパイラは違うかもしれない。
ちなみに符号なしでオーバーフローしないってのはC90からすでにあったはず
少なくともC99にはある

JISX3010:2003(C99) P.25 6.2.5 型
符号無しオペランドを含む計算は,決してオーバフローしない。
すなわち,結果を符号無し整数型で表現できないときは,その型で表現しうる最大値より1 だけ大きい数を法とする剰余を結果とする。
コメント1件

218
デフォルトの名無しさん[]   投稿日:2015/03/29 12:05:40  ID:PjXq8DMp.net(11)
>217
CPUの加算や減算の機能に丸投げが最速だろう。リターン値を規定しまうとそのチェックが必要となる。
同様のことはたとえば浮動小数点数でもありえる。詳細は知らないが。

219
デフォルトの名無しさん[]   投稿日:2015/03/29 12:09:29  ID:PjXq8DMp.net(11)
CPUに丸投げしたら規定通りの動作をするCPUならそのままでよく、
規定通りには動作しないCPUで実行した時、規定通りになるように修正する部分を組み込まないといけないので
遅くなり得るということ。
コメント2件

220
デフォルトの名無しさん[sage]   投稿日:2015/03/29 14:05:28  ID:GySB0qzL.net(5)
それでなぜ符号なしよりも早くなりえるの?
最大でも同じにしかならんくない?

221
デフォルトの名無しさん[sage]   投稿日:2015/03/29 14:18:06  ID:5KSECsA5.net
ばかか。

>規定通りには動作しないCPUで実行した時、規定通りになるように修正する部分を組み込まないといけない

こういうハードでは、

>符号あり計算のほうが速度が出る可能性はあるってことだな。

222
206[sage]   投稿日:2015/03/29 14:53:51  ID:L3D4TSkJ.net(5)
>214
資料のご提示、感謝します まさに私が探していた情報です

223
デフォルトの名無しさん[sage]   投稿日:2015/03/29 15:08:53  ID:L3D4TSkJ.net(5)
>219
> 規定通りには動作しないCPUで実行した時、規定通りになるように修正する部分を組み込まないといけないので遅くなり得るということ。

いまの話の流れで、ハードウェアの正常動作が保証されないことを含めて
C/C++の規格や動きを議論しても無意味ではないだろうか
フォールトトレラント系の話がしたいのなら話題を明示的に区別するべき

224
デフォルトの名無しさん[sage]   投稿日:2015/03/29 15:16:48  ID:GySB0qzL.net(5)
符号なし計算については何かしら修正処理が必要だけど
符号ありについてはオーバーフローを無視してよければ修正処理が必要ないようなハードウェアなら
という前提か
いったいどんなアーキテクチャなんだ

225
デフォルトの名無しさん[]   投稿日:2015/03/29 17:53:11  ID:PjXq8DMp.net(11)
コンパイラ側で応答を規定したら、ハードウェア動作の差を埋める必要があるだろ。



ビッグエンディアンとリトルエンディアン - ソフトウェアエンジニアリング - Torutk
データ交換で困ること
リトルエンディアンとビッグエンディアンの間でメモリの内容を交換する場合は、メモリの内容を正しく解釈するためにはどちらかがバイト順番を並び替える必要があります。
インターネットでは「ネットワークバイトオーダー(ビッグエンディアン)」とすることが多いです。
http://www.torutk.com/projects/swe/wiki/ビッグエンディアンとリトルエンディアン


ARMの浮動小数点演算
Floating Point Emulation (FPE)
浮動小数点命令を含んだコードを生成し、それを浮動小数点演算コプロセッサを持たないハードウェアで実行した場合、未定義命令例外や不当命令例外が発生します。
その例外をキャッチして、浮動小数点演算をソフトウェアでエミュレートし、もとのコンテキストに復帰する方法です。
Linuxシステムでは、ユーザランドで実行されるアプリケーションコードが浮動小数点命令を含んでいた場合、Linuxカーネルが例外をキャッチしてFPEをおこないます。
浮動小数点演算コプロセッサを持っていても、持っていなくても同じコードが使用できるのは、ソフトウェアライブラリを使用する場合と同じですが、
浮動小数点演算コプロセッサを持っているハードウェアの場合、高速に演算を実行できます。
一方で、浮動小数点演算コプロセッサを持っていない場合、毎回例外とコンテキストスイッチが発生するため、非常に遅くなります。
http://www.oidon.net/linux/arm-floating-point


インテルR XeonR プロセッサーとインテルR Xeon Phi? コプロセッサーの浮動小数点演算の違い | iSUS
最も大きな違いは浮動小数点例外の処理です。インテルR Xeon Phi? コプロセッサーのベクトル浮動小数点ユニットはフラグをセットしますが、
浮動小数点例外のトラップはサポートしません。VXCSR レジスターの対応するビットは保護されています。このビットを変更しようとするとセグメンテーション・フォルトが発生します。
http://www.isus.jp/article/mic-article/differences-in-floating-p...

226
デフォルトの名無しさん[sage]   投稿日:2015/03/29 20:06:36  ID:GySB0qzL.net(5)
>符号なしではオーバーフローが未定義ではないということは、符号あり計算のほうが速度が出る可能性はあるってことだな。
これへのつながりが全く分からんので符号ありと符号なしで何の差がでるのかをもう少し解説してほしい

227
デフォルトの名無しさん[]   投稿日:2015/03/29 20:14:32  ID:PjXq8DMp.net(11)
たとえば、文字列・バイト列データはビッグエンディアンに限ると言語で規定してしまえば、
直接ハードウェアから受け渡しされるデータはリトルエンディアンの可能性もありえるから
それを修正する部分を組み込まないといけないだろ。

228
デフォルトの名無しさん[sage]   投稿日:2015/03/29 20:49:37  ID:L3D4TSkJ.net(5)
いや、だから「たとえば―」ではなくて、直接に、符号無し整数データや符号付き整数データが操作されるときに
データの流れやCPUのどんなインプリが速度に影響を与える‥とか、そういう内容で説明しないと
無駄にわかりにくいだけだろう

229
デフォルトの名無しさん[]   投稿日:2015/03/29 20:53:05  ID:PjXq8DMp.net(11)
なにが理解されないのかが理解できない。
CPUの四則演算を直接利用すると、CPUの四則演算を演算前後で補正かけて利用するとき
前者のほうが高速動作するだろう。
前者はリターン値はハードウェア依存で、後者は言語で規定。
コメント1件

230
デフォルトの名無しさん[sage]   投稿日:2015/03/29 20:54:35  ID:fSK0AMUw.net
signed で負数が1の補数でCが動いている、という話もきかないし、signed/unsigned それぞれのために1の補数と2の補数が共存している系もきいたことがないし
考えてもしかたがないことじゃないか?

231
デフォルトの名無しさん[sage]   投稿日:2015/03/29 21:31:13  ID:GySB0qzL.net(5)
>229
すまんね なんか一番最初の前提を読み間違えていたようだ
符号付きでもオーバーフローを定義済みの挙動とすると符号無しよりはやくなる
と読んでしまっていた

説明してくれていたのは
仕様で未定義の部分が多ければ、その方が実装の自由度が大きい
だから符号付きはオーバーフロー時の動作はHWが自由にできるから速くできる可能性があるってことね
やっとわかりましたありがとう

232
デフォルトの名無しさん[sage]   投稿日:2015/03/29 22:12:51  ID:L3D4TSkJ.net(5)
【符号無し整数データの演算】
(言語仕様に適合するように)オーバーフロー発生時の処理をソフトでインプリしなければならず
そのオーバーヘッドのために処理速度が遅くなる可能性がある

【符号付き整数データの演算】
CPUが備える命令の実行結果を直接に利用すればよいので処理速度が速い

要点だけで説明すればこういうことが言いたかったのか、と想像

233
デフォルトの名無しさん[]   投稿日:2015/03/29 23:14:25  ID:PjXq8DMp.net(11)
自分は言語仕様に詳しかったり拘っていなかったので。
なんとなくunsignedのほうが高速動作するんじゃないかと思っていたが。
ループで0以上しか扱わないのに添字intを使うのもよくあるがこれには言語仕様による根拠があるのかもしれないと思った。
ほとんど場合で影響なくても遅くなりうる可能性があるからなあ。

234
デフォルトの名無しさん[sage]   投稿日:2015/03/30 00:09:04  ID:Cu+BvQPL.net
そもそも符合無しのオーバーフローのために余分なコードを入れなきゃならないCPUなんて無いだろう
可能性だけの話なんて無意味

235
デフォルトの名無しさん[sage]   投稿日:2015/03/30 01:18:06  ID:vd5gzrat.net(2)
unsigned はラップアラウンドする。
8bitなら、255の次は、0になる

タイマーなどに使うか、特殊なビット演算用で、
普通の4則演算では使わない

配列の[i]インデックスなどには、
普通に、signed intを使う

236
デフォルトの名無しさん[sage]   投稿日:2015/03/30 03:21:22  ID:AKJsrmAN.net
インデックスにsignedを使うって事は
if(i < 0) {・・・}
なんてフェイルセーフ入れてんの?

237
デフォルトの名無しさん[sage]   投稿日:2015/03/30 03:32:57  ID:Ee2yddLD.net
配列のindexはsize_tって決まってたと思うんだけど

238
232[sage]   投稿日:2015/03/30 06:06:09  ID:vd5gzrat.net(2)
size_t だったか

239
デフォルトの名無しさん[]   投稿日:2015/03/30 06:34:10  ID:srztvLsH.net
メモリアクセスは正負は関係なく同一ビット列なら同じ参照先だろ?
コメント1件

240
デフォルトの名無しさん[sage]   投稿日:2015/03/30 12:23:42  ID:vamG2xl1.net
急に何言ってるの
新しい質問なの?

241
デフォルトの名無しさん[sage]   投稿日:2015/03/30 23:23:44  ID:/CgEMBWR.net
>239
int a[256]; char s = -1; unsigned char us = (unsigned char) s;
printf("--\n");
printf("%p <-- &a[ 0]\n", &a[ 0]);
printf("%p <-- &a[ -1]\n", &a[ -1]);
printf("%p <-- &a[255]\n", &a[255]);
printf("--\n");
printf("%p <-- &a[%d]\n", &a[s], s);
printf("%p <-- &a[%d]\n", &a[us], us);

を実行したら
> --
> 0xbf9fd180 <-- &a[ 0]
> 0xbf9fd17c <-- &a[ -1]
> 0xbf9fd57c <-- &a[255]
> --
> 0xbf9fd17c <-- &a[-1]
> 0xbf9fd57c <-- &a[255]
となった
コメント1件

242
デフォルトの名無しさん[sage]   投稿日:2015/03/31 09:41:15  ID:IugrT7n6.net
>241
流れがよくわからんけど、やりたいのはこう?
main()
{
char a[256];
unsigned char s = -1;

printf("%p a[255]\n", &a[255]);
printf("%p a[-1]\n", &a[s]);
}

/*
* ./a.out
* 0x7fffcd9f0e6f a[255]
* 0x7fffcd9f0e6f a[-1]
*/
コメント1件

243
デフォルトの名無しさん[sage]   投稿日:2015/03/31 11:06:46  ID:HeIxUMFm.net
>242
その場合
&a[256]はおkだけど&a[-1]は未定義だった気がする

244
デフォルトの名無しさん[sage]   投稿日:2015/03/31 21:15:25  ID:NYpgTAud.net
少し上で、unsignedの演算で結果がオーバーフローした時の処理が問題になってましたが。
リンク先の規格に、

〜 結果を符号無し整数型で表現できないときは、
その型で表現しうる最大値より1だけ大きい数を法とする剰余を結果とする。

ってありますから、計算結果がオーバーフローしたら、アセンブラレベルでは
Carryを無視して32bitだけを取り出せばよいわけですから(int:32bit時)
そんなに煩雑な処理を追加する必要はないと思います。
CPUによるだろうけど、たかだか数命令くらいではないかな?

0xFFFFFFFF + 0xFFFFFFFE = 0x1FFFFFFFD
よって0x100000000を法とする剰余0xFFFFFFFDを返せばOK
コメント3件

245
デフォルトの名無しさん[sage]   投稿日:2015/03/31 21:50:03  ID:meXl7bV+.net
誰も処理の絶対量は気にしてない 相対量の話をしていた
しかもあくまで可能性の話だけだったので実際存在する処理系やHWでどうだというのは関係ない

まあだからこそ大した意味のない話だったともいえるが

246
デフォルトの名無しさん[sage]   投稿日:2015/04/01 09:00:37  ID:3aukNige.net
>244
carryを無視して32bit取り出せばいいcpuは、もともと問題にしてない
上の>216はそうならないcpuがある場合の話。はっきりい言って無意味
コメント1件

247
デフォルトの名無しさん[sage]   投稿日:2015/04/01 15:21:58  ID:SQPSJK5O.net(2)
>246
> >244
> carryを無視して32bit取り出せばいいcpuは、もともと問題にしてない
話が進むと後付けで条件をだしてくる奴?
「もともと問題にしてない」というなら、どのレスの、どの書き込みでそう書かれてるか示してみ

248
デフォルトの名無しさん[sage]   投稿日:2015/04/01 15:29:30  ID:IHXA7IXr.net
>219がまんまそれを言ってるんじゃないの
コメント1件

249
デフォルトの名無しさん[sage]   投稿日:2015/04/01 19:16:36  ID:SQPSJK5O.net(2)
>248
216は「(言語の)規格通りの動作をする(しない)CPU」って書くべきだよな
その後のレス読んで、規定通りに動作しないというH/Wのトラブルの話と思ってたわ
サンクス!

>244
このオーバーフロー時の動作って
特定のアーキテクチャ(x86とかSPARCとか)の話なの?それとも一般的なCPUの動作?
マシン語に疎くてスマン

250
デフォルトの名無しさん[sage]   投稿日:2015/04/03 04:59:57  ID:EdqVb1x3.net
しかし、この話は本当によく出るな
データ型の曖昧な規格に悩まされる人がいかに多いかがよくわかる

251
デフォルトの名無しさん[sage]   投稿日:2015/04/06 20:55:14  ID:TiB43yfl.net
あれは失敗だったな。とくにサイズ。
charは8bit、shortは16bit、intは32bit、longは64bit、と明確に決めておくべきだったな。
その上で、コンパイラは全ての型を実装しなくてもかまわない、としておくべきだった。
コメント3件

252
デフォルトの名無しさん[sage]   投稿日:2015/04/06 20:56:14  ID:GsXEUmUF.net(2)
いやいや型が実装されてない方が困るだろ
コメント1件

253
デフォルトの名無しさん[sage]   投稿日:2015/04/06 21:15:01  ID:MS5/fcmB.net
別に困らないと思うけど?(´・ω・`)
どんな時に困るの?(´・ω・`)

254
デフォルトの名無しさん[sage]   投稿日:2015/04/06 21:16:07  ID:GsXEUmUF.net(2)
型を使おうとしたときに困る
コメント2件

255
デフォルトの名無しさん[sage]   投稿日:2015/04/06 21:32:07  ID:PTrbisMT.net
どの型も実装されていない可能性があるなんていったら
可搬性を確保するのが今より更に面倒になりそう
コメント1件

256
デフォルトの名無しさん[sage]   投稿日:2015/04/06 21:34:16  ID:Vdk88DGT.net
UNIXやCが育ったPDPシリーズには12、18、36bitなどのバリエーションもあり
K&Rではintはマシンの自然な処理サイズとだけ規定されていた
(さらに言えばcharが8bitとも限らない)
そういう歴史の上で書かれたCのソースコードに対して、いきなりintを32bitしか認めないと切り捨ててしまうと
あちこちで互換性の問題が噴出するだろう
ソフト資産継承の点から無理な相談ではないかな?

257
デフォルトの名無しさん[sage]   投稿日:2015/04/06 21:35:00  ID:1b9kLnNh.net
intが32bitなんて今だから言える話だし
20年以上も前から存在する言語だからそこらへんはね

258
デフォルトの名無しさん[sage]   投稿日:2015/04/07 09:16:39  ID:hBeZALFs.net(3)
>254
charとintで処理できない場合って、そんなにあるかな?(´・ω・`)

>255
まあ、浸透してしまったから仕方ないけど、そんなにCに拘らなくても
いいんじゃないかな?(´・ω・`)

259
デフォルトの名無しさん[sage]   投稿日:2015/04/07 09:22:50  ID:pdohDM9u.net
そのintやcharすらない可能性を考慮しないのか

260
デフォルトの名無しさん[sage]   投稿日:2015/04/07 13:38:08  ID:hBeZALFs.net(3)
charとintがない?それはCじゃないから、気にしなくてもいいんじゃないかな?(´・ω・`)
コメント1件

261
デフォルトの名無しさん[sage]   投稿日:2015/04/07 14:42:12  ID:Tt/PIfub.net
>260
>>251
>> その上で、コンパイラは全ての型を実装しなくてもかまわない、としておくべきだった。

262
デフォルトの名無しさん[sage]   投稿日:2015/04/07 17:13:21  ID:hBeZALFs.net(3)
>251 が何か言ったからってCが変になる訳じゃないよね?(´・ω・`)
charとintがないなら、それはCじゃない(キリッよね?(´・ω・`)
コメント1件

263
デフォルトの名無しさん[sage]   投稿日:2015/04/07 17:54:24  ID:i6pEMRTg.net(2)
>262
>254-255,256はCが今と違い全ての型の実装有無がコンパイラ依存とした場合に(>251)困る例は何があるか(>252-253)
という話への回答でしょ?レス指定したから順番に落ち着いてもう一回レス読み直してみてね?

264
デフォルトの名無しさん[sage]   投稿日:2015/04/07 19:37:42  ID:djs4Gk4G.net(3)
非現実的な定義をしておいて、「エヘン!俺様の勝ちぃ〜!!!」て
言うのが流行ってるの?(´・ω・`)
コメント1件

265
デフォルトの名無しさん[sage]   投稿日:2015/04/07 19:52:07  ID:/U9ZAOiy.net(3)
>264
memset() で double やポインタを初期化しているつもりなのも、十分非現実的だよ

266
デフォルトの名無しさん[sage]   投稿日:2015/04/07 19:57:02  ID:djs4Gk4G.net(3)
その初期化が、いずれはその値を演算によって望むものに変えたいというなら
間違っている可能性もあるけど、単純に「まだ、何も入れていない」という状態を
設定していて、いずれは新たな値を上書きする、という意味での初期化なら100%
正しい初期化だよね?(´・ω・`)
コメント1件

267
デフォルトの名無しさん[sage]   投稿日:2015/04/07 19:58:41  ID:/U9ZAOiy.net(3)
>266
そんな初期化をする必要があるのか?

268
デフォルトの名無しさん[sage]   投稿日:2015/04/07 20:14:26  ID:djs4Gk4G.net(3)
君は経験が乏しくてやったことがないだろうけど、普通のプログラマなら
大抵は経験してるよ?(´・ω・`)

269
デフォルトの名無しさん[sage]   投稿日:2015/04/07 21:03:19  ID:i6pEMRTg.net(2)
ただの無駄なうえ
意味のない値にもかかわらず初期化しているように見えてしまう可能性があるので害悪

270
デフォルトの名無しさん[sage]   投稿日:2015/04/07 21:26:52  ID:/U9ZAOiy.net(3)
free() する直前でも、つかわなくなったらその構造体のメンバに NULL を入れるようには書いてしまうなぁ‥

271
デフォルトの名無しさん[sage]   投稿日:2015/04/08 00:11:05  ID:bms3DTdi.net
>charは8bit、shortは16bit、intは32bit、longは64bit、と明確に決めておくべきだったな。
>その上で、コンパイラは全ての型を実装しなくてもかまわない、としておくべきだった。

これにたいして、特定のコンパイラで
charやintが無ければ動かなくなるから困るというが、
動かなくてかまわないんだよ。
そのマシンでは扱えない型なんだから。
むしろ、むりして動くほうが困る。
intが16bitか32bitか64bitか分かりません、のほうが困る。
どうせ移植性がない。
コメント1件

272
デフォルトの名無しさん[sage]   投稿日:2015/04/08 01:31:11  ID:qnslIA4C.net
厳密に何ビットの型が欲しいとかなら
int64_tとか環境で用意されてるtypedefされた型使うでしょ

273
デフォルトの名無しさん[sage]   投稿日:2015/04/08 07:56:10  ID:Ll2kXDCr.net
>271
Cプログラマとして言えば、その環境で自然なコードが生成されるのが望ましい
からそういう発想にはならない
稀にbit数に依存するコードも書くけど、そうでない場合は圧倒的に多いから

274
デフォルトの名無しさん[sage]   投稿日:2015/04/08 08:17:10  ID:3GDRMldd.net
各型の上限or下限は決まってるんだからそれを考慮したうえでコード書くのが普通だろう
もちろんintが16bitのものは対象外 とか前提にすることもあるだろうがつまりちゃんと考慮してるってこと
intのサイズが可変だから移植性がないというのは書いたコードが悪いだけだろう

275
デフォルトの名無しさん[sage]   投稿日:2015/04/08 08:23:05  ID:rJ1QxPv7.net
まあ普通はintN_tだよな
intなんか使わないし悩む意味がわからん

276
デフォルトの名無しさん[sage]   投稿日:2015/04/08 10:32:04  ID:QLYO7z6z.net
移植性/可搬性はなくてよい、処理系依存で構わないっていうプログラマが世の多数派だったなら
ANSI(だっけ?)もCの規格化・標準化は行わなかっただろう

277
デフォルトの名無しさん[sage]   投稿日:2015/04/08 18:54:41  ID:TrrKWYIM.net
変数のサイズに依存するのだったら、assert() で明示することにしている

278
デフォルトの名無しさん[]   投稿日:2015/04/09 06:47:12  ID:LgkcGWd6F
テンプレート関数の部分特殊化が分かりません

279
デフォルトの名無しさん[sage]   投稿日:2015/04/10 06:49:08  ID:nHOYt1IP.net
static_assert

280
デフォルトの名無しさん[sage]   投稿日:2015/04/10 17:05:30  ID:nxaXc56W.net
クラスで質問です
クラスのメンバ関数で色々な関数内で頻繁に呼び出して使うようなものがあるとします

その場合、面倒なのでグローバルにしちゃうのは良くないんでしょうか
その都度インスタンス化して呼び出すのか普通なんでしょうか
コメント2件

281
デフォルトの名無しさん[sage]   投稿日:2015/04/10 19:03:54  ID:6mfRBVMy.net
>280
ポリシー次第だけど、純粋な関数ならグローバルでいい
コメント2件

282
デフォルトの名無しさん[sage]   投稿日:2015/04/10 20:11:07  ID:D6HkliCl.net(2)
>281
純粋という意味がわからなかったですが、オブジェクトをグローバルにしちゃって
メンバ関数を呼びやすくしても、別にいいってことですよね
趣味でやってるのであまり気にしないことにします、ありがとう

283
デフォルトの名無しさん[sage]   投稿日:2015/04/10 20:18:07  ID:78c5foiz.net
.NET(VC++)の質問です。スレチの場合は誘導頂けると助かります。

フォームを並べてイベントをコピーしようとしているのですが、
元のイベント関数のハンドラが取れず、上手く行きません。
解決策があれば教えてください。

やりたいこと:
チェックボックス等のフォームをデザイナで指定し、イベント関数もデザイナで指定します。
プログラムでこのチェックボックス等を10個ほどにコピーし、並べます。
このときにプロパティ等はコピーできますが、イベント関数がコピーできません。

デザイナで頭1つだけ指定するのは、位置決めが楽だからです。
ついでにイベントもそこに書いて、これをコピーしようとしています。
ところがEventInfo::GetRaiseMethodではnullが返ってきてしまいます。
ハンドラさえ取れれば以下と組み合わせて上手く行くはずです。
https://msdn.microsoft.com/ja-jp/library/ms228976%28v=vs.110%29.aspx
コメント1件

284
デフォルトの名無しさん[sage]   投稿日:2015/04/10 20:18:38  ID:D6HkliCl.net(2)
>281
申し訳ない勘違いしてました、純粋の意味わかりました
確かに拘らなくてもいいかもしれないですね

285
デフォルトの名無しさん[sage]   投稿日:2015/04/10 20:25:38  ID:AgT+3q87.net
>280
その都度インスタンス化って事はクラス外の関数からも頻繁に呼ばれてるって事だろうから
その関数を独立させる

286
279[sage]   投稿日:2015/04/11 19:55:43  ID:rfVEU9W7.net(2)
ちなみにVC#だと以下でいけるのですが、VC++だと何故か駄目です。
http://stackoverflow.com/questions/6055038/how-to-clone-control-event-...

前から困っている点で、とらいえずいちいち書いて対応していますが、
見ていて汚いので書き直したいと思っています。
気長に待っていますので、どなたか対策をご存じの方はレスよろしくお願いします。
コメント1件

287
デフォルトの名無しさん[sage]   投稿日:2015/04/11 19:58:29  ID:ijD8XqjA.net
>286
あなたが使ってるのはC++ではなくC++/CLIです
くだすれC++/CLI(初心者用)part2
こちらへ移動を
コメント2件

288
279[sage]   投稿日:2015/04/11 20:54:16  ID:rfVEU9W7.net(2)
>287
了解しました。>283,282は取り下げます。
CUDA関連スレかと思っていましたが、中身は完全にVC++のようです。
向こうで質問し直します。ありがとうございました。

289
279[sage]   投稿日:2015/04/12 03:42:43  ID:DBf5x0AF.net
>287
向こうで質問した結果、即答され、解決しました。
ありがとうございました。

290
デフォルトの名無しさん[]   投稿日:2015/04/13 23:13:16  ID:yWe3L8ho.net
最近はプレインクリメントよりポストインクリメント使うべきなの?

291
デフォルトの名無しさん[sage]   投稿日:2015/04/13 23:16:55  ID:gGrqgMm6.net
まともな処理系なら、ちゃんと最適化してくれるからプリでもポストでもお好きなように?(´・ω・`)

292
デフォルトの名無しさん[sage]   投稿日:2015/04/15 00:36:50  ID:9YI/hGho.net(2)
printfでダブルクォーテーションを含む文字列を出力したいのですが、どうすればいいか教えて欲しいです

例としては
「あ"あ"あ"」と出力したいという感じです

293
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/04/15 00:41:01  ID:Be/6smJn.net(2)
"あ\"あ\"あ\""
コメント1件

294
デフォルトの名無しさん[sage]   投稿日:2015/04/15 00:41:06  ID:LX/U9UXu.net
\"

295
デフォルトの名無しさん[sage]   投稿日:2015/04/15 00:41:38  ID:Mlfw56xY.net
printf("あ\"あ\"あ\"");

296
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/04/15 00:44:13  ID:Be/6smJn.net(2)
\に続く文字に特別な意味を持たせる、エスケープシーケンスってやつだな

297
デフォルトの名無しさん[sage]   投稿日:2015/04/15 00:53:30  ID:9YI/hGho.net(2)
>293-296
ありがとうございます!
助かりました

298
デフォルトの名無しさん[sage]   投稿日:2015/04/15 23:43:39  ID:Obn4k40R.net(2)
創価/学会
草加/せんべい
相加/相乗平均
-
人間の書き手でも難しい「そうか」の書き分けを難なくこなすATOK2010
素晴らしいじゃないか!
これならあと5年は使えるな

299
294[sage]   投稿日:2015/04/15 23:44:29  ID:Obn4k40R.net(2)
すみません
誤爆しました

300
デフォルトの名無しさん[sage]   投稿日:2015/04/15 23:52:34  ID:/EekHbuv.net
そうか

301
デフォルトの名無しさん[sage]   投稿日:2015/04/16 21:49:21  ID:9rYj+myM.net
草加

302
デフォルトの名無しさん[age]   投稿日:2015/04/17 20:22:53  ID:MoAcY3k3.net
C++ではマクロじゃなくてテンプレート使えって言われますが、
マクロも併用した方がいい場合もあるんでしょうか?
マクロでクラスや関数を作るとDoxygenで見えないのが困るんですよね...
コメント1件

303
デフォルトの名無しさん[sage]   投稿日:2015/04/18 15:33:17  ID:Cuf4FohB.net
コンパイラの機能の足りない時代の遺物なので極力使わない
コメント1件

304
デフォルトの名無しさん[sage]   投稿日:2015/04/18 17:25:13  ID:c7W+WDWi.net
>303
そうなんですか
これからスクラッチ開発するC++はマクロを極力使わないようにします
ありがとうございました

305
デフォルトの名無しさん[sage]   投稿日:2015/04/21 17:10:39  ID:uO4aFmSl.net
さすがにインクルードガードくらいは使うけどね

306
デフォルトの名無しさん[]   投稿日:2015/04/24 03:46:18  ID:bw7JRcc7u
このプログラムを実行するとなぜか8回目以降から計算結果(熱交換量)がおかしくなります。
今の自分の知識ではなぜそうなるか理解できません。もしわかる方がいらっしゃいましたらご教授ください。
パスは1234です。よろしくお願いします
http://www.dotup.org/uploda/www.dotup.org279734.txt.html

307
デフォルトの名無しさん[sage]   投稿日:2015/04/29 13:39:06  ID:jpNn2fx2.net
>302
__FILE__、__LINE__とかを仕込むのはマクロじゃないと出来ない
そういう特殊なの除いたらマクロはなるべく使わない方がいい

308
デフォルトの名無しさん[]   投稿日:2015/05/15 01:59:34  ID:xhvpicim.net
C++の質問なのですが、ムーブコンストラクタを基底クラスのものから委譲することはできないのでしょうか?
http://ideone.com/xeOWCM

baseでは何かリソースを管理していて、ctor/copy/move/dtorを手書きしなければならないとします。
caseA(18行目)において、特殊メンバ関数は全てdefaultですが、これらは自動的に基底クラスの特殊メンバ関数を呼び出しています。
これならいいのですが、sthでもctor/copy/move/dtorを手書きしなければならなくなった場合を考えました。

caseB(23行目)では自分で定義を書きましたが、自動的にコンストラクタが委譲されることはなく、基底クラスは全てデフォルトコンストラクタで初期化されています。
それでは困るので、caseC(34行目)では基底クラスのコンストラクタや代入演算子を委譲してあげることにしました。
しかし、caseCでは、基底クラスにmoveで委譲してしまったので、派生クラスが自分にmoveできなくなってしまいました。(47, 53行目)

基底クラスで使われてないメンバ変数がムーブによって破壊されたとは考えにくいですが、
基底クラスの部分がごっそり破壊された後の派生クラスがまともに動くことは期待できませんし、規格によればムーブ後の変数の中身は未定義です。
お知恵をお貸しいただけるとうれしいです。

309
デフォルトの名無しさん[sage]   投稿日:2015/05/15 02:03:53  ID:kZ3YQu1b.net
Swap

310
デフォルトの名無しさん[sage]   投稿日:2015/05/16 02:48:21  ID:ghTgVRCT.net
解決しました。
N3337 17.6.5.15 Moved-from state of library types
N3337 17.3.26 valid but unspecified state
失礼しました。

311
デフォルトの名無しさん[sage]   投稿日:2015/05/18 01:21:45  ID:5SH9kz+R1
gcov+lcovでカバレッジ取るとき

class Foo {
public:
  Foo();
private:
 std::string foo() const;
};

Foo::Foo() {
}

std::string Foo::foo() const {
 return bar();
}  // ここ

↑コメントつけたとこの行が「0%」って判定されるんだけど、
直し方とかそういうのあるかな?
最適化オプションは-O2でも-O0でも同じ。
-fno-elide-constructors 付けても付けなくても同じ。
コンストラクタの閉じ括弧には0%とも100%とも出ない。

312
デフォルトの名無しさん[]   投稿日:2015/05/19 19:24:52  ID:N5/GZYgz.net
どがつくほどの初心者です。AndroidStudioについての質問なのですが、
クラスファイルにプログラムを書く。 → 後々翻訳とか色々できるようにxmlに文字列を書く。 この認識であっているでしょうか?

313
デフォルトの名無しさん[sage]   投稿日:2015/05/20 21:25:37  ID:PX1Z5WVW.net
C++で、private変数をクラスの後方に置く風潮なのはなぜでしょう?
private,protected,publicの方が、private変数がどういう役割をしているとかいうのがコメントで書かれてるので理解しやすいとおもうのですが・・・
コメント5件

314
デフォルトの名無しさん[sage]   投稿日:2015/05/20 22:11:13  ID:2T6/P0Lm.net
>313
そんな流儀があるのか!あるのか?

315
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/20 22:23:13  ID:TMa82PCT.net
>313
外側からブラックボックスなインターフェイスとして見たときは、
publicなメンバーを先に注目した方が分かりやすい。
実装と仕様の分離。

316
デフォルトの名無しさん[sage]   投稿日:2015/05/20 22:43:12  ID:hnOxWP9iB
>313
クラスの利用者にとってはどんなprivate変数があるかなんてどうでもいいから。
電子レンジはボタン押して動いてくれたらそれでいいだろ。
中身の部品がどうなってるかなんて普通気にしない。
内部状態が変化するかどうかはメソッドのconst/非constでわかる。

317
デフォルトの名無しさん[]   投稿日:2015/05/20 22:43:08  ID:f7ZuyK4S.net
座標が格納された配列またはVectorがあります。
座標は(−3000,-3000)から(3000,3000)の範囲でランダムで分布されています。
1点の座標の半径10以内にある他の座標は平均をとり、1つにまとめます。
このロジックをクールに作られる方おられますでしょうか。

318
デフォルトの名無しさん[sage]   投稿日:2015/05/20 23:26:07  ID:BLE7pvKi.net
>313
private なものを人目に触れる所に置いとくのはおかしい

319
デフォルトの名無しさん[sage]   投稿日:2015/05/21 01:29:32  ID:ZhKmhhGS.net
privateメンバを完全に隠したいならPimplイディオムを使えばよい

320
デフォルトの名無しさん[sage]   投稿日:2015/05/21 09:19:46  ID:xlNH4UEy.net
>313
クラスの後方かどうかより、スコープが広い順に書くだろ

321
デフォルトの名無しさん[sage]   投稿日:2015/05/21 10:04:24  ID:d9D99tdd.net
確実に使用するprivateメンバを一番上
protected, publicの順にしてるわ

322
デフォルトの名無しさん[]   投稿日:2015/05/21 18:17:30  ID:GUG56MZT.net(3)
CRTPって一つの基底クラスに対して
派生クラスが一つに定まるじゃないどすか?
virtualの代わりに使うと速くなるみたいな説明しかないのどすけど
基底クラスから一つしか派生できないのならvirtualの代わりに使う意味が
ないと思うのどすが、どんな役に立つのかおしえてください。

323
デフォルトの名無しさん[sage]   投稿日:2015/05/21 18:24:08  ID:ZnRk/DYk.net(3)
派生クラスは何種類でも作れるだろ
何を勘違いしてるんだ

324
デフォルトの名無しさん[]   投稿日:2015/05/21 18:27:56  ID:GUG56MZT.net(3)
あなたの方こそ勘違いしているのでは

325
デフォルトの名無しさん[sage]   投稿日:2015/05/21 18:37:01  ID:ZnRk/DYk.net(3)
http://ideone.com/mJJDpH
こういうことじゃないの?
Super1をさらに継承するパターンのことを言ってるのか?
CRTPはコンパイル時に呼び出し先が一意に決まるものにしか使えないぞ

326
デフォルトの名無しさん[]   投稿日:2015/05/21 18:43:30  ID:GUG56MZT.net(3)
だからCRTP<Super2>とCRTP<Super1>が別物なのに
virtualの代わりに使えても意味ないだろといっているのどすよ

327
デフォルトの名無しさん[sage]   投稿日:2015/05/21 18:58:37  ID:ZnRk/DYk.net(3)
virtualの代わりではないな
あくまでコンパイル時の静的な多態だから

328
デフォルトの名無しさん[]   投稿日:2015/05/21 19:07:24  ID:WhiRQ/oN.net
あれか。
ATLみたいなやつか。

329
デフォルトの名無しさん[sage]   投稿日:2015/05/23 11:05:41  ID:oljntYsR.net(4)
int rc1 = func1();
int rc2 = func2();
int rc3 = func3();
int rc4 = func4();
int rc5 = func5();

if(rc1 == rc2 == rc3 == rc4== rc5 == 0){
  // こういうif判定したいんですが、
  // これだとエラーします。
}
最もスッキリした書き方教えて下さい。

330
デフォルトの名無しさん[sage]   投稿日:2015/05/23 11:48:26  ID:UM9/stbq.net
int rc = func1();
rc |= func2();
rc |= func3();
rc |= func4();
rc |= func5();
if (rc == 0) { }

331
デフォルトの名無しさん[sage]   投稿日:2015/05/23 13:23:16  ID:LC8CFkrw0
std::unique_ptr<Hoge> func() {
  std::unique_ptr<Hoge> hoge(new Hoge());
  return hoge;
}
std::unique_ptr<Hoge> func() {
  const std::unique_ptr<Hoge> hoge(new Hoge());
  return hoge;
}

auto fuga = func(); とやるとき
下のconst付きの方だとコンパイルエラーになるのってなんでですか?
VC2012です。

332
デフォルトの名無しさん[sage]   投稿日:2015/05/23 14:24:37  ID:oljntYsR.net(4)
レスありがとうございます。
利用させていただきます

333
デフォルトの名無しさん[sage]   投稿日:2015/05/23 20:44:53  ID:oljntYsR.net(4)
wchar_t c = 'A';
wchar_t c = L'A';
どちらも行けるんですが、どっちが正しいのでしょうか?


334
デフォルトの名無しさん[sage]   投稿日:2015/05/23 20:45:50  ID:ojXlCtK2.net(2)

335
デフォルトの名無しさん[sage]   投稿日:2015/05/23 20:53:26  ID:oljntYsR.net(4)
>334
レスありがとうございます。
下ですか。上でも同じ結果になるんですが、なぜでしょうか?
良く分かりません。

336
デフォルトの名無しさん[sage]   投稿日:2015/05/23 20:56:52  ID:ojXlCtK2.net(2)
ANSIとUnicodeで同じコードの文字の場合、上でも下でもOK。
コメント1件

337
デフォルトの名無しさん[sage]   投稿日:2015/05/23 20:59:13  ID:N5mcUzwL.net
'A' = 0x41
L'A' = 0x0041
コメント1件

338
デフォルトの名無しさん[sage]   投稿日:2015/05/23 23:39:40  ID:3og+zCpJ.net
どのクラスでも同じ Context オブジェクトを参照し処理を行う場合に、
Context の受け取り方(参照の仕方)を考えると次の 2 つが思いつきました。

1. クラスに const Context* 型のメンバを用意し、適当な場所で SetCtx() でコンテキストをセットする。
 つまり、実際の処理を行うメソッドでは自クラスのメンバから Context にアクセスできる。
2. クラスメソッドの引数に const Context& を用意してメソッド内で Context にアクセスできるようにする

選択の基準としてそれぞれのメリット、デメリットを挙げてみました。
1. はデメリット無し?あえて言えば const Context* を保持しているクラスで破壊されるリスクがある?
 でもそれって shared_ptr で持たせればリスクではない?
2. はデメリットとしてメソッドにいちいち const Context& を用意しないといけない。
 メリットは Context にアクセスできる範囲が狭い。(1.は Context を使用しないメソッドでも
 Context にアクセスできる)

1. 2. どちらを選択するかの決め手が分かりません。ご教授頂けたらと思います。

339
デフォルトの名無しさん[sage]   投稿日:2015/05/23 23:42:37  ID:pR56aZiN.net
シングルトンでもモノステートでもお好きに

340
デフォルトの名無しさん[sage]   投稿日:2015/05/24 07:55:36  ID:hp4TWV5c.net
>336>337
解説ありがとうございました。
よく理解できました。

341
デフォルトの名無しさん[sage]   投稿日:2015/05/26 11:49:56  ID:WpucxMlI.net
ダイアログを表示してEDITTEXTで入力した文を別のダイアログに作った表に表示させたいんだけどどんなふうにかけばいいですか?
コメント1件

342
デフォルトの名無しさん[sage]   投稿日:2015/05/26 16:28:19  ID:UK6dK39h.net

343
デフォルトの名無しさん[sage]   投稿日:2015/05/27 19:12:21  ID:YLAut6HO.net(2)
Visual Studio Community 2013を使ってるのですが
デバッグビルドするとSTLのチェック機能やら他のいろいろな理由で実行速度が遅くなりますよね
デバッグ時でも、プログラムの部分的な箇所については速度の低下を抑えるという方法はありますか?

具体的には、自分の場合、ひとつのファイルからデータを読み込んで処理するのに
Debug版で800ミリ秒、Rlease版で40ミリ秒かかっていて、
ある処理の実行には20個ほどのファイルが必要で20秒程余分に時間がかかります。
なのでこのデータ読み取り部分の速度をデバッグ版でも高めたい、ということです。
コメント1件

344
デフォルトの名無しさん[]   投稿日:2015/05/27 19:28:04  ID:fEfNE1Dn.net(2)
デバッグは追加情報入れてるんだから遅くて当然。
速いかデバッグかの一択。
コメント1件

345
デフォルトの名無しさん[]   投稿日:2015/05/27 19:42:11  ID:nCq7jW/A.net(5)
4月からcを始めた大学生です。講義でお釣りの枚数を数えるプログラムを作ったのですが


int onedan = 1234, shiharai = 10000;
int sa, amari;

/******************************* scanf */

printf("Price? => ");scanf("%d",&amp;onedan);
printf("Payment? => "); scanf("%d",&amp;shiharai);
printf("----\n");

/******************************* balance */
amari = shiharai3 - onedan;
printf("price = %d, ",onedan);
printf("payment = %d, balance = %d\n",shiharai3,sa);
printf("----\n");

ここで amari  の部分に sa と入力すべきだったのを間違えてしまいました。
結果として、出力したデータでは、balance = の部分の数字が1555315592
、1563462560と乱数の様に表示されています。

一体何が行われているのか皆目検討もつきません。どなたかよろしくお願いいたします
コメント1件

346
デフォルトの名無しさん[]   投稿日:2015/05/27 19:46:26  ID:fEfNE1Dn.net(2)
saが未初期化なだけだろ。
メモリ確保時点で必ずしもゼロで初期化されない。
コメント1件

347
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/27 19:48:35  ID:bhmZkUHl.net(5)
>345
saは初期化されてないのでゴミデータが入ってた
コメント1件

348
デフォルトの名無しさん[]   投稿日:2015/05/27 19:49:17  ID:nCq7jW/A.net(5)
>346すみません。未初期化とはいったいなんでしょうか…?

349
デフォルトの名無しさん[]   投稿日:2015/05/27 19:50:41  ID:nCq7jW/A.net(5)
>347ゴミデータとは一体…?ランダムでデータが入るのでしょうか?

350
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/27 19:59:57  ID:bhmZkUHl.net(5)
記憶媒体がデータを記憶する領域は、要らなくなったら再利用される。
領域が使用中かどうかやサイズなどの情報は別のどこかに記録されている。
コメント1件

351
デフォルトの名無しさん[]   投稿日:2015/05/27 20:03:26  ID:nCq7jW/A.net(5)
>350ということはどこかの要らなくなった数列が利用されたということですか…?

352
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/27 20:12:16  ID:bhmZkUHl.net(5)
自動変数の値はCPUのレジスタか、スタック領域に格納される。
スタック領域は山を積み上げたり崩したりするように何度も再利用されている。
なので、ゴミデータが紛れ込むこともある。
コメント1件

353
デフォルトの名無しさん[]   投稿日:2015/05/27 20:14:46  ID:nCq7jW/A.net(5)
>352ありがとうございます。自動変数になってしまった上に、安定しないデータなのでこの出力になったのですね。ありがとうございます

354
デフォルトの名無しさん[sage]   投稿日:2015/05/27 21:18:29  ID:YLAut6HO.net(2)
>344
たとえば翻訳単位で、追加情報を必要としないということを宣言等できないものですか
必要のないところにチェックを課したり情報を追加したりして、結果人間が不便を被っても
それが当たり前、当然というのはあまり腑に落ちません。

デバッグするにしても、最初から全体を見ていくよりは、
対象を絞り込んでその周辺から徐々に視野を広げていくのが一般的でしょうし、
それに適したやり方っていうのは見つからないものですかね。
コメント1件

355
デフォルトの名無しさん[]   投稿日:2015/05/27 21:32:52  ID:20GZswGl.net
初期化しないとゴミが入るの?
なんだこのクソ言語
コメント3件

356
デフォルトの名無しさん[sage]   投稿日:2015/05/27 21:37:03  ID:smb5wI/6a(3)
>354
MT or MD,release or debug, 32 or 64...
の組み合わせた環境を網羅するのがMS流

357
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/27 21:39:06  ID:bhmZkUHl.net(5)
>355
初期化にもコストがかかるからね

358
デフォルトの名無しさん[sage]   投稿日:2015/05/27 21:46:06  ID:smb5wI/6a(3)
>355
不要なケースでやられても無意味でしょ
初期化にもコストがかかるからね
グローバルやstaticは起動時の一回で済むから暗黙的にやってやるか
自動変数は何回呼ばれるか分からないのでコストがかかるから無理だな
という一貫性のなさが糞だなーとは心底思う

359
デフォルトの名無しさん[sage]   投稿日:2015/05/27 21:47:21  ID:smb5wI/6a(3)
> 初期化にもコストがかかるからね
丸かぶり
なんか怖いわ

360
デフォルトの名無しさん[sage]   投稿日:2015/05/27 21:42:49  ID:x5rosGcz.net
ゴミが入るんじゃないゴミだった領域を再利用するエコな言語なんだよ

361
デフォルトの名無しさん[sage]   投稿日:2015/05/27 21:48:58  ID:jSIsBLLL.net(2)
そういや翻訳単位でデバッグ情報いれるとどうなんるんだっけ?
コメント1件

362
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/27 22:17:58  ID:bhmZkUHl.net(5)
>361
ランタイムライブラリが違う

363
デフォルトの名無しさん[sage]   投稿日:2015/05/27 22:23:37  ID:jSIsBLLL.net(2)
malloc/freeするとおかしくなるとかだっけ?
よくわからん。

364
デフォルトの名無しさん[sage]   投稿日:2015/05/28 00:01:48  ID:m+TyS5r+.net
>355
直前に使用されてた値がそのまま残ってるだけ

365
デフォルトの名無しさん[sage]   投稿日:2015/05/28 00:12:14  ID:2DLv23cc.net
リリースビルドでデバッグ情報を付加することも可能だろ。
コメント1件

366
デフォルトの名無しさん[]   投稿日:2015/05/28 00:15:27  ID:Xmw848ss.net(2)
デバッグ情報入ってたらビルド名がリリースなだけ。

367
デフォルトの名無しさん[sage]   投稿日:2015/05/28 00:16:06  ID:AnQe6xX7.net(2)
>343
20秒くらいなら気にすんな

368
デフォルトの名無しさん[]   投稿日:2015/05/28 00:18:17  ID:Xmw848ss.net(2)
デバッグで速度が苦になるなら、リリースビルドして
必要部分だけifとprintfで自前デバッグしたらいい。

369
デフォルトの名無しさん[sage]   投稿日:2015/05/28 00:52:13  ID:uZXtou76f
>365
方便だなー

370
デフォルトの名無しさん[]   投稿日:2015/05/28 00:57:53  ID:CuNSMS4U.net
リリース ビルドをデバッグするには
https://msdn.microsoft.com/ja-jp/library/fsk896zz.aspx

これでいける

371
デフォルトの名無しさん[sage]   投稿日:2015/05/28 05:37:24  ID:yUFQMWm3.net
#define f(x)
#ifdef x
a(x, #x)
#else
b(x, #x)
#endif

みたいなことってできますか

372
デフォルトの名無しさん[sage]   投稿日:2015/05/28 05:46:43  ID:HB8xXEuW.net
#elseのときxは定義されていないから
b(x, #x)なんてできないぞ

373
デフォルトの名無しさん[sage]   投稿日:2015/05/28 06:22:46  ID:/5YfYo57.net
失礼しました b(#x) です

374
デフォルトの名無しさん[sage]   投稿日:2015/05/28 08:01:00  ID:B9gnu8yA.net(2)
b(#x)の#xはfの引数のつもり?
fの引数のスコープは1行分しかないと思うが。

375
デフォルトの名無しさん[sage]   投稿日:2015/05/28 08:02:19  ID:B9gnu8yA.net(2)
IDがgnu

376
デフォルトの名無しさん[sage]   投稿日:2015/05/28 11:45:52  ID:7WYWs3lt.net
#define check(MACRO)
#ifdef MACRO
std::cout << #MACRO << " is defined as " << MACRO << std::endl;
#else
std::cout << #MACRO << " is not defined" << std::endl;
#endif

みたいなことがしたかったんですが無理でしょうか
上記を吐くコードは書けたので問題ありませんが
コメント1件

377
デフォルトの名無しさん[sage]   投稿日:2015/05/28 13:29:51  ID:RdBy8InI.net
「みたいな」がはっきりしないが、まあ無理

378
デフォルトの名無しさん[sage]   投稿日:2015/05/28 15:10:02  ID:QEZThiJ2.net
しばらくC#に行ってて、C++は0xの頃で時間止まってるんだけど
今どうなってんの?
boostとかまだあるん?
コメント1件

379
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/28 15:20:57  ID:BPOchcgZ.net(2)
>378
g++やVSでのサポートでC++11がだいぶ普及してきている。
右辺値参照とか初期化リストとかラムダとか。

380
デフォルトの名無しさん[sage]   投稿日:2015/05/28 15:23:25  ID:AnQe6xX7.net(2)
c++からヘッダーファイルと言う
物が無くなれば物凄くやり易く
なると思う。
コメント1件

381
デフォルトの名無しさん[sage]   投稿日:2015/05/28 15:26:04  ID:BPOchcgZ.net(2)
>380
それはあり得ない

382
デフォルトの名無しさん[sage]   投稿日:2015/05/28 15:47:31  ID:otFcwpTV.net
C++からヘッダーをなくしたのが、C#でありJavaだな。
importやusingが必要な時点であんま変わらんけど、
これらは省略のためで必須ってわけでもないし微妙だな。

383
デフォルトの名無しさん[sage]   投稿日:2015/05/28 16:25:44  ID:BS3T4776.net
うむ 今さらC/C++をいじくるより Java+ とか D- とかを進めるのが賢明

384
デフォルトの名無しさん[sage]   投稿日:2015/05/28 16:51:03  ID:ttn+1yST.net
C++17でモジュールがどうたらって話あるみたいだけど具体的にどういう形になんの?

385
デフォルトの名無しさん[sage]   投稿日:2015/05/28 17:19:15  ID:CtCSkEBs.net
ヘッダーファイルがなくなるってのは、要するにこうか
工程表から材料リストがなくなればものすごくやりやすくなる

???

386
デフォルトの名無しさん[sage]   投稿日:2015/05/28 19:57:17  ID:uGepSntc.net
>376
とりあえず#defineは改行したらそこで終了な
コメント1件

387
デフォルトの名無しさん[sage]   投稿日:2015/05/28 21:42:18  ID:gCuhL1rI.net
頭がくらくらしてくるな。

388
デフォルトの名無しさん[sage]   投稿日:2015/05/29 04:36:20  ID:QmBB8Gwr.net
>386
\を忘れてるだけじゃないのか

389
デフォルトの名無しさん[sage]   投稿日:2015/05/29 04:43:17  ID:ru3QOXEM.net
#ifdef MACRO \
なんてできるの?

390
デフォルトの名無しさん[sage]   投稿日:2015/05/29 08:21:49  ID:VcfS7+TO.net
プリプロが2パスならいけそう

391
デフォルトの名無しさん[sage]   投稿日:2015/05/29 15:32:15  ID:Efq5+4ix.net
#include <functional>

class Item {
public:
static void use();
static void use( Character* target );
static void drop();
};

int main (){
//すべてOK
void ( *pUse1 )() = Item::use;
void ( *pUse2 )( Character* ) = Item::use;
void ( *pDrop )() = Item::drop;

//エラー
std::function< void ( void ) > fUse1 = Item::use;
//エラー
std::function< void ( Character* ) > fUse2 = Item::use;
//OK
std::function< void ( void ) > fDrop = Item::drop;
}

オーバーロードしたstatic変数を代入したいのですが、std::functionに代入できません。
同じ型の関数ポインタには入れられます。
何が間違っているのでしょうか。
コメント2件

392
デフォルトの名無しさん[sage]   投稿日:2015/05/29 17:05:56  ID:0BflXGeZv

393
デフォルトの名無しさん[sage]   投稿日:2015/05/29 18:46:53  ID:gXnjRwZ6.net
useの名前がぶつかってんのかなぁ?
片方名前変えてみたら?

394
デフォルトの名無しさん[sage]   投稿日:2015/05/30 00:26:33  ID:qC/pm06Q.net
>391
キャストすれば入るよ
ラムダ式はさんでもいいけど
コメント1件

395
デフォルトの名無しさん[sage]   投稿日:2015/05/30 20:34:59  ID:h4Yx63EK.net
>394
まじでキャストで行ける?
やり方がわからん。
ソースプリーズ
コメント1件

396
デフォルトの名無しさん[sage]   投稿日:2015/05/31 02:29:37  ID:jd6mwSd4l

397
デフォルトの名無しさん[sage]   投稿日:2015/05/31 16:10:45  ID:456RRL4M.net(3)
初歩的ですみません配列の質問です


const int N =100;
double* K = new double[2 * N];

for (int n = 0; n < N; n++){
K[2 * n] = -2
K[2 * n + 1] = 1
}


Kは2行N列の配列ですよね?後、下のfor文でどのように数値を格納しているのか教えてください><

398
デフォルトの名無しさん[sage]   投稿日:2015/05/31 16:14:18  ID:SZ/HavyK.net
1ループ内で偶数と奇数に分けて代入してる
コメント1件

399
デフォルトの名無しさん[sage]   投稿日:2015/05/31 16:29:02  ID:456RRL4M.net(3)
>398
ありがとうございます
続けてお願いします
例えば、三重対角行列の格納なんですけど

for (int i = 0; i < N; ++i){
for (int j = 0; j < N; ++j){
if (j == i - 1) K[j*N + i] = 1.0 ;
if (j == i) K[j*N + i] = -2.0 ;
if (j == i + 1) K[j*N + i] = 1.0;
}
}

これは対角成分が-2、その上下が1になると分かってるんですが、for文の中のK[j*N +i]ってどういう意味なんですか?

400
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/05/31 16:40:31  ID:t8jPrrOm.net
0≦i,j<Nのとき、f(i,j)=j*N + iで定義される写像f:[0,N)×[0,N)→[0,N×N)が全単射になることを
利用している。一次配列を多次配列のように使うテクニックだね。

401
デフォルトの名無しさん[sage]   投稿日:2015/05/31 17:04:30  ID:2zIxob7P.net
>for文の中のK[j*N +i]ってどういう意味なんですか?
配列Kのj*N +i番目の要素だろ。

402
デフォルトの名無しさん[sage]   投稿日:2015/05/31 17:41:00  ID:456RRL4M.net(3)
385です
ありがろうございました、変な勘違いしてました

403
デフォルトの名無しさん[sage]   投稿日:2015/06/07 18:05:23  ID:lDA49rz+.net
オブジェクト思考の設計の話なんですが、

データを同じ詰め方(set)ができる、数種類のクラスがあったとして、
それぞれに共通のI/Fを持たせたい

素直に考えると、それらの親クラスにI/Fを持たせるのだと思うのだけど、
それら複数のクラスより親を作ることができない制約がある

その場合、どこにI/Fを用意して、どこに実装したらいいですか?

当方、C言語に毛が生えた程度の使い方しかしてこなかったので、
仮装関数用意するとかやったことなく、
どうすればスマートなのかなと

404
デフォルトの名無しさん[sage]   投稿日:2015/06/07 18:08:28  ID:xCcw73lL.net
Facadeパターンでは?

405
デフォルトの名無しさん[sage]   投稿日:2015/06/07 18:43:03  ID:IR8285sC.net
TECHSCOREのFacadeパターンの例を見るたびに
中村くんへの丸投げで中村君が高負荷で倒れないか心配になる

406
デフォルトの名無しさん[age]   投稿日:2015/06/10 21:04:07  ID:EVVFhxwz.net
委譲をされたクラスって解放されるタイミングはいつになる?
委譲したクラスを解放するとデストラクタが呼ばれて
ちゃんと解放される?

407
デフォルトの名無しさん[sage]   投稿日:2015/06/10 23:07:32  ID:hIQNRZvl.net
されなきゃ困る

408
392[age]   投稿日:2015/06/11 00:28:55  ID:phbL6DGJ.net(3)
なんどもすまないが
ポインタで委譲しても当然同じく解放されるよね?

409
デフォルトの名無しさん[sage]   投稿日:2015/06/11 00:33:38  ID:ESr81XRP.net(2)
されるわけねーだろ

410
392[age]   投稿日:2015/06/11 00:42:19  ID:phbL6DGJ.net(3)
deleteいる?

411
デフォルトの名無しさん[sage]   投稿日:2015/06/11 00:43:08  ID:wPKRrOhd.net
なぜいらないと思ったのか

412
デフォルトの名無しさん[sage]   投稿日:2015/06/11 03:45:48  ID:KWkffMj/.net
最少構成で試してみたらいいのに

413
デフォルトの名無しさん[sage]   投稿日:2015/06/11 03:48:02  ID:daO6fC9u.net
それ言ったらほとんどが試してみろで済んじゃう…
コメント1件

414
デフォルトの名無しさん[sage]   投稿日:2015/06/11 03:49:45  ID:ESr81XRP.net(2)
実際それで済む

415
デフォルトの名無しさん[sage]   投稿日:2015/06/11 04:12:46  ID:xl+1bn71.net
>413
試してわからないなら聞くのが普通

416
デフォルトの名無しさん[sage]   投稿日:2015/06/11 10:12:44  ID:MCnGDuRk.net
このレベルで試して検証なんて無理だべ

417
デフォルトの名無しさん[age]   投稿日:2015/06/11 23:40:16  ID:phbL6DGJ.net(3)
C++における宣言と定義と生成の
意味を教えて下さい
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2015/06/12 09:26:21  ID:L7aZuwN6.net
なんで「C++相談室」で聞かないの?(´・ω・`)


419
403[age]   投稿日:2015/06/12 11:29:09  ID:ZzMiSOW4.net
ここで聞いても良いじゃないか(´・ω・`)

420
デフォルトの名無しさん[sage]   投稿日:2015/06/12 12:55:42  ID:Qvm3BcbJ.net
何で調べないの?

421
デフォルトの名無しさん[sage]   投稿日:2015/06/12 16:53:56  ID:GqZkqTHr.net(2)
なんで教えてくれないの?

422
デフォルトの名無しさん[sage]   投稿日:2015/06/12 21:47:39  ID:ju6p67Z1.net
>417
宣言と定義はともかく生成というのはなんだろう?instantiate?

423
デフォルトの名無しさん[sage]   投稿日:2015/06/12 21:58:17  ID:sUePbdZr.net
せめて入門書読んでから言語触ろうよ…
掲示板で聞くまでもない質問スレじゃないんだぞ

424
デフォルトの名無しさん[sage]   投稿日:2015/06/12 22:35:35  ID:GqZkqTHr.net(2)
あほかそれじゃスレが伸びないだろ。

425
デフォルトの名無しさん[sage]   投稿日:2015/06/12 23:44:10  ID:mLuCQ1ez.net
別に伸ばすためのスレじゃないしな

426
デフォルトの名無しさん[sage]   投稿日:2015/06/13 01:13:45  ID:05Jv17Sn.net
おるわおるわw
「じゃあこのスレいらないよね?」ってやつw

いらないから自分で調べてね^^

427
デフォルトの名無しさん[age]   投稿日:2015/06/15 02:24:44  ID:YoDUUVOd.net(6)
////////////main.cpp
#include <iostream>
#include "singltonClass.h"
#include "TestClass.h"

int main()
{
singltonClass* test = singltonClass::Instance();
test->setAtai(1000);
printf("%d\n" , test->getAtai());

TestClass &singleton = TestClass::getInstance();
singleton.setAtai(2000);
printf("%d\n" , singleton.getAtai());

return 0;
}

428
デフォルトの名無しさん[age]   投稿日:2015/06/15 02:27:53  ID:YoDUUVOd.net(6)
////////////singltonClass.cpp
#include "singltonClass.h"

singltonClass::singltonClass()
{
printf("sinngltonClass 生成\n");

atai = 0;
}
singltonClass::~singltonClass()
{
printf("sinngltonClass 解放\n");
}

singltonClass* singltonClass::Instance()
{
static singltonClass* instonce;
return instonce;
}

void singltonClass::setAtai(int atai)
{
this->atai = atai; //ここで落ちる
}
int singltonClass::getAtai()
{
return atai;
}

429
デフォルトの名無しさん[age]   投稿日:2015/06/15 02:29:40  ID:YoDUUVOd.net(6)
////////////singltonClass.h
#include <iostream>

class singltonClass
{
private:
singltonClass();
~singltonClass();

public:
static singltonClass* Instance();
int atai;
void setAtai(int atai);
int getAtai();
};

430
デフォルトの名無しさん[sage]   投稿日:2015/06/15 02:30:11  ID:TWn3hn91.net
>static singltonClass* instonce;
落ちるに決まってんだろ
それにinstonceってなんだよ
コメント2件

431
デフォルトの名無しさん[age]   投稿日:2015/06/15 02:32:50  ID:YoDUUVOd.net(6)
//////////////TestClass.cpp
#include "TestClass.h"

TestClass::TestClass()
{
printf("TestClass 生成 \n");

atai = 0;
}
TestClass::~TestClass()
{
printf("TestClass 解放 \n");
}

TestClass &TestClass::getInstance()
{
static TestClass instance;
return instance;
}

void TestClass::setAtai(int atai)
{
this->atai = atai;
}
int TestClass::getAtai()
{
return atai;
}

432
デフォルトの名無しさん[age]   投稿日:2015/06/15 02:35:02  ID:YoDUUVOd.net(6)
//////////////TestClass.h
#include <iostream>

class TestClass
{
private:
TestClass();
~TestClass();

int atai;

public:
static TestClass &getInstance();

void setAtai(int atai);
int getAtai();
};
コメント1件

433
デフォルトの名無しさん[sage]   投稿日:2015/06/15 05:30:01  ID:cIly8SrJ.net(2)
>432
これはどうなったんだ

【初心者歓迎】C/C++室 Ver.94【環境依存OK】(c)2ch.net
【初心者歓迎】C/C++室 Ver.94【環境依存OK】
679 名前:デフォルトの名無しさん[age] 投稿日:2015/06/11(木) 23:44:32.66 ID:phbL6DGJ
// main.cpp
#include "TestClass.h"
// TestClass.cpp
#include "TestClass.h"
// TestClass.h
mainでTestClassを生成した場合
main.cppがTestClass.hを認識出来るのは分かるけど
TestClass.cppはどうやって認識しているの?

434
デフォルトの名無しさん[age]   投稿日:2015/06/15 07:23:10  ID:YoDUUVOd.net(6)
こんな感じでシングルトンクラスを作ってみて
TestClassは大丈夫なんだけど
singltonClassで値を入れようとするとアクセス違反で落ちる・・・
詳しく理由を教えてほしい

435
デフォルトの名無しさん[sage]   投稿日:2015/06/15 08:00:52  ID:stx1FStm.net

436
デフォルトの名無しさん[sage]   投稿日:2015/06/15 08:41:04  ID:P9xXTUaw.net(6)
instonce の値が 0 だからじゃない?

437
420[age]   投稿日:2015/06/15 11:40:03  ID:mHyo0Y7D.net(8)
>430
だからなぜそれだと落ちるのか聞いてるんだYO

438
デフォルトの名無しさん[sage]   投稿日:2015/06/15 12:07:59  ID:x90+VGun.net(3)
static singltonClass instonce;これはインスタンス
static singltonClass* instonce これは ぬるぽ
ぬるぽ呼んだら落ちるに決まってるだろ

439
デフォルトの名無しさん[sage]   投稿日:2015/06/15 12:14:08  ID:x90+VGun.net(3)
コードそのままで修正するなら
static singltonClass* instonce = new singltonClass;

440
デフォルトの名無しさん[sage]   投稿日:2015/06/15 12:17:05  ID:x90+VGun.net(3)
つかなんだこの板…
いくら何でも質落ちすぎだろ

441
デフォルトの名無しさん[sage]   投稿日:2015/06/15 12:30:17  ID:HDA/Cn6G.net(4)
そういう受け皿も必要

442
420[age]   投稿日:2015/06/15 13:48:45  ID:mHyo0Y7D.net(8)
TestClass &TestClass::getInstance()
singltonClass *singltonClass::Instance()
ってなにが違うの? &と*って同じじゃないの?
これが分かれば疑問が解けそう
コメント1件

443
デフォルトの名無しさん[sage]   投稿日:2015/06/15 13:56:54  ID:HDA/Cn6G.net(4)
>442
そっちじゃなくて、何を返してるのかだよ

singltonClass instonce;
の &instance と
singltonClass * instonce = new singltonClass();
の instance がほぼ同等
newしてないやつは実体がないだろ。

444
デフォルトの名無しさん[sage]   投稿日:2015/06/15 13:58:49  ID:P9xXTUaw.net(6)
同じ意味なら記号変えるとかただの無駄な件

445
420[age]   投稿日:2015/06/15 14:25:07  ID:mHyo0Y7D.net(8)
ありがとう
このままだとMULLだからnewで生成する必要があるのは分かった

最後に知りたいのが & の意味で
& を外すとエラーになるのが理解できない

あと & と * って同じじゃないの?
コメント1件

446
デフォルトの名無しさん[sage]   投稿日:2015/06/15 14:44:00  ID:P9xXTUaw.net(6)
ポインタと参照について要勉強だな

447
デフォルトの名無しさん[sage]   投稿日:2015/06/15 15:15:27  ID:HDA/Cn6G.net(4)
参照を返すかポインタを返すかの違いで実質は同じ、、とも言える
演算子としての&と参照としてのそれと混乱してる?

448
デフォルトの名無しさん[sage]   投稿日:2015/06/15 15:16:58  ID:cIly8SrJ.net(2)
>445
int i = 10, *p;
p = &i;

この状態で*p = i = 10
コメント1件

449
420[age]   投稿日:2015/06/15 15:50:47  ID:mHyo0Y7D.net(8)
ごめん

TestClass &TestClass::getInstance()
{
static TestClass instance;
return instance;
}

singltonClass *singltonClass::Instance()
{
static singltonClass Instance;
return Instance;
}

の違いが分からない・・・
TestClass::getInstanceでは何が起こっているの?

450
デフォルトの名無しさん[sage]   投稿日:2015/06/15 15:57:14  ID:P9xXTUaw.net(6)
何も起こってない

むしろsingltonClass::Instance()のコンパイル通る方が深刻

451
デフォルトの名無しさん[sage]   投稿日:2015/06/15 16:03:25  ID:P9xXTUaw.net(6)
>448のレスに倣えばこういうこと

int x = 0;
int& q = x;
q = 10; // x = 10

452
420[age]   投稿日:2015/06/15 16:11:31  ID:mHyo0Y7D.net(8)
TestClass &TestClass::getInstance()
{
static TestClass instance;
return instance;
}

これだと正常に動作して

TestClass TestClass::getInstance()
{
static TestClass instance;
return instance;
}

こんな感じで & を外すと
main.cppでTestClassを生成しようとするとコンパイルエラーになる
ごめん、これが分からない・・・

453
デフォルトの名無しさん[sage]   投稿日:2015/06/15 16:14:51  ID:P9xXTUaw.net(6)
コンストラクタ/デストラクタがprivateだからじゃないの?

454
420[age]   投稿日:2015/06/15 16:42:12  ID:mHyo0Y7D.net(8)
& をつけるとコンストラクタ/デストラクタがprivateでも大丈夫な理由を教えて下さい
何度もすみません、ここが分からないんだ

455
デフォルトの名無しさん[sage]   投稿日:2015/06/15 16:49:19  ID:HDA/Cn6G.net(4)
単に外したらインスタンスのコピーが渡されるから、デストラクタが外から呼ばれることになるべ

456
420[age]   投稿日:2015/06/15 17:08:37  ID:mHyo0Y7D.net(8)
そういうことか分かったぁぁぁぁぁぁ!!!
関数のアドレスを渡してるから
関数を実行しているのはTestClass本体ってことか!!!
だからprivateでも問題ないと!!!!
ありがとbfヴぃbfdgb!!!

457
420[age]   投稿日:2015/06/15 17:11:26  ID:mHyo0Y7D.net(8)
何度も質問してからこんなこと聞くものあれなんだけど
一般的にシングルトンってTestClassのやりかたが主流?
他になんか良いやり方がある?
コメント1件

458
デフォルトの名無しさん[sage]   投稿日:2015/06/15 18:29:21  ID:ks4U7BG0.net
>457
ググれアホ

459
デフォルトの名無しさん[sage]   投稿日:2015/06/15 19:02:51  ID:FZwBA5EA.net
適当なCかC++入門サイト開いて、
ポインタについてしっかり頭に叩き込んでからまたおいで

460
デフォルトの名無しさん[sage]   投稿日:2015/06/19 12:26:01  ID:ybHitNmNK
クラスAがクラスBのインスタンスbの参照をconst付きで持つことは出来ませんか?
やりたいことはこんな感じです
class A {
public:
A(const B& b) { inst = b };
const B& inst;
};
コメント1件

461
デフォルトの名無しさん[]   投稿日:2015/06/19 12:49:50  ID:q7REsHeZf
>460
「C++ コンストラクタ 参照 初期化子」でggrks
ちなみに const は関係ない。
エラーメッセージ出てるよな。質問するときにはメッセージ貼りなされ。

462
デフォルトの名無しさん[sage]   投稿日:2015/06/23 19:12:27  ID:coxulpee.net(4)
教えてください。
typedef vector<int> v1;
typedef vector<v1> v2;
typedef vector<v2> v3;

typedef vector<vn-1> vn;

みたいなことやりたいんですが、テンプレートでうまくまとめられませんか。
コメント1件

463
デフォルトの名無しさん[sage]   投稿日:2015/06/23 21:47:23  ID:qkxeTacg.net(5)
>462
一体nはどれくらいの値を想定している?
vectorをあんまり沢山入れ子にすると訳分からない状態になるぞ。
コメント1件

464
デフォルトの名無しさん[sage]   投稿日:2015/06/23 21:54:26  ID:coxulpee.net(4)
>463
実を言うと本当はvectorの入れ子じゃなくて自作のクラスの入れ子なんですけど、
自作クラスの説明が面倒くさいからvectorに置き換えました。
nは10位ですかね。

465
デフォルトの名無しさん[sage]   投稿日:2015/06/23 22:00:49  ID:qkxeTacg.net(5)
参考までに聞きたいのだが、どういう用途のアプリで、そういうデータ構造が必要になるの?

466
デフォルトの名無しさん[sage]   投稿日:2015/06/23 22:03:13  ID:qkxeTacg.net(5)
vectorを10個入れ子にして、どうやってデータを取り出す?

467
デフォルトの名無しさん[sage]   投稿日:2015/06/23 22:06:36  ID:coxulpee.net(4)
いや、完全に趣味のコードなんですけどw
整数型2つメンバにもって多倍長整数にするクラスを作ろうとしてる。

template<class T>
class doubleInt
{
T hi,lo;
...
};

typedef duobleInt<unsigned int> Int64;
typedef doubleInt<Int64> Int128;
typedef doubleInt<Int128> Int256;


みたいな感じ。
コメント1件

468
デフォルトの名無しさん[sage]   投稿日:2015/06/23 22:15:43  ID:qkxeTacg.net(5)
>467
それなら、わざわざややこしい入れ子にしなくても、10倍長計算に必要な領域を
配列か何かで int work[10] みたいに確保しておいて、それ使って計算すればいいんじゃないか?
コメント1件

469
デフォルトの名無しさん[sage]   投稿日:2015/06/23 22:18:38  ID:qkxeTacg.net(5)
ああ、work[10]じゃあ足りないか。

470
デフォルトの名無しさん[sage]   投稿日:2015/06/23 22:23:15  ID:coxulpee.net(4)
>468
そこはロマンというかw
テンプレート使える俺かっこいい的なw

471
デフォルトの名無しさん[sage]   投稿日:2015/06/23 23:57:56  ID:/nLjrxmH.net
これ明らかに使わないだろ

template<template<class...> class Container, class Type, size_t num> struct NestContainer {
typedef Container<typename NestContainer<Container, Type, num - 1>::type> type;
};
template<template<class...> class Container, class Type> struct NestContainer<Container, Type, 0> {
typedef Type type;
};

/*
template<class Type> using MyVector = std::vector<Type, std::allocator<Type>>;
template<size_t num> using VInt = typename NestContainer<MyVector, int, num>::type;
*/
template<size_t num> using VInt = typename NestContainer<std::vector, int, num>::type;

int main() {
using namespace std;
VInt<0> i; //int
VInt<1> a1; //vector<int>
VInt<2> a2; //vector<vector<int>>
i = 100;
a1.push_back(0);
a1.push_back(10);
a2.push_back(a1);
cout << i << endl;
for(auto &it : a2) for(auto &it2 : it){
cout << it2 << endl;
}
return 0;
}

472
マ○コデラックス[sage]   投稿日:2015/06/23 23:59:17  ID:bwjeXC/X.net
スレ立てるまででもない質問ってどんなの?

473
デフォルトの名無しさん[sage]   投稿日:2015/06/24 11:52:28  ID:67aeQTeE.net
趣味で作る多倍長計算プログラムか‥ いいねぇ πとか計算するのかな?
今はGMPとかあるからなー
良い時代になったもんだ

474
QZだ信じれ[sage]   投稿日:2015/06/27 14:03:24  ID:KcwTZCGl.net
足し算だけで力尽きた‥
いつか割り算を実装してから『素数』を数えて落ち着くんだ‥
コメント1件

475
デフォルトの名無しさん[sage]   投稿日:2015/06/27 15:13:43  ID:07vULyYd.net
>474
素数の計算だけでしたら、エラトステネスのふるい法でどうでしょうか。
unsigned int 形の配列を生成し、先ず最初にその整数型のなかに頭から1を
埋め込み、これを3から始まる奇数と考えます。そうすると、例えば3ビット目は7
となるわけです。
こうして置いて3の倍数に当たるビットを0にする、5の倍数に当たる
ビットを0にする、……
として於いて、必要な桁数だけ終了したら、1のビットの位置を計算して
その値を出力すれば、素数表ができると思います。
例:
        3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33
最初の状態  :1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1....
3の倍数を消す:1 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1...
5の倍数を消す:1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1
以下同様

もっと効率のよい方法としては、
『電子計算機のための数値計算法』II(山内二郎・森口繁一・一松信、培風館)

「第5章 Eratosthenesのふるいによる素数の計算」
をご覧いただければと思います。
とんでもない思い違いをしているかもしれません。その節はご容赦
をお願いいたします 
コメント1件

476
デフォルトの名無しさん[]   投稿日:2015/06/27 21:13:58  ID:v21lmC3z.net(2)
しょうもない質問ですいません

char *AA="hello world";
int n=sizeof(AA)/sizeof(AA[0]);

これを実行するとnには4が必ず入ってしまうのですがなぜなのでしょうか
実行環境はVisual C++ 2010 Expressです
コメント2件

477
デフォルトの名無しさん[sage]   投稿日:2015/06/27 21:19:14  ID:K06hVkJE.net(2)
>476
多分、4/1を計算しているからだと思う。
コメント1件

478
デフォルトの名無しさん[sage]   投稿日:2015/06/27 21:20:38  ID:JzcDXnUr.net
>476
32ビットアプリですね?
ポインタのサイズをchar のサイズで割るから当たり前です。

479
デフォルトの名無しさん[sage]   投稿日:2015/06/27 21:27:09  ID:K06hVkJE.net(2)
>476
それにしても
char *AA
なんて変数名付ける奴初めて見たわ。
何で大文字なんだよ?
何でAA何だよ?
見れば見るほど変だぞ。
コメント2件

480
デフォルトの名無しさん[sage]   投稿日:2015/06/27 21:28:36  ID:oXqh0l6v.net
大文字はマクロだと決まってる

481
デフォルトの名無しさん[]   投稿日:2015/06/27 22:26:08  ID:v21lmC3z.net(2)
>477
なぜ*AAのアドレスのサイズが4byteなのでしょうか・・・

482
デフォルトの名無しさん[sage]   投稿日:2015/06/27 22:31:26  ID:e2zMBxYg.net
ポインタのサイズだからだろ
sizeof(char*)は32bit環境だと大体4だろ

483
デフォルトの名無しさん[sage]   投稿日:2015/06/27 22:47:11  ID:9MGfZNNc.net
charでもintでも、32bitの環境ならそのアドレスはどちらも4byte

484
デフォルトの名無しさん[sage]   投稿日:2015/06/27 23:02:33  ID:++FZGhMS.net
ひょっとして12になることを期待(予想)してたのかなぁ

485
デフォルトの名無しさん[sage]   投稿日:2015/06/28 00:58:59  ID:IZhI7buf.net
むしろ11になることを期待していたと予想

486
デフォルトの名無しさん[sage]   投稿日:2015/06/28 03:48:23  ID:YhCvVIgA.net
>475
その方法だと,最初から求めたい地点まですべて「オンメモリ」なのが辛いところです.
といって試し割り素朴法は計算が遅い
そこで,そのハイブリッドを考えています
オンメモリの素数を調べる部分は先端だけで十分だと思うのです
コメント2件

487
デフォルトの名無しさん[sage]   投稿日:2015/06/28 07:57:05  ID:q4v0PqzP.net
>479
本題以外で突っ込むとか変だぞ
コメント1件

488
デフォルトの名無しさん[sage]   投稿日:2015/06/28 08:46:19  ID:EIkqw89x.net
>486
前述の「電子計算機のための数値計算法 II』には
求めた素数を一旦外部記憶装置に記憶させておいて、
その値を使って新しくチェックする云々と書いてあります。
入出力に時間がかかりますが、これだとたしかにメモリーの
消費が少なくなりますが……
是非一度、上記の書籍の該当箇所をご覧ください。
小生の生半可な説明よりは、ずっとよいと思いますので。
ご検討をお祈りしております。
結果のご報告をお待ちしております。

489
デフォルトの名無しさん[sage]   投稿日:2015/06/28 10:22:05  ID:Z3SmjTo/.net(2)
>489
ご紹介いただいた書籍には「素数を外部装置に記録する」方法と
エラトステネスの篩とを併用する方法は紹介されていますか?
そうでなければ興味はわきません

490
デフォルトの名無しさん[sage]   投稿日:2015/06/28 10:23:14  ID:M4OFumRq.net
>486
試し割り素朴法を使うにしても、無駄を省くために平方根の多倍長計算ルーチンは実装しておきたいところですよね。
除算や平方根を楽に(?)計算するNewton-Raphson法というのがあるようです。ご参考までに。
http://円周率.jp/method/newton.html

>487
> >479
> 本題以外で突っ込むとか変だぞ
話し合ってる問題の本質と無関係なところで揚げ足をとって騒ぐ
こういうバカは、会社でも一定数存在するな。たいてい会議が無駄に長引く元凶。
コメント1件

491
デフォルトの名無しさん[sage]   投稿日:2015/06/28 10:37:39  ID:Z3SmjTo/.net(2)
>490
試し割り素朴法では、平方根の計算は実は必要ありません。
試し割りの商と割数とを比較すればいいからです。
それにニュートンラプソンは実装が面倒な浮動小数点が必須、わざわざややこしい世界に手を広げる必要はありません。

素数を数えておちつくんだ!

492
デフォルトの名無しさん[sage]   投稿日:2015/06/28 11:13:06  ID:2/AXk5Qq.net
クラス内のvectorってダメ?
ただの二成分量のクラスを作ったんだが
vectorにすると急に遅くなった(g++ -O3)
コメント1件

493
デフォルトの名無しさん[sage]   投稿日:2015/06/28 12:21:10  ID:rotd9Dcd.net
>492
それだけの情報で答えるなんて適当なことしか言えないよ
プロファイル取って何が問題になってんのか調べな

494
デフォルトの名無しさん[sage]   投稿日:2015/06/28 14:29:17  ID:l/YNGXJW.net(3)
時代に付いていこうとスマートポインタ勉強してるんだけど
クラスのメンバに持ってる std::unique_ptr の参照をゲッターで外に出すのって普通?
std::shared_ptr をメンバに持って std::shared_ptr<T> Class::Getter() の方が良いの?

495
デフォルトの名無しさん[sage]   投稿日:2015/06/28 15:41:33  ID:Iw80ONOH.net(2)
スマポなんてとっくに時代遅れだろ
今はガベコレが主流だよ

496
デフォルトの名無しさん[sage]   投稿日:2015/06/28 16:17:14  ID:l/YNGXJW.net(3)
C++にGCないやん……Boehm?
というかそのGCを趣味で実装しようとしてるのでGCは使えないのです

生ポインタ使うよりはモダンかなと思ってたんだけどどうなのかな
使ってみるとスマポと生ポインタが混在してるのが気持ち悪くなっちゃって
どうにかスマポか参照に置き換えようとしてる

497
デフォルトの名無しさん[sage]   投稿日:2015/06/28 16:21:16  ID:OeLQkQMR.net(2)
スマポ便利って言うけど今までナマポで不便感じた事ないしこれからもナマポで行くかな。

498
デフォルトの名無しさん[sage]   投稿日:2015/06/28 16:34:44  ID:UiBucRXh.net
つalloca
コメント1件

499
デフォルトの名無しさん[sage]   投稿日:2015/06/28 16:38:40  ID:OeLQkQMR.net(2)
>498
malloc/freeじゃあ駄目なのか?

500
デフォルトの名無しさん[sage]   投稿日:2015/06/28 16:41:21  ID:l/YNGXJW.net(3)
スマポの話だったから解放処理書かなくてすむmallocの代替品ってことなのでは?>alloca
でもヒープメモリが欲しいんや……

501
デフォルトの名無しさん[sage]   投稿日:2015/06/28 17:12:47  ID:Iw80ONOH.net(2)
CoTaskMem使おうよ

502
デフォルトの名無しさん[sage]   投稿日:2015/07/06 17:46:05  ID:Bbdz7Dci.net(2)
遺伝的アルゴリズムで調べてたら
wikiの手順説明には
・選択
・交叉
・突然変異
・コピー
(下3つはそれぞれ設定された確率で起こる)
みたいにあるけど生物界では必ず交叉起こるはずだよな?

・選択(重複無し)
・交叉(必ず起こる)
・突然変異(低確率で起こる)
・コピー(起こらない)
にした方がいいと思うんだが

503
デフォルトの名無しさん[sage]   投稿日:2015/07/06 18:55:53  ID:QWNNDY2V.net
それでいい結果が得られるんならそうすれば

504
デフォルトの名無しさん[sage]   投稿日:2015/07/06 19:17:47  ID:L4KLNmyL.net
別に生物界の遺伝をシミュレートしてるわけじゃないだろこのスットコドッコイ
コメント1件

505
デフォルトの名無しさん[sage]   投稿日:2015/07/06 19:39:45  ID:Bbdz7Dci.net(2)
>504
腑に落ちたありがとう

506
デフォルトの名無しさん[]   投稿日:2015/07/08 05:54:43  ID:8R+nhtCy.net
visual studio で組み込み開発

ターゲットはwindows8タブレット


ターゲットのexeに対してvisual studioからクロスコンパイル環境でデバッグしたいのだが上手くいかない。

対象アプリケーションはexeを叩いて直接起動するのではなく
サービスをスタートする事でexeが立ち上がる仕組み。
visual studioでそこにアクセスする為にはプロセスにアタッチするしかないのかなとみている。
プロセスにアタッチだとクロスコンパイルできないですよね?

今はソースを変えると
→いちいちサービス止めて
→ホストでビルドしてできあがったexeを手動でリモートに送り
→またサービスを立ち上げて
→リモートのプロセスにアタッチ

みたいな事やってるけど、超面倒。
こんな事やってられないけど、これ以外に手段ないですよね?
コメント3件

507
デフォルトの名無しさん[sage]   投稿日:2015/07/08 09:40:39  ID:P1nDZAUb.net
VC、MS環境の組み込みは経験ないけど、
OSが同じなら、一旦セルフ環境でデバッグ済ませてしまえば?と思うのだが

まぁアタッチしないといけない理由は他にありそうな気もするが


508
デフォルトの名無しさん[sage]   投稿日:2015/07/08 10:04:25  ID:PAkk6Hqa.net(4)
>506
良く知らんがそのexeがデバッグビルドして有ったら、アタッチした時点で自動的にソースコードが読み込まれて普通にデバッグ出来るんちゃうか?
コメント1件

509
デフォルトの名無しさん[sage]   投稿日:2015/07/08 10:08:37  ID:PAkk6Hqa.net(4)
>508
ああ、exeはリモートで動くから駄目だな。
そのリモートのタブレットにVisual Studioのリモートデバッガーはインストール出来ひんのか?
リモートデバッガーなら行けるかも。
根拠の無い勘ですが。

510
デフォルトの名無しさん[sage]   投稿日:2015/07/08 11:44:06  ID:ac7mf5QU.net
VisualStudio使ったこと無いけどデバッグ実行前に実行するコマンド書けるでしょそれで転送とかサービスの起動を自動化すればいいんじゃないの
コメント1件

511
デフォルトの名無しさん[sage]   投稿日:2015/07/08 11:48:34  ID:PAkk6Hqa.net(4)
>510
それをリモートデバッガーと言うと思うよ。
開発環境でビルドして、実行はリモート環境。実行に必要なexeやその他のファイルは、設定しておけば実行時に自動的にリモート側にコピーされる。そしてデバッガーが起動する。

512
デフォルトの名無しさん[sage]   投稿日:2015/07/08 12:45:47  ID:xsPPpspE.net
>506
環境依存度が高すぎるから VisualStrdio 系のスレで質問し直すのが吉。
そのときはせめて、 VS のバージョンくらい書けよ。
サービスからの起動じゃないと動かない(工夫すれば動かないことも無いと思うが)のならば、
そのことも書いた方がいいな。

ちなみに、サービスの起動/停止については、 net start/stop コマンドでできるから、
バッチファイルでも書いておけ。
net stop 〜
copy \\〜 c:\〜
copy \\〜 c:\〜
net start ~
こんな感じか。これで多少はやらなきゃならないことは減るだろ。

あと、プロジェクトのプロパティ「デバッグ」のところについて
しっかり調べるともっと楽できるかもな。
よさげな方法が見つかったら教えてくれ。

513
デフォルトの名無しさん[sage]   投稿日:2015/07/08 18:07:32  ID:yzj4SMDb.net
VS諦めてICE使え

514
デフォルトの名無しさん[sage]   投稿日:2015/07/08 18:11:20  ID:PAkk6Hqa.net(4)
>506
その後どうなったんだよ?気になって寝られないよ。
それとも、2ch見る暇も無いくらい虎ブってんのか?

515
デフォルトの名無しさん[]   投稿日:2015/07/13 15:39:26  ID:y8DQeBHSQ(2)
C言語で入力した文字列を暗号化させる、
またはモザイクをかける関数等はあったりしますか?

516
デフォルトの名無しさん[]   投稿日:2015/07/13 15:40:46  ID:y8DQeBHSQ(2)
博識の皆さんどうかお教えいただければ幸いです。m(_ _*)m

517
デフォルトの名無しさん[]   投稿日:2015/07/16 20:25:08  ID:8PKWst4d.net(5)
class Parent {
private:
  string str = "Parent";
public:
  string func() { return str; }
};

class Child : public Parent {
private:
  string str = "Child";
};

int main(void) {
  cout << Child().func() << endl;
}

これVisualStudio2013で動かすと"Parent"って出るんですが仕様動作ですか?
"Child"って出す方法はありますか?
コメント1件

518
デフォルトの名無しさん[sage]   投稿日:2015/07/16 20:42:33  ID:97AdtI1Z.net(6)
funcをバーチャルにするんじゃだめかな?
確かめてないけど。

519
デフォルトの名無しさん[sage]   投稿日:2015/07/16 20:44:43  ID:0HInDZYo.net(3)
>517
func()をvirtualにするか、単にオーバーライドするか

520
デフォルトの名無しさん[]   投稿日:2015/07/16 20:48:22  ID:8PKWst4d.net(5)
virtualにしたら継承する子クラスごとに実装が必要になりますよね?
全部共通の挙動を記述したいのに、ポリモーフィズムになってないような…
継承したときの挙動がJavaとだいぶ違うんですね…
コメント1件

521
デフォルトの名無しさん[sage]   投稿日:2015/07/16 20:51:22  ID:0HInDZYo.net(3)
ちゃんと共通の挙動になってるじゃん
"Parent"を表示するという共通の挙動に

522
デフォルトの名無しさん[]   投稿日:2015/07/16 21:07:12  ID:8PKWst4d.net(5)
ポリモーフィズムという言葉の使い方が論理で言う裏の意味になってしまっていましたが、
挙動が異なる部分は個別で書いても、
共通の部分は1か所で書いてほしいという意味です。
コメント1件

523
デフォルトの名無しさん[sage]   投稿日:2015/07/16 21:12:17  ID:0HInDZYo.net(3)
>522
ちょっと言ってる事が分からないんで最小限の"Javaならこんな動作をするんだけど"って
コードをideoneにでも上げてみてくれ

524
デフォルトの名無しさん[]   投稿日:2015/07/16 21:26:39  ID:8PKWst4d.net(5)
あれ?私がアホだったようです。今までどうやってたんだろう?

525
デフォルトの名無しさん[sage]   投稿日:2015/07/16 21:31:31  ID:97AdtI1Z.net(6)
Childでstr定義しなけりゃいーんじゃね
コンストラクタで値設定してやるとか

526
デフォルトの名無しさん[sage]   投稿日:2015/07/16 21:32:02  ID:97AdtI1Z.net(6)
privateも変えなきゃダメか。

527
デフォルトの名無しさん[]   投稿日:2015/07/16 21:38:42  ID:8PKWst4d.net(5)
コンストラクタは試しましたが駄目でした
Javaも同じ挙動なので正統な仕様っぽいですね

528
デフォルトの名無しさん[sage]   投稿日:2015/07/16 21:57:38  ID:97AdtI1Z.net(6)
staticでないメンバ変数って宣言と一緒に初期化できないんじゃ?

529
デフォルトの名無しさん[sage]   投稿日:2015/07/16 22:04:39  ID:97AdtI1Z.net(6)
c++11だと出来るのか?
コメント1件

530
デフォルトの名無しさん[sage]   投稿日:2015/07/16 22:07:20  ID:CJJ7/fpC.net
できるよ

531
デフォルトの名無しさん[sage]   投稿日:2015/07/16 22:20:20  ID:97AdtI1Z.net(6)
まあ、ParentとChildで同じ名前だが別々の変数になってるのが悪いんだろ要は

532
デフォルトの名無しさん[sage]   投稿日:2015/07/16 23:25:09  ID:y0fv9fm6.net
Parent単体で使わないならCRTP使えばいいよね

533
デフォルトの名無しさん[sage]   投稿日:2015/07/17 02:38:25  ID:s3h+5IcC.net
Childに変数strじゃなくprotected関数でparentのstrに"Child"とやるんじゃないの?

534
デフォルトの名無しさん[sage]   投稿日:2015/07/17 13:12:55  ID:OTxNgdvH.net
overrideキーワードでなんとかならんか

535
デフォルトの名無しさん[sage]   投稿日:2015/07/17 13:36:11  ID:q0tTJLJ/.net
あれは名前の間違いを防ぐためのもんだろ

536
デフォルトの名無しさん[sage]   投稿日:2015/07/17 19:32:30  ID:lKYO5bRui(3)
# gcc --version
gcc (GCC) 4.9.3

でビルドをして
エラー: ‘weak_ptr’ in namespace ‘std’ does not name a template type
が出ました

どこが怪しそうかありましたらお願いします

537
536[sage]   投稿日:2015/07/17 19:33:50  ID:lKYO5bRui(3)
あと
#g++ --version
g++ (GCC) 4.9.3
です

538
デフォルトの名無しさん[sage]   投稿日:2015/07/17 20:13:44  ID:RYUK7ODzO
-std=c++11

539
536[sage]   投稿日:2015/07/17 20:23:32  ID:lKYO5bRui(3)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
していて
unrecognized command line option -std=c++11
が出ていたのを解消してます

これだけではオプションが指定できてないでしょうか・・

540
デフォルトの名無しさん[sage]   投稿日:2015/07/18 00:22:47  ID:VAadIoCMs
日本語でおk

541
デフォルトの名無しさん[sage]   投稿日:2015/07/18 01:27:59  ID:+dYah9PS.net
515が正解だろうな

542
デフォルトの名無しさん[sage]   投稿日:2015/07/18 02:26:19  ID:bSmobx4N.net(2)
>520,506
俺はCしかやったことないから、間違っているかもしれないが。

> 仮想関数には、派生クラスで再定義できる、という利点があります。
> 【Java では】Java では、クラスのすべてのメソッドは仮想関数です。
Javaだとメソッドは全部上書きできる。
C++はvirtualを宣言しないと出来ないが、基底クラスに指定しておけばデフォルトにはなる。
http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/virtua...

ただしstrはメンバ変数(フィールド)なので、virtual指定は出来ない。
俺も515が正解だと思う。

543
デフォルトの名無しさん[sage]   投稿日:2015/07/18 03:14:55  ID:YrpuCTOJ.net(2)
http://ideone.com/kasXIK

こういう風に書くもんだと思ってたけどな

544
デフォルトの名無しさん[sage]   投稿日:2015/07/18 03:24:51  ID:YrpuCTOJ.net(2)
http://ideone.com/P22ci3

結果だけ同じにしたいのならこっちの方がシンプルかも
コメント1件

545
デフォルトの名無しさん[sage]   投稿日:2015/07/18 04:20:59  ID:bSmobx4N.net(2)
>544
いや520は駄目だろ、521はいいけど。
515は日本語が若干アレだが、521に近くて、

class Parent {
protected: string str = "Parent";
public: Parent(){} // 空なので省略可
以外同じ
}

なのだと思う。
文法的にどうなのかはちょっと怪しいが、通るのならいいのでは。

546
デフォルトの名無しさん[sage]   投稿日:2015/07/19 21:05:38  ID:C0eKKOJs.net
日本語的にちょっとアレでも意味が通るだけまだマシ

>文法的にどうなのかはちょっと怪しい

さらに
>通るのならいいのでは
というスタンスの方がよっぽど怖い

547
デフォルトの名無しさん[sage]   投稿日:2015/07/19 21:36:02  ID:4AVebAB2.net
なんで?
意味的には問題ない。だからコンパイルが通ればいい。
C++11なら通るし、昔のC++なら通らないだけだろ。

520と521は本質的に違っていて、
それを同じだと思っているやつに言っても意味ないとは思うが。

当たり前だけど、コンパイルが通りさえすれば全ていいといっているわけではない。
一般的に、改訂されるときは、過去に記述が面倒だったものが簡潔に書けるようになる。
C++11でいい環境ならそれでいいし、駄目ならコンストラクタで初期化する記述を書くしかないだけだろ。

548
デフォルトの名無しさん[sage]   投稿日:2015/07/19 23:44:07  ID:M/uggKZR.net
なんでプログラマって日本語があれの人が多いの?

549
デフォルトの名無しさん[sage]   投稿日:2015/07/19 23:54:00  ID:i+qdcRrk.net
「こいつ、プログラミング言語より母国語をちゃんと学習するべきだろ!」って感じる書き込みは、このスレにも散見されるな

550
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:02:02  ID:B6aaQcuY.net(3)
自然言語でのお喋りは難しいよね
リアルタイムに構文チェックできないのがツライ

551
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:12:57  ID:Zt6Jwc5S.net(8)
日本語は流し読みするのに向いてないような気がしてきた。
述語が最後に来たり、「てにをは」を読み飛ばすと意味が反対になったり。
論理的な記述よりも時系列に沿った記述に向いているので、小説には向いているのかも知れんが、
技術的な議論を展開するのは難しいのかも。
結論を後回しにするので、ウソを付くのには向いている言語かも。
これのせいで世の中が混乱する。玉虫色言語。
小学生から英語を学習するのに賛成だ。
例えば上記の文章一つとってもいつも迷う。
「小学生から英語を学習するのに賛成だ。」・・・時系列重視
「英語を小学生から学習するのに賛成だ。」・・・目的語重視
はたしてどちらが読みやすく、意味が正確に伝わりやすいのだろうか。
何故こんなことで悩まなくてはならないのだろう。
コメント2件

552
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:15:46  ID:1Qy7XHWg.net
>551
君は日本語の良さを全く分かっとらん!

553
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:17:09  ID:B6aaQcuY.net(3)
良い年した大人が小学生に英語を教わるなんて恥ずかしいよ
コメント1件

554
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:24:55  ID:NxNLCFO0.net
>553
for (int i=0;i<3;i++) printf("w");

555
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:28:42  ID:Zt6Jwc5S.net(8)
あと、日本人は縦割り行政で利権が大好きでOOP脳なので、
自分の立場に立ったり、相手の立場に立ったり、
思いやりだとか、なんとか、主体がかなりいい加減。
例えば次の文はどっちでも通る。
「小学生から英語を学習するのに賛成だ。」
「小学生から英語を学習させるのに賛成だ。」
なんとかしてほしい。もやもや
コメント1件

556
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:51:14  ID:Zt6Jwc5S.net(8)
述語や動詞というのは「機能」なんです。
と言うことはこれが前に来る言語を使っている人たちは、ひとえに機能主義なんです。
機能主義は立場よりも横のつながりを重視します。
一方で思いやりに欠けます。しかし、そこに拘るのは男らしくないという考え方です。
こういう何らかの感覚的な違いが、結構重要な何かなんじゃないかと最近ひしひし。
コメント1件

557
デフォルトの名無しさん[sage]   投稿日:2015/07/20 01:27:14  ID:Zt6Jwc5S.net(8)
われわれはどうして、機能主義なことを、皆こぞって「風通しが良い」って詩的な表現で言うんですかね。
こういう曖昧な表現を使うと、毛の壁さんのような人が、独自の解釈をして、勘違いして、変な展開になる可能性が。
わざとなんですかね。一定以上の知能が無い人には真意が伝わらないようにするっていう。
二重の会話。凄い技術ですね。

558
デフォルトの名無しさん[]   投稿日:2015/07/20 02:12:16  ID:ERLwMp/J.net
>551
それは論理的に日本語で記述しない側の問題,
あるいはもともと論理的でない内容だったという話なのでは?

>555
ヨーロッパ諸語でも格変化の残っている屈折語ならば,主語の省略は普通ときいている.

>556
昔やったドイツ語では動詞が最後に来る場合があった,この場合動詞が半分にちょん切れると辞書が引けず困った.

英語でも分詞構文はかなりあいまいで読み手が内容を推察しないといけないかと
憲厳密性の必要なはずの法律・条文に割合に多い
https://en.wikisource.org/wiki/Constitution_of_Japan#The_Constitution_of_Japan
コメント1件

559
デフォルトの名無しさん[sage]   投稿日:2015/07/20 02:32:06  ID:Zt6Jwc5S.net(8)
風通しの良い社風ですってPRってどうなんだろうね。
風通しが良すぎて、要らなくなったらはいサヨナラだったりして。
機能主義って結構厳しいわけで。
分かりやすく、風通しが良い==公務員の正反対の社風と考えると、疑問がわくよね。
今の時代、「わが社は市役所の様な社風です」ってPRしたほうが人気出るんじゃね。

560
デフォルトの名無しさん[sage]   投稿日:2015/07/20 02:55:37  ID:Zt6Jwc5S.net(8)
あと、風通しが悪そうな業種と言えば、
医者とか大学教授とか政治家とか。
余裕の有る業種は機能的になる必要が無いので風通しが悪くなる。
余裕の無い業種は機能的にならざるを得ないので風通しが良くなる。
それに、普通に考えて、働く上で、風通しが良くて、何か得することがあるだろうか。
そりゃ会社は得するだろうが、従業員的にはリスクの方が大きいような。
派遣とか有る意味最高に風通し良いよな。会社の垣根すら越えているわけだから。

561
デフォルトの名無しさん[sage]   投稿日:2015/07/20 03:16:13  ID:Zt6Jwc5S.net(8)
OOPはメンバ変数を大切に保護する、とても思いやりに溢れた発想。
日本的で良いではないか。Matzも喜ぶ。
裏を返せば縦割り行政で利権主義とも。

562
デフォルトの名無しさん[sage]   投稿日:2015/07/20 03:30:39  ID:Zt6Jwc5S.net(8)
あと、OOPは各オブジェクトがコミュニケーションをとりながら協調動作するあたりも、
非常に日本的といえるね。
それがたとえ機能的じゃなかったとしても、そういう風に振舞うことが美徳とされている。
デザインパターンとかいった様式美も時代劇みたいでいいね。


563
デフォルトの名無しさん[sage]   投稿日:2015/07/20 04:07:18  ID:exWjJYka.net
なにこの独壇場(;^ω^)

スレタイの日本語と空気も読めるようになっとけよ?

564
デフォルトの名無しさん[sage]   投稿日:2015/07/20 12:07:06  ID:B6aaQcuY.net(3)
ドキュメント記述に最適なOOP自然言語開発しようぜ

565
デフォルトの名無しさん[sage]   投稿日:2015/07/20 21:50:13  ID:4CXi8vOi.net
スレ立てて勝手にやれよ

566
デフォルトの名無しさん[sage]   投稿日:2015/07/22 23:52:29  ID:1Ae0pJ+D.net
質問です

あるOSSの関数を動的ロードしたいのですが、ヘッダを見ると
単なるマクロでした
#define macro_func(a)  hoge_func(a,b,c)

hoge_funcを動的ロードするのは、macro_funcの中身が今後どう変わるか
分からないので極力避けたいです
どうすればmacro_funcを動的ロードできるか教えてください
コメント1件

567
デフォルトの名無しさん[]   投稿日:2015/07/23 00:01:59  ID:CfJH8He2.net
>566
どうみても関数hoge_funcの実体がないとmacro_funcは動作しない。
動的・静的ロード、コード全体の埋め込みに関わらず、hoge_funcがないと無理。

568
デフォルトの名無しさん[sage]   投稿日:2015/07/23 01:21:06  ID:65Ur3bjf.net
というQZの妄想が始まった

569
デフォルトの名無しさん[sage]   投稿日:2015/07/24 11:05:32  ID:+CDH8aof.net(3)
昔から疑問なんですが、
文字列扱う場合、エスケープってやるじゃないですか。
"\"あいうえお\""
こんな感じ。これ見辛いし面倒だし
""あいうえお""
でええやん?って思うんですが。どうですか?

570
デフォルトの名無しさん[sage]   投稿日:2015/07/24 11:15:53  ID:OLl6qPEd.net(3)
それは釣りか?
""あいうえお""
これは、
"<空の文字列>"あいうえお"<空の文字列>"
と解釈されるぞ。
コメント1件

571
デフォルトの名無しさん[sage]   投稿日:2015/07/24 11:25:05  ID:+CDH8aof.net(3)
>570
いや、だからそのcやc++の仕様を拡張してエスケープ無しで行けるようにしたら良いんじゃないかと…
コメント1件

572
デフォルトの名無しさん[sage]   投稿日:2015/07/24 11:26:49  ID:yzOD5LHX.net(2)
R("あいうえお")";

573
デフォルトの名無しさん[sage]   投稿日:2015/07/24 13:11:20  ID:otR8/vJ5.net
拡張って、それ区別できんやろ

574
デフォルトの名無しさん[sage]   投稿日:2015/07/24 13:58:41  ID:LT/1nm8p.net

575
デフォルトの名無しさん[sage]   投稿日:2015/07/24 14:15:50  ID:+CDH8aof.net(3)
>574
なるほど。
区別出来ないのか。だったら"や'では無くてasciiコードに1文字新しい記号を割り当てて例えば''' トリプルクオーテーション
みたいなの定義して文字列はこの記号で囲う。この記号自身は文字列に使ってはいけないとか言う仕様にするのはどうかな?
コメント1件

576
デフォルトの名無しさん[sage]   投稿日:2015/07/24 14:19:59  ID:yzOD5LHX.net(2)
Raw string literalsでいいじゃん

577
デフォルトの名無しさん[sage]   投稿日:2015/07/24 14:34:24  ID:OLl6qPEd.net(3)
>529
こんな小難しい例を挙げなくても、
"";int i;"";
これで十分。このコード、コンパイルは通ります。

>575
それって今と同じ状況じゃないですか。
再帰的にどんどん増やしていくんですか?

578
デフォルトの名無しさん[sage]   投稿日:2015/07/24 18:15:33  ID:7eFkrdf6.net
asciiコードに自分の考える文字追加とかどんだけドリーミーなんだよ

579
デフォルトの名無しさん[sage]   投稿日:2015/07/24 20:46:34  ID:B25T497v.net
被曝してるのにオリンピックとかやっちゃう脳をもった国ですからね
何やってもおかしくない

580
デフォルトの名無しさん[sage]   投稿日:2015/07/24 20:52:37  ID:eC0qtT6i.net
ASCIIコード体系はC/C++だけの為にあるわけじゃないのに
今からそれを変更するのはあまりにも影響が大きすぎるでしょう
「\"」の見栄えのためだけにとんでもないコストを払うのは現実的ではないとおもうよ

581
デフォルトの名無しさん[sage]   投稿日:2015/07/24 21:01:28  ID:OLl6qPEd.net(3)
今更ASCIIコード変更とか逝かれてる発想だけど、
過去にはバックスラッシュを\マークにすると言う離れ業をやってのけたわけだがね。
もともとの話は、
"\"あいうえお\""
が見にくいって話だったけど、\マークだから余計に見にくいってのも有るね。
変なところで話がつながった。おしまい

582
デフォルトの名無しさん[sage]   投稿日:2015/07/24 23:30:32  ID:M2zLZm11.net
C#だと
@"""あいうえお""";
となるな。

583
デフォルトの名無しさん[sage]   投稿日:2015/07/25 09:38:50  ID:swByAiFJ.net
ああ " を2つ並べるエスケープも見ずらいよな〜

584
デフォルトの名無しさん[sage]   投稿日:2015/07/25 11:23:13  ID:O+qig66a.net(2)
asciiに文字を増やしてみたとして
結局そのうちその文字自身を文字列に入れたくなることが出てきていたちごっこ

585
デフォルトの名無しさん[sage]   投稿日:2015/07/25 11:31:14  ID:bLirGUmg.net(3)
じゃあ、見た目は同じだけれど
asciiコードが異なる"を二種類定義してだなあ、文字列定義で使う一つ目の"で文字列を囲って、文字列の中身は二つ目の"を使えば
"あ"い"う"
"""
""""""""
など何でもOK。俺って天才だろ

586
デフォルトの名無しさん[sage]   投稿日:2015/07/25 11:31:15  ID:BM2K7hmS.net
asciiとか半角256パターンなのにどうすんだべ

587
デフォルトの名無しさん[sage]   投稿日:2015/07/25 11:58:32  ID:O+qig66a.net(2)
見た目が同じでコードが違うとかプログラマの嫌がる王道パターンじゃないか

588
デフォルトの名無しさん[sage]   投稿日:2015/07/25 14:48:08  ID:xrZjcDNk.net
文字列リテラルは連結できるんだから、文字定数を文字列リテラルと連結できるルールがあればいいんだな。
'"' "あいうえお" '"'

589
デフォルトの名無しさん[sage]   投稿日:2015/07/25 15:27:06  ID:SkX3Z7YG.net
好きな書式を選びたまえ by D

"\"abc\""
`"abc"`
q{"abc"}
q"["abc"]"

# ほんとは この倍くらい記法の種類がある

590
デフォルトの名無しさん[sage]   投稿日:2015/07/25 19:10:08  ID:kRwC234a.net
それよりテンプレートのテンプレートで>が連続で書けないのが不満

昔VCだと通っていたが
コメント1件

591
デフォルトの名無しさん[sage]   投稿日:2015/07/25 19:13:50  ID:9SEykvB/.net(2)
C++11に対応してるコンパイラなら書けるだろ?

592
デフォルトの名無しさん[sage]   投稿日:2015/07/25 20:13:53  ID:bLirGUmg.net(3)
>590
テンプレートのテンプレートなんて使ったら、後で自分で見返しても何してる処理かわからなく成りませんか?
コメント1件

593
デフォルトの名無しさん[sage]   投稿日:2015/07/25 20:22:52  ID:9SEykvB/.net(2)
std::vector<std::pair<a,b>>←これのことでしょ

594
デフォルトの名無しさん[sage]   投稿日:2015/07/25 20:32:50  ID:HTRLB0UZ.net
昔は通らなかったが最近は通るようになったんじゃなかったか

595
デフォルトの名無しさん[sage]   投稿日:2015/07/25 20:45:06  ID:FjYNChri.net(3)
>592
そんな事ねぇよ
だいたいvectorで二次元配列書こうとするだけで必要になるでしょうが
コメント1件

596
デフォルトの名無しさん[sage]   投稿日:2015/07/25 20:48:37  ID:bLirGUmg.net(3)
>595
vectorのvectorなんか使わなくても
普通に二次元配列とか、自前のlist構造みたいなの使う方がやり易く無いですか?
コメント1件

597
デフォルトの名無しさん[sage]   投稿日:2015/07/25 20:59:22  ID:FjYNChri.net(3)
>596
途中で列方向に伸ばしたり行方向に伸ばしたくなる事がたまにある
そういう時はvectorが便利

598
デフォルトの名無しさん[sage]   投稿日:2015/07/25 21:00:03  ID:FjYNChri.net(3)
なーんか釣りっぽいけど
listなんか糞遅くて使えるか

599
デフォルトの名無しさん[sage]   投稿日:2015/07/26 09:22:04  ID:Kcbwho8L.net
エディター作ろうと思ったらlist<vector<char>>かなんかを使うだろ。

600
デフォルトの名無しさん[]   投稿日:2015/07/26 10:29:47  ID:CCJoGOlFX
試作段階で使う事に反対はしないけど
処理の最内周で多重ポインタ引っこ抜きアクセスは
アナライザ回した時点で切除すべき癌になる
だから一見面倒に見えても最初からカプセル化して
ユニット組んどいたほうが楽になる

c++が言語に選ばれる状況はこーいう状況が多いんじゃないかな

601
デフォルトの名無しさん[sage]   投稿日:2015/07/26 15:03:16  ID:kbQtFiQ+.net(2)
エディタもvector< vector< char > * >でよくね?

602
デフォルトの名無しさん[sage]   投稿日:2015/07/26 16:47:25  ID:P7wSwPkX.net(2)
エディタは一行削除したり数行まとめて移動・挿入したりの頻度が高いので
行方向がvectorでは遅くなる

603
デフォルトの名無しさん[sage]   投稿日:2015/07/26 17:41:01  ID:vMGDFyGs.net(2)
計算量の理屈では挿入削除はリストのほうが効率がいいが、
実測ではlistよりvectorが速くなることってめったにない気がするんだよなぁ。
俺個人の感想だが。
コメント1件

604
デフォルトの名無しさん[sage]   投稿日:2015/07/26 17:41:53  ID:vMGDFyGs.net(2)
逆だった。vectorよりlistが速くなるのが滅多にない。

605
デフォルトの名無しさん[sage]   投稿日:2015/07/26 18:02:19  ID:P7wSwPkX.net(2)
体感ではなくベンチマークすべきだな、そこまで言うなら

100000行位のテキストを想定して、ランダムにカット&ペーストを繰り返す

606
デフォルトの名無しさん[sage]   投稿日:2015/07/26 18:25:36  ID:iQP3uV6G.net
>603
処理のやり方にもよるからね。
毎回挿入位置までリストをたぐる操作をやっていたりしたら計算量もたいして有利じゃないし。

607
デフォルトの名無しさん[sage]   投稿日:2015/07/26 20:39:58  ID:kABshWn7.net
ベンチマークプログラム難しそうだな
コピペのブロック指定中は既に先頭のイテレータを取得した状態だという事だし、そこから
splice()を実行するのならlistの方が遥かに速いだろうけど、イテレータを取得するのは
vectorの方が圧倒的に速い

608
デフォルトの名無しさん[sage]   投稿日:2015/07/26 22:36:35  ID:kbQtFiQ+.net(2)
普通に考えてvectorの方が良いだろ。
行の変更があるのは、改行した時とか、限定的。
ユーザの入力があったときしか、行の変更は無い。
なので、一秒間に何十回もそういう操作があるわけではない。
一方再描画は頻繁に発生する。滑らかなスクロールをするためには、
一秒間に60回の描画が発生するかもしれない。
それなのにlistはランダムアクセスが出来ません。
ランダムアクセスができないと言うことは、ほかにも色々な制限をもたらします。
たとえばクイックソートは絶望的。とにかく面倒。素直にvector使っておけばよい。
ここで、vectorを使う場合を考える。
ポインタ一つ4バイトとして、100000行だと、400KB。
これのmemmoveに何msかかるか考えてみろ。
画像で言えば32bitで1000x100のビットマップ程度の大きさに相当して、
これは、フルハイビジョンの1/20の面積しかない。
この程度の処理がもたつくようでは、面積20倍、それも複雑なデコード処理が必要な
フルハイビジョン動画の再生は困難なわけで、問題になりえるか、考えるまでも無い。

609
デフォルトの名無しさん[sage]   投稿日:2015/07/27 01:29:16  ID:nrCiDIHC.net
だから言葉では何とでも言えるからベンチマーク取るしかないんだよ

行のイテレータはadvance()で取るとして、erase()やinsert()と、splice()を
使って行の長さを適当に変化させて、advance()が勝つかinsert()が勝つか
実測するしかない

610
デフォルトの名無しさん[sage]   投稿日:2015/07/27 07:24:58  ID:oo3Jt8Wj.net
vector がお手軽に使えるようになったせいで,
vector の不利な点―削除前詰はコストが高い―を取り落とす人が出てきたようだ

611
デフォルトの名無しさん[sage]   投稿日:2015/07/27 11:39:00  ID:KH8d/GA1.net(4)
何で測定する必要があるんだよ。
高々400KBのmemmoveの実行時間を調べてどうするんだよ。
今のPCのメモリ帯域は、理論値で21GB/sもあるのに、一体一秒に何千回改行する気だよwww
こんなものいちいち測定するなら、ありとあらゆる物を測定しなきゃならん。

大体、時たま発生する400KBのmemmoveがもたつく環境で、テキストエディが満足に動くはずが無い。
画面サイズを1024x768と小さめに見積もっても4MB、つまり400KBの10倍あるのに、
滑らかな描画が出来るわけが無い。まず問題視するならそっち。
そういう意味で破綻しているし、考える意味が無い問題と言える。

今のPCの能力では、テキストエディタの行を保持するのに、listを使ってもvectorを使っても
問題ない速度で動く。それはわかりきっているわけで、測定する意味が無い。
問題になるとしたら、描画関係。そっちを優先したデータ構造にすべし。
どちらを使ってもいいのなら、わざわざランダムアクセスが出来ないlistを選ぶ意味は無い。
面倒なだけ。何も考えずにvectorを使えばいい。

612
デフォルトの名無しさん[sage]   投稿日:2015/07/27 11:47:35  ID:KH8d/GA1.net(4)
もう一度書いておくと、問題になりえるとしたら描画関係なわけで、
描画に都合の良いデータ構造を採用するべきなんだよ。
行の変更は頻繁に起こるわけではないし、
たかだか400KBのmemmoveなんぞ、描画の重さに比べれば、無いも同然なわけで。
そんなものを測定して早い遅い言っても何の意味も無い。描画を中心に考えるべし。
描画に適したデータ構造と言う意味では、ランダムアクセスの出来るvecotrの方が
使いやすいといえる。丁寧に書いてあげるのなら、listでも構わない、が、
し・か・し、わざわざランダムアクセスの出来ないlistを使う意味は無いので、vectorでよい。
listだと、ソートするだけでも鬱陶しい。

613
デフォルトの名無しさん[sage]   投稿日:2015/07/27 12:15:48  ID:KH8d/GA1.net(4)
ついでに書いておくと、4K解像度だと、画面のビットマップサイズは30MB近くになる。
これだけの量をレスポンスを損なうことなくリアルタイムにレンダリングしなければならないのに、
たかだかたまに起こる400KBのmemmoveに拘っている暇は無い。
実際に、4K解像度で、何も考えずに、アンチエイリアス効かせて、DrawTextで全面描画すると、
カクカクになって、まるで使い物にならない。たぶん1FPS位になる。
実際、7のエクスプローラも、4K解像度で最大化すると、選択ツールがカクカクになる。
7のエクスプローラにとって4K解像度は想定外ということ。
更新のあった場所だけレンダリングするなり、DirectWrite使うなり、何らかの対策が必要。
お前らが過去に作ったツールも、4K解像度で滑らかに動くかどうか、一度確認してみたほうが良い。
特に遅いのが、アンチエイリアスの効いた文字の描画。FHD解像度では問題なくても、4Kだとカクカクになる。
これからのプログラムは4Kに対応しなくちゃね。

614
デフォルトの名無しさん[sage]   投稿日:2015/07/27 13:31:05  ID:KH8d/GA1.net(4)
あと、挿入や入れ替えの事ばかり気にしているようだけど、
実際には削除の方が問題になる。
memmoveは単純なアルゴリズムだしSSE化されているので高速だけど、
freeやdeleteは空き領域を結合したりと、複雑なアルゴリズムでとても遅いから。
加えてデストラクタも走るし。
しかも、vectorを使った場合でもlistを使った場合でも、
本体とバッファで、一行に付き2回のdeleteが走る。
経験則だけど、10万行を一気に削除すると、多分1秒ぐらい固まる。もっとかかるかも。
スレッド立ち上げておいて、バックグラウンドで遅延deleteすると良いかも。
こういう問題を放っておいて、挿入時間がどうとか、馬鹿げてるね。
根本的に目の付け所がおかしいんだよ。
それでも描画の方がもっと問題だが。

615
デフォルトの名無しさん[sage]   投稿日:2015/07/27 13:33:17  ID:L+84gj0A.net
http://ideone.com/JIBJGe

ほれ
Nを適当にいじって手持ちの環境で走らせてみ
listはある範囲の終点のイテレータを取得するのにも順繰りにたどるしかないんで
いくらinsertが速いと言ってもvectorの約3倍ほど時間が掛かるようだ
コメント2件

616
デフォルトの名無しさん[sage]   投稿日:2015/07/27 19:42:02  ID:8jkVFbGd.net
コンテナの無駄を語る前に、自分の文章の無駄を省くことを勧める

新機軸の考察を交えた、高尚な意見を語るのならともかく

617
デフォルトの名無しさん[sage]   投稿日:2015/07/27 20:59:48  ID:9agqNJ/2.net
クドくてわかりにくい、冗長なコードを書きそうだよなw

618
デフォルトの名無しさん[sage]   投稿日:2015/07/27 21:59:34  ID:kF5kcc0V.net
三行で読むのをやめた

619
デフォルトの名無しさん[sage]   投稿日:2015/07/27 22:24:31  ID:b0q7AFFp.net
いくら口が達者でも肝心のプログラムが一つも書けないんじゃム板では相手にされないよ
それに口が達者というより井の中の蛙って感じだね
仕事してないっしょ?

620
デフォルトの名無しさん[sage]   投稿日:2015/07/27 22:30:32  ID:DuLbgldQ.net
こんな文章書く奴が口達者でたまるかwww

621
デフォルトの名無しさん[sage]   投稿日:2015/07/27 22:38:24  ID:KcMXEwaZ.net(2)
>615
俺の環境ではvectorのほうがちょっと速いくらいで3倍の差はつかなかった。
最適化してないからかもしれん。
最適化オプション付けたらなぜか完走しない。
原因はよくわからん。

622
デフォルトの名無しさん[sage]   投稿日:2015/07/27 22:50:41  ID:sgwB7yTG.net
listは確かにinsert()は速いけど、そのinsertする場所を求めるのに時間がかかり、また
複数の要素をinsertするとその度にポインタを辿って一個ずつしか挿入出来ないのな

普通リスト操作と言うとつながったリストの先頭と最後尾だけを指定すればポンと挿入
出来るはずなのにそうなってない
C++11で改良されたかと思ったけど駄目だった

でも>615は改良の余地があるね
挿入もsplice()を使うべき

623
デフォルトの名無しさん[sage]   投稿日:2015/07/27 23:05:02  ID:Mi01ZGiW.net
文章盛ってるだけで言ってる事は同じとかそれこそ無駄

624
デフォルトの名無しさん[sage]   投稿日:2015/07/27 23:18:01  ID:KcMXEwaZ.net(2)
リストとツリーの遅さはガチ

625
デフォルトの名無しさん[sage]   投稿日:2015/07/27 23:40:10  ID:eqeml5nf.net
deque()でいいじゃん。

626
デフォルトの名無しさん[sage]   投稿日:2015/07/27 23:48:22  ID:pp6uoCzE.net(2)
VS2015のパフォーマンスエクスプローラーで分析してみた
予想どおりstd::nextだけで全体の73%もの時間を消費してる
これじゃあベンチマークの意味ないよ
ランダムに挿入するのが裏目に出てる

627
デフォルトの名無しさん[sage]   投稿日:2015/07/27 23:50:30  ID:pp6uoCzE.net(2)
ちなみにstd::vectorのstd::erase()とstd::insert()を足しても全体の25%にしかならない
もう少しベンチマークプログラムのアルゴリズムを考えるべきだろこれ

628
デフォルトの名無しさん[sage]   投稿日:2015/07/28 00:08:57  ID:WNbWyPpf.net
しかしstd::nextに73%かかるのがひょっとしたら実アプリに近いのかもしれない。
わからんけど。

629
デフォルトの名無しさん[sage]   投稿日:2015/07/28 08:24:07  ID:tsfiL0l/.net(3)
insertする場所は「今キャレットがある位置」で明確だから
テキストエディタでは探索コストは問題にならないのでは?

630
デフォルトの名無しさん[sage]   投稿日:2015/07/28 11:50:55  ID:dCM9/1ij.net
スクロール先頭のイテレータも保存して、
キャレット位置のイテレータも保存して、
マウスカーソル直下のイテレータも保存して、
と、どんどん保存するイテレータが増えていくわけですね。
面倒になってきて、そのうちイテレータキャッシュを作り始めると・・・
で、そこまでするメリットは?

631
デフォルトの名無しさん[sage]   投稿日:2015/07/28 12:35:30  ID:tsfiL0l/.net(3)
回答を聞く気がないなら最初から質問なんかしなさんな

632
デフォルトの名無しさん[sage]   投稿日:2015/07/28 12:42:23  ID:tsfiL0l/.net(3)
ああ、質問口調なのは自分も同じだった。今のは撤回するね、ごめん。

633
デフォルトの名無しさん[sage]   投稿日:2015/08/06 08:00:13  ID:f8gvnJE6.net
VisualStudio2015のC++11対応状況を知りたいがなかなか情報にヒットしない。

誰か知ってたら教えていただきたきそうろう

634
デフォルトの名無しさん[sage]   投稿日:2015/08/06 08:38:20  ID:BM+A+5/Q.net
つ[msdn]

635
デフォルトの名無しさん[sage]   投稿日:2015/08/19 23:31:20  ID:8uw32tI0.net(3)
C言語の初心者なのですが、ある文字列を分割する方法を検討しており、strtokにたどり着きました。
分割したい文字列はhttpリクエストに入っている/aaaa.js/などの値です。
# 今回は拡張子を取得したくstrtokで.を使っ

て分割しようとしています。

ただ、このstrtokは元の文字列を破壊してしまうようで、元の文字列は破壊したくなく思っています。
そこで、以下のページを発見しました。適合コード部分を参考にしようと思っています。
https://www.jpcert.or.jp/sc-rules/c-str06-c.html

マロックを使って、別の文字列にコピーしましょうね、ということなんですが、
マロックに詳しくなく、上記でメモリリークや不具合等が起きないか/問題ないのか気になっています。
マロックについて、調査したところ、以下のページの諸注意を見つけました。
http://www.geocities.co.jp/SiliconValley-Bay/7437/c/malloc.html
>>buffの値を変更するというのは別に構わないのですが、freeに渡す前に元の値に戻す必要があります。
この文言を見た限り、,傍載されてるfree(copy);ではちゃんとfreeされないのでは、と懸念しています。
そう思ってるのはcopyはstrtokによって破壊されており、元の値と異なってしまってると思ってるからです。

私の考えは正しいのでしょうか。。。それとも,僚颪方で問題ないのでしょうか。
C言語に詳しい方いらっしゃればご教授頂きたいです、m(__)m

636
デフォルトの名無しさん[sage]   投稿日:2015/08/19 23:37:00  ID:KWfiCcWC.net(3)
マロックに気をとられて内容が読み取れなかったw
コメント2件

637
デフォルトの名無しさん[sage]   投稿日:2015/08/19 23:43:19  ID:8uw32tI0.net(3)
>636
ああ、ごめんなさい。
文字列を別の箱にコピーしたら元の文字列を破壊しなくて済むよね、
という発想で、別の箱にコピーする方法を探してました。
すると,離據璽犬出てきてなれないマロックとかいうものが出てきて困惑したという感じです。
マロックがよくわからないので、,freeなどが適切なのかわからず。。。

638
デフォルトの名無しさん[sage]   投稿日:2015/08/19 23:46:23  ID:8uw32tI0.net(3)
>636

そして,虜埜紊copy=NULLとしてるのもなんでだろう、、とおもっており。
freeだけだとまずいんですかね。

639
デフォルトの名無しさん[sage]   投稿日:2015/08/19 23:52:19  ID:KWfiCcWC.net(3)
いや、マロックじゃなくてmallocと正確に書きましょう。
英単語を日本語で発音したものを日本語文字で書き起こしたものなんてさ

640
デフォルトの名無しさん[sage]   投稿日:2015/08/19 23:58:08  ID:KWfiCcWC.net(3)
で、mallocでググってみると、メモリの動的割り当てだの説明ページが出てくると思うんだが。

普通に配列を宣言する場合って、ソースコードを書く時点でサイズが決まってしまうけど、
そうじゃなくて任意の長さの文字列に対して配列を確保したい場合はmallocを使うもの
と考えておけばいい。
コメント1件

641
デフォルトの名無しさん[sage]   投稿日:2015/08/20 00:29:51  ID:hK7dURUd.net(2)
>640
ああ、それはわかります。動的に確保したいからって意味だと思います。
よくわからないのがfree関係のところです。
コメント1件

642
デフォルトの名無しさん[sage]   投稿日:2015/08/20 00:58:54  ID:iXzlVX06.net(2)
ああ済まない全然読んでなかったw

copy自体は確保されたメモリの先頭アドレスが格納されている。

特にそのアドレス値自体は変更してないので、freeで問題無く開放される。
変更されているのは、copyのアドレスが指し示すメモリに格納されている値。

あと、NULLを入れるのは、そうしておくとこれは確保されたメモリなのか、
開放したけどそのまま放置されているものなのか分かるようにする方法。
freeした後でcopyを再び再利用するとかでさ。
コメント1件

643
デフォルトの名無しさん[sage]   投稿日:2015/08/20 01:18:46  ID:hK7dURUd.net(2)
>642
なるほど。freeはアドレス値に対して解放するものなので、
格納されてる値が変わったとしても関係ないわけですね。

NULLを入れるのは目印的なもの?って感じなんですね。

644
デフォルトの名無しさん[sage]   投稿日:2015/08/20 06:50:00  ID:iXzlVX06.net(2)
はい

645
デフォルトの名無しさん[sage]   投稿日:2015/08/20 09:23:26  ID:7wC+DvH0.net
その目的なら、strchr()が無難だと思う。
コメント1件

646
デフォルトの名無しさん[sage]   投稿日:2015/08/20 09:39:44  ID:83vcvbQR.net
その目的なら_tsplitpath_s()かな?

647
デフォルトの名無しさん[]   投稿日:2015/08/20 11:57:47  ID:mELjCRuD.net(4)
>645
少し調べてみます。

後、ちょっと気になったんですが、上記の様なケースでmallocは絶対つかわないといけないもんなんですかね。
逆にmallocにかんする部分をコメントアウトしたりして使わない場合はどうなるんでしょう。エラー?

648
デフォルトの名無しさん[sage]   投稿日:2015/08/20 12:10:26  ID:XXXu8/KU.net
つまり >641 は全くのウソ

649
デフォルトの名無しさん[]   投稿日:2015/08/20 12:26:07  ID:mELjCRuD.net(4)
自己解決しましたが新たななぞが。。
mallocがないといわゆるセグメンテーション違反になるんですね。よく意味はわかってませんが。

そして、apacheモジュール開発のためにrequest_rec構造体のuriというのを上記の方法を用いて分割しようとしています。r->uriで参照してます。
しかし、リクエストを受け付けておそらくmalloc時にセグメンテーション違反のエラー文言が、、

*copy=(char *)malloc(strlen(r->uri)+1);
上記が悪いまでは推測できてるのですが、
これの何が悪いのかがわかりません、、
ちなみに推測したのはこれを加えた時点で、リクエスト受けた時にエラーログにセグメンテーションフォウルトと出るからです。
よくわからないのは、uriの長さ取れてて、その+1ならちゃんと領域確保されてそうなのに、だめなんだ、、ってので混乱してます。
うーん。

650
デフォルトの名無しさん[]   投稿日:2015/08/20 12:36:47  ID:mELjCRuD.net(4)
2重書き込みのため表示しません 内容を確認する

651
デフォルトの名無しさん[]   投稿日:2015/08/20 12:38:03  ID:mELjCRuD.net(4)
とおもったら、
*copyとしてたのをcopyにしたらなおりました、、
書き方間違えてたっぽいですが、なんか理由は不明のままに。

652
デフォルトの名無しさん[sage]   投稿日:2015/08/20 12:42:22  ID:q4vIrycP.net(2)
こんな人が開発したapacheのモジュールとか怖いな
ぜひ公開しないで欲しい
まぁ演習かなんかだろうが

653
デフォルトの名無しさん[sage]   投稿日:2015/08/20 12:57:42  ID:C0zkB6yz.net
初歩の初歩が分かってないから、コーディングしても無駄
一旦筆を止めて入門書のポインターあたりから勉強しなおすべき

654
デフォルトの名無しさん[sage]   投稿日:2015/08/20 15:50:17  ID:LQ4KOo8K.net
怖えー
ポインタすらわかってない奴がC開発なんてすんなよ

655
デフォルトの名無しさん[sage]   投稿日:2015/08/20 16:55:54  ID:dJVl2eol.net(2)
まぁ確かにstrtokの仕様は、直感的に分かりにくいしちょっと気持ち悪いよな
余談だけど、Cの標準関数で与えたパラメータの中身を関数コールで勝手に破壊するものって他にあったっけ?
コメント1件

656
デフォルトの名無しさん[sage]   投稿日:2015/08/20 21:30:07  ID:Amgj5mKY.net
C言語の記述する対象となるコンピュータの構造はシンプルだ。実際にはメモリページとかプロセス分岐とかあるかもしれないが、C言語では意識しなくてもいい
それほど多くないレジスタとメモリ、環境による出力の手続きさえ覚えればこんなにラクな言語はないと思うが
逆にVMとかフレームワークに支配される言語の方が難しい。
そういえば昔、アセンブラは出来るがBASICは出来ないという技術者がいたな。

657
デフォルトの名無しさん[sage]   投稿日:2015/08/20 21:46:06  ID:d5r4dVNc.net(2)
>655
ニュアンスは違うけど、time()も引き数がNULLじゃなければ書き換えるね。
strncpy()やstrncat()の振る舞いも分かり難いし。
コメント1件

658
デフォルトの名無しさん[sage]   投稿日:2015/08/20 21:48:41  ID:d5r4dVNc.net(2)
そうそう、printf()系も出力だけだと思い込んでいると%nでポイント先を書き換えますな。

659
デフォルトの名無しさん[sage]   投稿日:2015/08/20 21:54:30  ID:q4vIrycP.net(2)
そもそも、strtokはマルチスレッド環境で・・・だったから
いまどきは大丈夫なんだけど、誰も使わないんだ

660
デフォルトの名無しさん[sage]   投稿日:2015/08/20 23:29:24  ID:dJVl2eol.net(2)
>657
うん、それはまぁそうなんだけど‥
timeは「ここへ書き込んでね」のポインタ、strtokは「これを調べて頂戴」の元データなんだよね

元データは書き換えるし、関数内部で"状態"を保持してて、関数コールの度にそれが遷移する挙動が呼び出し側から見えないし→strtok (>_<)
素直に「元データ」「デリミタ」「トークンの位置」「トークンのコピー先ポインタ」を引数で渡して
取り出したトークンをコピー先に書き込んでくれた方が分かりやすい希ガス
で、関数戻り値はコピーできた文字数で、コピーできないエラーがあったら-1とか‥ たとえばね

661
デフォルトの名無しさん[sage]   投稿日:2015/08/21 00:45:01  ID:pYz5qGfR.net
それなんてsscanf()w

662
デフォルトの名無しさん[sage]   投稿日:2015/08/21 07:02:32  ID:ALerSfbe.net
asctimeとか
マルチスレッドでの利用禁止になってるやつとか

663
デフォルトの名無しさん[sage]   投稿日:2015/08/22 14:49:35  ID:mr0xWKbe.net
ターミナル系のソフトを書いていて、createprocessでcmd.exeを起動してそのあとそのプロセスの標準入力に文字を送り込む方法がわからん
誰か助けてくれ

664
デフォルトの名無しさん[sage]   投稿日:2015/08/22 16:05:22  ID:TdiPFjxM.net
自プロセスの出力ハンドルを起動したプロセスの標準入力を繋いで……
popen()のソースでも見たら?w

665
デフォルトの名無しさん[sage]   投稿日:2015/08/22 16:28:29  ID:nrIOmrw7.net
プロセス間通信じゃあダメなん?

666
デフォルトの名無しさん[sage]   投稿日:2015/08/22 16:57:57  ID:kXIlr7qG.net
受信動作をcmdに埋め込めと?

667
デフォルトの名無しさん[sage]   投稿日:2015/08/25 21:24:02  ID:L16aGoEed
std::shared_ptr<void>(malloc(size));
これをstd::mapに入れてデータコンテナを作成しているのですが
これって所有者がいなくなった時にfreeしてくれますか?

668
デフォルトの名無しさん[]   投稿日:2015/08/26 17:14:26  ID:m14uiM4v.net
http://racanhack.osdn.jp/rhdoc/coderect.html
Cをjavaに書き直したいがCの勉強が先か。

669
デフォルトの名無しさん[]   投稿日:2015/08/26 19:17:39  ID:YgutvNxC.net
あるコードをVisualStudio6.0からVisualStudio2003に変更してソフトは起動するのですが、
GetCurrentDirectory関数の動きがおかしいです。
下の処理を通る時、よくソフトが落ちます。
6.0で生成したexeではおきない現象です。

GetCurrentDirectoryを使わずに。定数の文字列をつかったら落ちませんが、
できれば、GetCurrentDirectoryかそれに近い関数を使いたいです。
原因と対策がわかる方教えて下さい。

ーーーーーー//グローバル
    char szAppPath[] ;
// アプリケーション起動パス確保
GetCurrentDirectory( MAX_PATH, szAppPath ) ;//<ここは問題ない

ーーーーーー//ここの関数でカレントに全角があるとよく落ちる
      //デフォルトカレントだとたまーに落ちる
      //半角のみの任意のファルダもたまに落ちる

CString strModuleDir = szAppPath;

GetCurrentDirectory( MAX_PATH, strModuleDir.GetBuffer( 0 ) ) ;
コメント1件

670
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/08/26 19:19:25  ID:FI4yoOkF.net
char szAppPath[] ; をchar szAppPath[MAX_PATH] ; にする

671
デフォルトの名無しさん[sage]   投稿日:2015/08/27 01:23:41  ID:B/17Cww9.net
typeinfoのことをググってたら以下のサイトにこんな例がありました

http://cpplover.blogspot.jp/2014/10/ctypeidtypeinfotypeindex.html

struct Base { virtual void p() = 0 ; } ;
struct Cat : Base { } ;
struct Dog : Base { } ;

std::string get_name( Base & ref )
{
decltype(auto) ti = typeid(ref) ;
if ( ti == typeid(Cat) )
return u8"猫" ;
else if ( ti == typeid(Dog) )
return u8"犬" ;

return u8"謎" ;
}

コンパイルしてみると expected primary-expression before 'decltype' とエラーになります
そもそも decltype(auto) という書き方自体は正しいんでしょうか?
コメント1件

672
デフォルトの名無しさん[sage]   投稿日:2015/08/27 01:47:35  ID:Hj8yQhv+.net
>669
GetCurrentDirectory( MAX_PATH, strModuleDir.GetBuffer( MAX_PATH ) ) ;
にしないとまずいんじゃない?領域が確保されないでしょ

673
デフォルトの名無しさん[sage]   投稿日:2015/09/06 08:18:00  ID:o5btW5BW.net
>671
同じ人のページに情報があった。
decltype(auto) はC++14で追加された(or 追加される予定の)機能みたいね。

http://cpplover.blogspot.jp/2013/08/decltypeauto.html

674
デフォルトの名無しさん[sage]   投稿日:2015/09/09 06:58:06  ID:MfaLsueu.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント2件

675
デフォルトの名無しさん[sage]   投稿日:2015/09/09 10:01:58  ID:/MxCO9yi.net(3)
遅いのはechoしてるからだろ
ファイルか/dev/nullにリダイレクトしたらどのくらいで終わる?
コメント1件

676
デフォルトの名無しさん[sage]   投稿日:2015/09/09 10:10:34  ID:/MxCO9yi.net(3)
あと C/C++ のスレで聞いてるんだからC++使いたいんだと思うけど
スクリプトでもいい気がする、、まあHelloWorldからやってみては
コメント1件

677
デフォルトの名無しさん[sage]   投稿日:2015/09/09 10:27:59  ID:c9DyEDAo.net
>674
そもそもやりたいことと合ってるの?

先頭のforは時間とメモリを食うから、
for((i=1 ; i < 2000000 ; i++))
とかでないと始まるまで時間かかるし、そもそも乱数が条件に
一致したときしか次のループに進まないから、早さは乱数次第だし
コメント1件

678
デフォルトの名無しさん[sage]   投稿日:2015/09/09 10:39:29  ID:UbDBGCr0.net(2)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

679
デフォルトの名無しさん[sage]   投稿日:2015/09/09 12:15:52  ID:AK7tGDzj.net
RNDが偏ってて終了条件になかなか合わないんだけじゃないの?
コメント1件

680
649[sage]   投稿日:2015/09/09 19:03:24  ID:MfaLsueu.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する

681
デフォルトの名無しさん[sage]   投稿日:2015/09/09 19:04:25  ID:M9IJrk25.net
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

682
649[sage]   投稿日:2015/09/09 19:17:35  ID:MfaLsueu.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント3件

683
デフォルトの名無しさん[sage]   投稿日:2015/09/09 19:27:05  ID:7ZaI5L5+.net
とりあえず実装するだけなら
やりたい事を1つ1つネットで調べるだけでおk

684
デフォルトの名無しさん[]   投稿日:2015/09/09 19:29:16  ID:+quVusLF.net(2)
健全でない言葉が含まれているため表示しません 内容を確認する

685
デフォルトの名無しさん[sage]   投稿日:2015/09/09 20:13:46  ID:4DuqUcJJ.net
アルゴリズムに関わる質問じゃないんだから、そこはノータッチでいいだろ

686
デフォルトの名無しさん[sage]   投稿日:2015/09/09 20:18:16  ID:/MxCO9yi.net(3)
シェルスクリプトじゃなくてPythonとかRubyとかさ
まあそこにgccも入ってるだろうからいきなり試せるよ
条件がわからんけどほぼそのまま移行できる、置き換えいるけど

687
デフォルトの名無しさん[sage]   投稿日:2015/09/09 20:28:15  ID:luIXYWNp.net
>682
>買っただけで1ページも読んでません。
聞く前にまず読め
んで試せ
どうせ言われて買ってもよまねぇだろw

688
デフォルトの名無しさん[sage]   投稿日:2015/09/09 20:42:45  ID:UbDBGCr0.net(2)
健全でない言葉が含まれているため表示しません 内容を確認する

689
デフォルトの名無しさん[sage]   投稿日:2015/09/09 21:25:07  ID:V9adpqxF.net
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

690
デフォルトの名無しさん[sage]   投稿日:2015/09/09 21:39:20  ID:cP17XdT8.net(2)
>682
シェルスクリプトでは、10万行のループ処理にかかる時間は、
whileでは5秒、forでは9分かかる

それらを、awkとperlに書き直せば、0.1秒。
たぶん、Python, Rubyでも同じくらいだろう

特にbashは、dashよりもずっと遅い。
シェルスクリプトでは一々、
コマンド(プロセス)を起動するから遅い。
しかも外部コマンドは、組み込みコマンドよりも、さらに遅い

一般的に速い順番は、
C/C++, Java > スクリプト言語 > シェルスクリプト

Python, Ruby が比較的、簡単なのでおすすめ。
C/C++にはポインタという地獄があるので、
君の学力では無理

691
デフォルトの名無しさん[]   投稿日:2015/09/09 21:46:28  ID:+quVusLF.net(2)
なんの目的でするのかとおもった。実機の再現ができるわけないし。
もしゲームづくりに使うなら再現性よりもインチキ麻雀みたいのでもいい。
設定資料が手に入ってて、プログラムするだけなのか?

692
デフォルトの名無しさん[sage]   投稿日:2015/09/09 21:52:57  ID:cP17XdT8.net(2)
まあ、プログラミングコンテストでも、

C/C++, Java で、1秒間に、
100万回の計算量なら楽勝で、
500万回までで見積もる

693
デフォルトの名無しさん[sage]   投稿日:2015/09/09 23:37:42  ID:iPfr8Kps.net
シェルでいいならシェルで
間に合わないならPerl系
でもだめなら C/C++
が通常のUnix/Linux屋の流れです。

まぁデイリなバッチならシェルで十分かと。

694
デフォルトの名無しさん[sage]   投稿日:2015/09/10 09:30:34  ID:0F4QMyo/.net
>689
カジノもな

695
デフォルトの名無しさん[]   投稿日:2015/09/12 21:09:12  ID:LSgZsaGc.net
「猫でもわかる」はおすすめできない。
サンプルコードにまともなエラーチェックが無いからだ。
たとえばこんなサンプルコードがある。

while (p != 999) {
printf("点数(999で終了)---");
scanf("%d", &p);
if (p != 999) {
sum = sum + p;
n++;
}
}

このサンプルコードの scanf に間違えて英字を入力したら何が起きるだろうか。
scanf の値をチェックするということを教えてもらっていない読者はどうすればいいだろうか。
ちなみにサンプルコードだけでなく練習問題の解答もこんな調子だ。
コメント2件

696
デフォルトの名無しさん[sage]   投稿日:2015/09/12 22:07:15  ID:2fh0eLdu.net
教えてもらっていない読者は「自分で調べる」ということをすればいいんじゃないか?

697
デフォルトの名無しさん[sage]   投稿日:2015/09/12 22:26:19  ID:shptMOS6.net
というか《何を》説明するために掲載されたサンプルコードなんだ?
その説明コンテクストの中でscanfの例外処理云々は本質的に説明に関係するのか?

698
デフォルトの名無しさん[sage]   投稿日:2015/09/12 23:17:57  ID:0C2xMlx4.net
scanfはバッファから読み出してエラーだったらバッファに残す よって・・・

699
デフォルトの名無しさん[sage]   投稿日:2015/09/12 23:32:28  ID:Y0QkDcDu.net
>695
エラーチェックが一々書いてあったら、
何の処理を説明しているのか、
わからなくなるので読むのが面倒

普通はソースコードの7割は、エラーチェックなので、
それを書くと、本のほとんどがエラーチェックで埋まり、
その本を買う価値がなくなる

700
デフォルトの名無しさん[sage]   投稿日:2015/09/12 23:57:17  ID:JUZlHW5G.net
大体そんな本は エラー処理は考慮してないって書いてるもんね。

701
デフォルトの名無しさん[sage]   投稿日:2015/09/13 00:01:49  ID:9Xvo2tPa.net(2)
昔、ある本で、scanfを使うな。getsを使えと書いてあったね。
getsで入力を受け取ってそれをatofとかatoiで変換するほうが、安全だと書いてあった。
たしかにそうだと思ったという記憶がある。
いまでは、C++のcinとかcoutを使っている。
コメント3件

702
デフォルトの名無しさん[sage]   投稿日:2015/09/13 00:49:11  ID:12WRp03/.net(2)
getsはバッファオーバーフローの危険がある
fgetsを使う

703
デフォルトの名無しさん[sage]   投稿日:2015/09/13 01:02:58  ID:M0wiS1Aa.net(2)
二次元ベクトル場の演算結果を表示したいのですがどのような方法を使えば出来ますか?
言語はC++とC#くらいしか書けません
コメント1件

704
デフォルトの名無しさん[sage]   投稿日:2015/09/13 01:38:19  ID:q3JnkdTU.net(2)
よくしらんけど、Gnuplotとかは?

705
デフォルトの名無しさん[sage]   投稿日:2015/09/13 01:43:29  ID:M0wiS1Aa.net(2)
描画速度が速い方が良いです

706
デフォルトの名無しさん[sage]   投稿日:2015/09/13 01:48:19  ID:HfSTz78x.net
教科書に従って一つ一つ計算していくしかないが?

707
デフォルトの名無しさん[sage]   投稿日:2015/09/13 01:59:04  ID:q3JnkdTU.net(2)
リアルタイムに描画したいんなら、
WindowsならDirect2DかGDI+かかな

708
デフォルトの名無しさん[sage]   投稿日:2015/09/13 09:55:27  ID:iqWIwAuh.net(2)
>701
もし670が、while文の使用例を読者に分かってもらうために掲げられたサンプルなら、
「scanfは危険だから―」なんて本題からはずれた話題を一緒くたに提供すると主題がぼやけるだろ。
while文の動作を理解することとscanfがエラーに脆弱であることとは何の関係もない。
そんな話は別の章(例外処理とかエラー対策とか)で解説するべきなんだよ。
そもそも "C言語やプログラミングそのものがまったく初めてという方を対象にした入門書" にどこまで求めているんだよ?って話。

709
デフォルトの名無しさん[sage]   投稿日:2015/09/13 10:23:29  ID:iqWIwAuh.net(2)
すまん、アンカーミスと本文ミス
--
誤: >701
正: >695

誤: while文の動作を理解することとscanfがエラーに脆弱であることとは何の関係もない。
正: while文の動作を理解することとscanfがエラーに脆弱であると理解することとは何の関係もない。

710
デフォルトの名無しさん[sage]   投稿日:2015/09/13 13:07:17  ID:llmGp1Am.net
まぁ突っ込むとしたら
今は別のやり方で置き換えられてる
っていう但し書きがほしい部分があるくらいかな

711
デフォルトの名無しさん[sage]   投稿日:2015/09/13 17:28:05  ID:/NF5k7PN.net
>701
できれば書名か著者を知りたい
昔から入門書は入門者が書いてるような変なのが多いし
コメント1件

712
デフォルトの名無しさん[sage]   投稿日:2015/09/13 17:58:30  ID:12WRp03/.net(2)
それは入門書が入門者のために書かれているからだろ
お前のような玄人からすれば変なものに見えても
入門者からすればそんなことを理解するだけでいっぱいいっぱいなんだ

713
デフォルトの名無しさん[sage]   投稿日:2015/09/13 20:42:36  ID:9Xvo2tPa.net(2)
>711
探してみたらかなり古い本(1989年発行)でした。
小川優介・西田雅昭著『プログラミングお作法』(技術評論社)
です。
この中に
「函数scanf()は、キャリッジリターン・コードの取扱方が言語仕様として定義されていないため、
処理系によっては副作用が発生します。そのため、処理系によっては予期せぬ振舞いをする場合があります。
このような副作用を考慮する必要のない標準文字列入力函数にgets()があります。函数gets()は標準入力
すなわちキーボードから1行(キャリッジリターンまで)を文字列として読み込み、このとき改行コードをヌル
コードに置き換えます。」
と書いてありました。
いまでは、Cも標準化が進んでいるようで、処理系による違いとかは無いかもしれませんが、
scanf()の書式仕様を指定する場合に間違えやすいこともあって、この本を読んでいら、gets()を
使っています。
しかしどなたがが指摘されていたように、fgets()を使うのがよりよいかもしれません。
コメント2件

714
デフォルトの名無しさん[sage]   投稿日:2015/09/14 09:10:41  ID:T1dWA9Ek.net
>713
fgets()がよりよいのではなくて、
gets()がダメなの。
新しいcでは最早deplicatedだ。

715
デフォルトの名無しさん[sage]   投稿日:2015/09/14 09:52:28  ID:MZSqhosU.net
deprecated?

716
デフォルトの名無しさん[sage]   投稿日:2015/09/14 12:58:07  ID:12ng6EG6.net
>713
予期せぬ振る舞いってなんだろう。
よく言われるscanfが初心者向けでない理由は改行が空白と扱われることだけど、K&R(翻訳)のscanfの節でも、
「復改も空白文字であるから、これは、scanfで複数行に渡る読み込みも可能だということを意味している。」
とあるから処理系依存ではないだろうし

717
◆QZaw55cn4c [sage]   投稿日:2015/09/14 21:34:52  ID:aQticbJR.net
scanf() なんてきれいさっぱり忘れて
fgets() + sscanf() とか適当なトークン解析とかに徹したほうが幸せだよ…

718
デフォルトの名無しさん[sage]   投稿日:2015/09/15 15:48:43  ID:RjhaFYE3.net
VC++で自作でMFCでアプリを作りました。ファイルをたくさん処理してそれぞれを吐き出すものですが
たくさんやると、タスクマネージャーやリソースモニタで見ていると、
利用可能メモリ(=スタンバイメモリ+空きメモリ)が減っていくのです
もともとアプリを走らせた起動後は空きメモリが2GB以上あったのが、500MBくらいまで減っていきメモリ不足のメッセージが出ます
メモリリークを入れてしまっているのかと思ってVC++デバッガで確認したのですが
アプリを終了させてもそれらしいリークは見つかりません。VC++のことはさておき、
タスクマネージャーのメモリなのですが、
メモリのワーキングセット、メモリのプライベートワーキングセット、コミットサイズ
ページプール非ページプールをみていてもファイル処理をいくらしても全く増えて行きません
唯一増えていくのは、ページフォルトですが、でもこれはFirefoxとかは2ケタも大きな値になっていて
関係ないと思います。
にもかかわらず、空きメモリはどんどん減っていくのです
どうなっているのでしょうか
タスクマネージャーの空きメモリとこれらワーキングセット等の関係を教えてください
コメント2件

719
デフォルトの名無しさん[sage]   投稿日:2015/09/15 16:04:20  ID:XyyEatel.net
空きメモリは気にしなくていいけど、デバッグでリーク出ないのは
ずっと確保しっぱなしで終了処理の時に初めて開放するのかもよ?

720
デフォルトの名無しさん[sage]   投稿日:2015/09/15 16:15:12  ID:DGAx56Up.net
アプリを終了しちゃったらメモリ解放されて
リークしてるかどうかわからないだろ

721
デフォルトの名無しさん[sage]   投稿日:2015/09/15 18:19:40  ID:Or0Sr6DS.net
先人のお言葉:
最初っからreleaseで作れ。

722
デフォルトの名無しさん[sage]   投稿日:2015/09/16 09:10:34  ID:nf18HxN0.net
>718
端的に言うと、空きメモリはシステム全体、ワーキングセットは特定プロセス
アプリを終了させたらアプリのリソースリークは解消するのでデバグ方法がおかしい

723
デフォルトの名無しさん[sage]   投稿日:2015/09/16 10:06:19  ID:knfsespo.net(2)
リークをVCが見つけてくれるという思い込みは誤り
タスクマネージャに反映されるタイミングが大幅にズレている可能性がある
ツールに頼る以前の問題

Javaとかスクリプトで悪い癖がついちゃったかね
自分でアロケートしたメモリを開放してないとか
オブジェクトをnewして返す関数なんかを呼んで後始末してないとか
そんな根本的な話じゃろ

724
デフォルトの名無しさん[sage]   投稿日:2015/09/16 10:26:27  ID:+5AYCL9d.net
>718
とりあえず_CrtSetDbgFlag

725
デフォルトの名無しさん[sage]   投稿日:2015/09/16 10:41:46  ID:7sbTeZHX.net
まあ開放しないで終了させるとデバッグログにズラズラと出るんだけど
ずっと保持してて終了前には開放してるから出てないのかと

726
デフォルトの名無しさん[sage]   投稿日:2015/09/16 13:34:19  ID:knfsespo.net(2)
なんか違う気がしてきた
グローバルなゴッドオブジェクトに全部ぶら下げてるというオチか

727
デフォルトの名無しさん[sage]   投稿日:2015/09/16 15:33:41  ID:a5qJ/F/3.net
タスクマネージャに表示される自アプリのメモリ使用量を増やすことなく
こっそりとメモリを使う方法が有る
この方法を使うとタスクマネージャで確認できるPC全体のメモリ使用量は増えるが
アプリ単体のメモリ使用量は増えない

728
デフォルトの名無しさん[sage]   投稿日:2015/09/19 22:00:51  ID:ppmJVZuM.net
エンディアンについて疑問というか不安なのですが
エンディアンはソフトを使う側のCPUに依存するのでしょうか?
もしそうだとすると、ソフトの設定をファイルに保存する時にパラメータをまとめた構造体を fwite() で保存して、
そのファイルを他のPCに移動させると、エンディアンが違っていたら誤った値がロードされるのでしょうか?

対策としては2バイト以上の値をすべて1バイトに分解して自分で順番を決めてファイルに書き込むしかないのでしょうか?
readmeに「マシンを超えて設定ファイルを移動させるな」と書くのは最終手段でなるべく避けたいです
コメント4件

729
デフォルトの名無しさん[sage]   投稿日:2015/09/19 22:06:48  ID:ISETQD0O.net(2)
>728
心配しなくてもえんでぃやん?

730
デフォルトの名無しさん[sage]   投稿日:2015/09/19 22:15:19  ID:MCsx1TIA.net
ソフトの設定ぐらいだったらテキストにすればいい
xmlとかwindowsのiniファイルとか正にそうだよな?

731
デフォルトの名無しさん[sage]   投稿日:2015/09/19 23:10:36  ID:4Q4PjKSm.net
心配ならhtonlしとけ
コメント1件

732
デフォルトの名無しさん[sage]   投稿日:2015/09/19 23:19:03  ID:ISETQD0O.net(2)
>731
何やそれ?
コメント1件

733
デフォルトの名無しさん[sage]   投稿日:2015/09/20 00:07:17  ID:5Bd4L2CtP
>728
boost::serialization

734
デフォルトの名無しさん[sage]   投稿日:2015/09/20 00:35:30  ID:Insv9mJ4.net
>728
そういう設定ファイル使う場合、その設計時点でどっちのエンディアンを使うか
決めるでしょ普通。それに合わせて実装すれば問題は出ない

735
デフォルトの名無しさん[sage]   投稿日:2015/09/20 02:14:38  ID:SoWNA795.net(2)
>728
基本的にはエンディアンが違うCPUで同じソフトは動かないから
移植することになったら読み書きを修正すればいいだけで
とりあえずは気にしなくていいよ

736
デフォルトの名無しさん[sage]   投稿日:2015/09/20 02:39:52  ID:Oy+vde1J.net
WIN32_FIND_DATA を用いてファイルを列挙し、ifstream から読みこもうとしています
その際にread 関数へ渡すファイルサイズ情報として、nFileSizeHigh,nFileSizeLow を得ました

nFileSizeLow はそのまま一回で扱えるので問題無いのですが、
nFileSizeHigh の値を利用する場合、手動でサイズ計算して複数回に分けて読み込むしかありませんか?

737
デフォルトの名無しさん[sage]   投稿日:2015/09/20 06:13:05  ID:SoWNA795.net(2)
そんな大きなサイズを一気に読み込むの?
コメント1件

738
デフォルトの名無しさん[sage]   投稿日:2015/09/20 23:03:50  ID:DWK3Vubo.net
64bitアプリなら一気にいけるかもしれないが32bitアプリなら無理なので小分けするしかない

739
デフォルトの名無しさん[sage]   投稿日:2015/09/21 22:46:34  ID:yAF/qNFv.net
メモリマップドファイルとか?

740
デフォルトの名無しさん[sage]   投稿日:2015/09/21 23:58:16  ID:DTNjasVP.net
ありがとうございます、大人しく小分けにします

>737
言われてみればご尤もなので、
適当なサイズを上限に小分けして読み込む処理で統一する事にします

741
デフォルトの名無しさん[sage]   投稿日:2015/09/24 15:34:21  ID:l6wjQdp1.net
>732
socket.h とか winsock2.h とか
要は外に出るときはネットワークバイトオーダーに統一すると

最初から複数の環境に対応させるならこうだけど、
通常は最初に作ったやつに合わせる
フォーマットだけ提供するならバイトオーダーマークを入れる手も

742
デフォルトの名無しさん[sage]   投稿日:2015/09/25 13:24:21  ID:cJmaZWu4.net
>703
二次元ベクトルなら、XY座標系なんだし
C++でもC#でも、オペレーター使えるから
XY座標系のベクトルを管理、処理する行列クラス作れば
良いんじゃない?
XY座標系だから、二行一列の行列処理だし

743
デフォルトの名無しさん[]   投稿日:2015/09/30 14:17:26  ID:r5ugZ70O.net(2)
g++ -std=c++11で以下のコードでエラーが出るのですが、
int main(int argc, const char *argv[]){
int array[12] = { 1234 };
int* p = array;
int pi;

pi = reinterpret_cast<int>(p);
}

main.cpp:12:31: error: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]
pi = reinterpret_cast<int>(p);
^
make: *** [main.o] エラー 1

reinterpret_castはこのコンパイラでは使えないという事ですかね?
コメント2件

744
デフォルトの名無しさん[sage]   投稿日:2015/09/30 14:37:40  ID:lHbG4YHv.net
>743
そのpiには、何が入ってるのが期待値なんだ?
コメント1件

745
デフォルトの名無しさん[sage]   投稿日:2015/09/30 14:37:59  ID:rddxCA32.net
>743
それLP64かLLP64じゃないの?
ポインタは常に64bitでもLP64とLLP64ではintは32bitしかない

746
デフォルトの名無しさん[]   投稿日:2015/09/30 15:05:10  ID:r5ugZ70O.net(2)
>744-745
なるほど、bitの上限の問題でしたか。
longでcastしたらarray[0]のアドレスを取り出せました。
このままでは移植性が0ですね。
有難う御座いました。

747
デフォルトの名無しさん[sage]   投稿日:2015/10/07 15:28:03  ID:GRynzwR1.net
if (no % 2 )

この条件式の意味を教えて下さい
コメント2件

748
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/10/07 15:32:19  ID:Xf/Hcqsc.net
>747
noを2で割ったときの余りが0でなければ
コメント1件

749
デフォルトの名無しさん[sage]   投稿日:2015/10/07 16:08:48  ID:jyxNZJK8.net
noの肩が何で%がオーバーライドされていない事が確認できないので
そのコードだけでは結論は下せない…

750
デフォルトの名無しさん[sage]   投稿日:2015/10/07 16:35:31  ID:CCbM2RdR.net
>747
そんなコード書くな

751
デフォルトの名無しさん[sage]   投稿日:2015/10/07 16:43:06  ID:M6BIJhgd.net
意味がわからないってことは自分で書いたわけじゃないのに書くなと言われてもなあ

752
デフォルトの名無しさん[sage]   投稿日:2015/10/07 17:13:43  ID:Kru1mWVv.net
奇数かどうか見てるんじゃね

753
デフォルトの名無しさん[sage]   投稿日:2015/10/08 20:12:40  ID:VJW9Q5b7.net
>748
ありがとうございます
理解できました

754
デフォルトの名無しさん[]   投稿日:2015/10/09 19:12:37  ID:EoDzitTg.net
struct gps {
float lat;
float lng;
};
vector<gps> gps1;
vector<gps> gps2;

gps1とgps2は大量の緯度経度情報を保存してあります。
このgps1,gps2の各緯度経度が一番近いものの情報を取得したいのですが
いい方法はないでしょうか?
コメント3件

755
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/10/09 19:21:36  ID:W40lUqcY.net(2)
>754
二点間の距離を定義せよ

756
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/10/09 19:53:27  ID:W40lUqcY.net(2)
地球はほぼ球体であり、緯度経度情報から球面上の点の
位置座標が定まる。二点の位置座標と三平方の定理から
距離を求めることができる。距離が最小になる点が答えになる。

757
デフォルトの名無しさん[sage]   投稿日:2015/10/09 20:16:27  ID:yuaYKRBS.net
球面三角法の問題ですね。
球面状の距離は大圏コース上の長さで定義されます。
1と2との経度と緯度をそれぞれ、Lo1, Lo2、La1, La2
とすると、角距離dは
cos d =sin La1 sin La2+cos La1 cos L2 cos(La1-La2)
で与えられます。
但し、この式は、dが0度あるいは、180度に非常に近い時は
cos dが1に非常に近い値になり、その変化が緩やかだからです。
コメント1件

758
デフォルトの名無しさん[sage]   投稿日:2015/10/09 20:35:01  ID:3Zfy8nsh.net
GPSに特殊相対理論が使われてる事を説明出来れかい?
俺はなんとなく説明出来るぞ。へへん

759
デフォルトの名無しさん[sage]   投稿日:2015/10/09 21:10:36  ID:JqWJKO83.net
WG84だっけ?なんか楕円体が決まってたよな

760
デフォルトの名無しさん[sage]   投稿日:2015/10/09 21:37:04  ID:oggkbSfr.net
>754
説明が分からん

761
デフォルトの名無しさん[sage]   投稿日:2015/10/09 22:46:25  ID:W7w78kvP.net
double使えよ

762
デフォルトの名無しさん[sage]   投稿日:2015/10/09 23:22:02  ID:nLFgz/u9.net
とりあえず、素朴な実装をコードで示してもらおうか。
最適化するのはその後だ。

763
デフォルトの名無しさん[sage]   投稿日:2015/10/10 02:50:43  ID:9JPBBcF9.net
煽ればサンプルコードが出て来ますよ

764
デフォルトの名無しさん[]   投稿日:2015/10/10 15:40:47  ID:Ver+0xRf.net
731です
緯度経度とかいてしまったのが間違いだったのかもしれません

gpsを持って同じ道を二回歩いてみて各gpsデータにおける一番近い点を取得したかった
だけなので厳密な計算方法を利用しようとは考えていませんし数mオーダーの計算は困難と
聞いております

なので一回目二回目ともに10歩歩いた時のGPSの情報、20歩歩いた時のGPSの情報、30歩、40歩、、、、
と取得していく中で何歩目が一番近いか知りたいと考えています

765
デフォルトの名無しさん[sage]   投稿日:2015/10/10 19:15:39  ID:aygA5MQe.net(4)
doubleの0は真のゼロですか?
==0比較が失敗することがあるんですよね
2の倍数じゃない数が正しく表現されないのは知ってるんですが
でもゼロはゼロですよね?
その辺の仕様がわかる人いますか?
コメント3件

766
デフォルトの名無しさん[sage]   投稿日:2015/10/10 19:56:19  ID:kfeAURAL.net(3)
>765
表示上0であっても内部的に0になっているとは限らないね
doubleの0ってのが具体的にどういうもの(状況)を示しているのかちょっとわからないけど

double x=0;
x = x+ 0.3;
x = x- 0.2;
x = x- 0.1;
if(x==0) func();

これ計算すると答えは0なので関数 func(); は実行されると思いきや実行されない

767
デフォルトの名無しさん[sage]   投稿日:2015/10/10 20:07:45  ID:aygA5MQe.net(4)
struct A{ double a;}
A aa ={0};
こんな感じので
aa.a==0が失敗することがあるんです
比較部分はどのみちなおしますが
ただDLL作成しての呼び出しなのでバグがあるなら切り分けしたいと質問した次第でして
コメント1件

768
デフォルトの名無しさん[sage]   投稿日:2015/10/10 20:09:43  ID:wZWPBuKi.net(4)
0を表す場合は符号部、仮数部、指数部のすべてのビットを0とすると都合が良いことからそのようにされることが多い。
またその場合は+0.0で、浮動小数点では他に符号部が負をあらわし他が0の-0.0という0もあることがある。
たとえば正の数を負の無限大で割ったり、負の数を正の無限大で割ったりすると-0.0になる。

これはWikiの転載だけど、どうして自分でGoogleで検索しないの?
Google知らないの?Wiki知らないの?

769
デフォルトの名無しさん[sage]   投稿日:2015/10/10 20:12:12  ID:wZWPBuKi.net(4)
どうしてデバッガを使わないの?

770
デフォルトの名無しさん[sage]   投稿日:2015/10/10 20:20:22  ID:vT1N9X7j.net(2)
計算後の float, dobule で == が通らないのは常識だけど、誰もが一度は通る道でもあるだろ

771
デフォルトの名無しさん[sage]   投稿日:2015/10/10 20:26:00  ID:kfeAURAL.net(3)
>767
初期化直後に比較するのか?

772
デフォルトの名無しさん[sage]   投稿日:2015/10/10 20:44:06  ID:Bz6ayOgj.net(2)
年寄りだと実数即値は0.0て書くんだろうか‥?
コメント1件

773
デフォルトの名無しさん[sage]   投稿日:2015/10/10 21:00:20  ID:aygA5MQe.net(4)
>757
DLLで初期化して呼び出しもとで比較。ライブラリがおかしな事してなければ途中計算いっさいなし
だから気になった
>754
んなことわかってるってーの
俺より知識のある奴はいなそうなんでもういいです
コメント1件

774
デフォルトの名無しさん[sage]   投稿日:2015/10/10 21:07:47  ID:wZWPBuKi.net(4)
ほら、まじめに相手して損したでしょう

775
デフォルトの名無しさん[sage]   投稿日:2015/10/10 21:26:53  ID:LXdnro1p.net
>765
インド人に聞け

776
デフォルトの名無しさん[sage]   投稿日:2015/10/10 21:36:36  ID:vT1N9X7j.net(2)
> ライブラリがおかしな事してなければ途中計算いっさいなし
それならバグの可能性の方が高いと思うが。
一応IEEEではビットフォーマットまでは規定していなかったはずだが、現実的にほぼ全てのマシンで同じだったはず。
それ以前に通常は同一マシン上だからビットフォーマットは当然同じ。
コメント1件

777
デフォルトの名無しさん[sage]   投稿日:2015/10/10 21:39:39  ID:kfeAURAL.net(3)
呼び出し元とDLLとでアライメントが違ってるとか

>772
0 との比較(初期化)だと整数型からの実数型へのキャストで正確な0ではなくなるってヤツだっけ?
コメント1件

778
デフォルトの名無しさん[sage]   投稿日:2015/10/10 21:44:17  ID:aygA5MQe.net(4)
やっぱバグすかー哀しいなあ
どうもー

779
デフォルトの名無しさん[sage]   投稿日:2015/10/10 22:02:45  ID:wZWPBuKi.net(4)
二回連続で平気でアンカを間違うような人だからね(>773)
注意散漫、プログラムもバグってるんでしょう

780
デフォルトの名無しさん[sage]   投稿日:2015/10/10 23:01:50  ID:Bz6ayOgj.net(2)
>776
> 一応IEEEではビットフォーマットまでは規定していなかったはずだが、
おいおい、これこそが浮動小数点規格の眼目だろう
https://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%...#IEEE.E6.96.B9.E5.BC.8F.EF.BC.88IEEE_754_.E5.BD.A2.E5.BC.8F.EF.BC.89

>777
> 0 との比較(初期化)だと整数型からの実数型へのキャストで正確な0ではなくなるってヤツだっけ?
たしかK&Rの初版では、整数値でも実数として処理したいばあい、コンパイラへ指示するために
明示的に .0 を付けろとか‥ 除算結果のキャストに効いてくる、とかなんとか
そのクセが染みついてる人は.0を付けたがるのかな?とw

781
デフォルトの名無しさん[sage]   投稿日:2015/10/11 01:27:33  ID:IkPUsRem.net

782
デフォルトの名無しさん[sage]   投稿日:2015/10/11 06:18:57  ID:SxbzA5C5.net
ソースはウィキ

783
デフォルトの名無しさん[sage]   投稿日:2015/10/12 09:31:45  ID:Cb4Ih0Jl.net
>765
doubleに限らず、0は偽
0以外が真
って答えるとアスペっぽいな。

そもそも浮動小数点数型は近似値しか扱えないので
やっぱ閾値を決めて近似判定するか
ざっくり整数型にキャストして比較しちゃえば?

784
デフォルトの名無しさん[sage]   投稿日:2015/10/12 10:12:05  ID:mWUWwMlc.net(2)
0.1とかどうすんだ

785
デフォルトの名無しさん[sage]   投稿日:2015/10/12 11:09:39  ID:PwRq9lmF.net
一昨日のネタにレスしてるけど意味不明だな
しかも
>浮動小数点数型は近似値しか扱えない
とか断言しちゃってるし

786
デフォルトの名無しさん[sage]   投稿日:2015/10/12 12:00:37  ID:DSHcQooM.net
ただし、0.0には+0.0と-0.0が有るという

787
デフォルトの名無しさん[sage]   投稿日:2015/10/12 13:04:46  ID:C+jvtDQK.net
+0.0と-0.0は比較の時にどちらも0にマッチすると思ったけど。

788
デフォルトの名無しさん[sage]   投稿日:2015/10/12 15:54:34  ID:FoiyBQVb.net
for(int i = 0; i < 4; ++i){

このループはi=1,i=2,i=3
となるので、3回ループが実行されるということでよろしいのでしょうか?
コメント1件

789
片山博文MZ ◆T6xkBnTXz7B0 [sage]   投稿日:2015/10/12 15:59:59  ID:f2n17VdL.net
>788
i == 0を含む四回。

790
デフォルトの名無しさん[sage]   投稿日:2015/10/12 16:04:27  ID:oCa7NkmO.net(2)
forループカウンタを
i++
++i
は好き好きですか?
コメント1件

791
デフォルトの名無しさん[sage]   投稿日:2015/10/12 16:06:08  ID:mWUWwMlc.net(2)
for文の3つ目(変化式)は本文が実行された後で呼ばれるし
インクリメントが前置でも後置でも結果は同じ

792
デフォルトの名無しさん[sage]   投稿日:2015/10/12 16:11:48  ID:VZXXCjAT.net
++iもi++も同じなんですか
ありがとうございました

793
デフォルトの名無しさん[sage]   投稿日:2015/10/12 16:13:16  ID:oCa7NkmO.net(2)
++i++
と書くと2増えますか?
コメント1件

794
デフォルトの名無しさん[sage]   投稿日:2015/10/12 16:23:03  ID:iier02gv.net

795
デフォルトの名無しさん[sage]   投稿日:2015/10/12 17:17:25  ID:08WVOaLv.net
>790
i++ と ++iは戻り値が違う。単に整数型なら戻り値を気にしないのなら同じだが
これがクラスのオーバーロードされた演算子だと i++ は処理を終えるまで最初の値を
保持しなければならないので戻り値を取らないなら保持が無駄になる。
そういう無駄を省きたいなら普段から ++i を使いたくなるということ。

今のPCで違いなんか出るか!と言われればそれまでだが

796
デフォルトの名無しさん[sage]   投稿日:2015/10/14 20:35:17  ID:Qq/D9jsd.net
それ以前にコンパイラがなんとかしちまうな。副作用のある関数をオーバーロードしてたら別だが。

797
デフォルトの名無しさん[sage]   投稿日:2015/10/21 20:50:31  ID:4OC5hcF4.net
プリプロセッサか何かで、このソースは32bit環境としてコンパイルすること(-m32を付けてコンパイルしろ)、みたいな指令を
ソース中に埋め込む事ってできますか?

コンパイラはLinuxのgcc4とgcc3を併用してます

798
デフォルトの名無しさん[sage]   投稿日:2015/10/22 06:50:43  ID:VleKFdIY.net
GCC5が出たというのに…

799
デフォルトの名無しさん[sage]   投稿日:2015/10/22 14:21:39  ID:DwxkcuZk.net(2)
C++でクラス内のクラスのメンバ関数から1つ上のクラスの変数にアクセスすることはできますか?

class c_Master{
 int val ;

 class c_Slave{
  void func() ;
 } ;

}

func()の中で val = 1 ; のようにvalの値を変えたいです
c_Masterのインスタンスは複数作りたいのでstaticをつけることはできません

800
デフォルトの名無しさん[sage]   投稿日:2015/10/22 14:40:47  ID:MPE/iy9W.net
privateってことはc_Slaveはc_Masterの中からしか使わんのだろ?
だったらc_Slaveのコンストラクタでthisを渡せばいいじゃない

801
デフォルトの名無しさん[sage]   投稿日:2015/10/22 15:16:14  ID:DwxkcuZk.net(2)
c_Slaveの中に
c_Master* p_Master
のようなポインタを作って
p_Master->val = 1 ; という風にアクセスするということでしょうか?
それならできそうですありがとうございます

802
デフォルトの名無しさん[sage]   投稿日:2015/10/22 15:22:52  ID:7evvohY8.net
C++の場合、Java のようなInner クラス/Outer クラス関係は無いからね。

803
デフォルトの名無しさん[sage]   投稿日:2015/10/23 17:24:09  ID:xtwbcN6R.net(2)
protectedじゃいかんのか?

804
デフォルトの名無しさん[sage]   投稿日:2015/10/23 17:25:09  ID:xtwbcN6R.net(2)
クラス内クラスか継承してるんじゃないのね。

805
デフォルトの名無しさん[]   投稿日:2015/10/30 12:53:47  ID:evAKCgDF.net(3)
初心者です
unsigned long a = b->c;
だとうまくいくのですが
unsigned long a;
a=b->c;
だとコンパイルはできるのですがbusエラーが出てしまいます
何か考える原因はないでしょうかご教授お願いします。
コメント3件

806
デフォルトの名無しさん[sage]   投稿日:2015/10/30 14:49:29  ID:rNHBRIIu.net(5)
>805
連続した行じゃなくて、実際には間に何か処理が入っているんじゃねーの?
で、その処理スタック壊しているとか。
コメント1件

807
デフォルトの名無しさん[sage]   投稿日:2015/10/30 14:51:21  ID:W7b3aTEp.net
busエラってなんだ?
コメント1件

808
デフォルトの名無しさん[sage]   投稿日:2015/10/30 15:11:34  ID:rNHBRIIu.net(5)
std::string Format(const char* fmt, ...);
的な関数を作った。
で、書式文字列しかない時には、fmt を書式文字列として扱わず、そのまま返すだけにしたいので、
std::string Format(const char* fmt);
というものを追加したが、これだと引数が一つの時、あいまいだといわれエラーになる。

そこで、
std::string Format(const char* fmt, ...); をやめて、
template<typename T>
std::string Format(const char* fmt, T dmy, ...) {
  va_list args;
  va_start(args, fmt);
  std::string rest = VFormat(fmt, args);
  va_end(args);
  return rest;
}
としたところ、フツーの Windows7 では動くが 本来のターゲットの XP embedded 環境だと
まともに動かない(これ自体は動くが、スタックを壊すらしく、後の処理が怪しくなる)。
そもそも C++ 的にこういうことはやっちゃいけないことなのか、ターゲットの環境がおかしいのか、
はたまたどうすればまともに動くようになるのか、わかる人がいたら教えておくれ。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

コメント1件

809
782[sage]   投稿日:2015/10/30 15:19:28  ID:rNHBRIIu.net(5)
おっと忘れていた。
ビルド環境は VS2010 です。

810
デフォルトの名無しさん[]   投稿日:2015/10/30 15:20:43  ID:evAKCgDF.net(3)
レスありがとうございます
趣味で今更ながらPSPむけにコンパイルしているのでコンパイラ側の問題かもしれません
busエラーについては私もどういうエラーなのかはよく存じないのですがWikipediaによると
https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%B9%E3%82%A8%E3%83%A9%E3%...
要約するとメモリへのアクセスの失敗のようです。
また、いろいろいじくってみた結果わかったことが一つあって
関数内でaを宣言した時は問題なしなのですが
ヘッダ内もしくはグローバル変数の時の時に失敗するみたいです。
コメント1件

811
デフォルトの名無しさん[sage]   投稿日:2015/10/30 15:29:00  ID:3PTV2iIj.net
>805
ただ単に
unsigned long a;
って定義してる?
何かの構造体の中だったりしないか?
コメント1件

812
782[sage]   投稿日:2015/10/30 15:52:07  ID:rNHBRIIu.net(5)
>808
間にレスが挟まるとわかりにくくなるからアンカ打とうぜ。
一々 ID 見るのもめんどくせーし。

#pragma packed(1)
struct T {
  unsigned long l;
  char c;
} g[10];

void func() {
  g[1].l = 1; // NG
  struct T t;
  t.l = 1; // OK
}
こんな感じ?
コメント2件

813
782[sage]   投稿日:2015/10/30 15:55:00  ID:rNHBRIIu.net(5)
>812
落ち着けよ俺
>810
で、 >> 785 の話はこういうことかなと。

814
デフォルトの名無しさん[]   投稿日:2015/10/30 16:18:57  ID:evAKCgDF.net(3)
>806>807>811>812さんすみませんそしてありがとう>805です、
いろいろ試行錯誤して原因が判明しました
unsigned long a;
a=b->c;
-----別の関数--------
for(int i=0;i<a;i++)
ここでエラー発生
aに0を代入した時だけうまくいったために気づきました
・・・プログラムが肥大しすぎてつらい、どこでどんな処理をしてるか自分でも把握できてない
コメント1件

815
デフォルトの名無しさん[sage]   投稿日:2015/10/30 22:05:24  ID:XZwfZSuT.net
>814
機能別に分け!
}

816
デフォルトの名無しさん[sage]   投稿日:2015/10/31 19:42:54  ID:23sVEfSr.net
困難は分割せよ

817
デフォルトの名無しさん[sage]   投稿日:2015/10/31 19:53:22  ID:F017Euy3.net
人類の工学5000年の知恵:分割統治
それが分科の学となって科学となった。

818
デフォルトの名無しさん[]   投稿日:2015/11/03 13:35:41  ID:fim1V6dp.net(3)
C++初心者です。
下記Aのプログラムのif部分をBへと変更したいのですが、
エラー「これらのオペランドと一致する演算子 "||" はありません」
と表示が出てしまいます。
これを実現するには、オーバーロードという処理をしないといけないのでしょうか?
それともなにか、string型の比較用に使える関数でもあるのでしょうか?

■A
string a="文字列";
string b="文字列";
int x=0;

if (a == "文字列" ) x++;
else if (b == "文字列" ) x++;

■B
if( (a || b) == "文字列" ) x++;
コメント1件

819
デフォルトの名無しさん[sage]   投稿日:2015/11/03 13:45:06  ID:kfNzP733.net
>818
そういう簡略化記法はない
if( (a == "文字列" || b == "文字列" ) x++;
とでもするしかない
コメント1件

820
デフォルトの名無しさん[sage]   投稿日:2015/11/03 13:55:56  ID:i649bMmf.net
bool AorBequals(a, b, "文字列")

こうやって使える関数を作ればいい

まあ条件分岐はとにかくバグが入り込みやすいので
あまり込み入ったことをせずベタに書いたほうが後々楽
コメント1件

821
デフォルトの名無しさん[sage]   投稿日:2015/11/03 13:59:02  ID:fim1V6dp.net(3)
>819
ありがとうございました。
単純な文法ミスでしたね・・・失礼しましたorz

822
デフォルトの名無しさん[sage]   投稿日:2015/11/03 14:04:54  ID:fim1V6dp.net(3)
>820
bool型で関数作成もわかりやすそうですね!
ありがとうございます。

823
デフォルトの名無しさん[sage]   投稿日:2015/11/05 23:04:17  ID:nUM8ca/H.net
static じゃないメンバ変数を自クラスからアクセスするのにクラス名つけるのってありですか?

CHoge::mVal = 0; 見たいに書く。

824
デフォルトの名無しさん[sage]   投稿日:2015/11/05 23:09:25  ID:Rl0ElxiZ.net
多重継承で同じ名前があるのかな?と思う

825
デフォルトの名無しさん[sage]   投稿日:2015/11/06 00:38:00  ID:ykiXGTEN.net
定数の定義について質問です。

連番の定数を定義する時には、enumを使いますが、
これで作られるのは全部変数で、各定数ごとにメモリを確保しているんですよね?

メモリを消費したくない場合、enumを使わず、#defineを行ったほうがいいのでしょうか?
コメント2件

826
デフォルトの名無しさん[sage]   投稿日:2015/11/06 00:52:10  ID:eLeZ0/m6.net
定数じゃなかったっけ?

827
デフォルトの名無しさん[sage]   投稿日:2015/11/06 03:06:29  ID:2no8hc5C.net
enum自体はメモリ消費しないよ

828
デフォルトの名無しさん[sage]   投稿日:2015/11/06 08:22:06  ID:nauUzqH5.net
windows上でopenCVってのを使いたいと思って居ます。

使用OSがwindowsなのでダウンロードするopenCVはwindows版で良いとしても、コンパイラはvc++になるのでしょうか?
ご教示頂けたら幸いです。

※後にJavaにてGUIを生成して、JNIで上記を呼び出したいと思って居ます。

829
デフォルトの名無しさん[sage]   投稿日:2015/11/07 08:41:45  ID:WJci58Ju.net
コンパイラなんて何でもいいと思うけど
というかjava版のOpenCV使えば?
コメント1件

830
デフォルトの名無しさん[sage]   投稿日:2015/11/07 14:08:38  ID:aJXYP9QX.net
>829
公式なら使うのですが、確か非公式だった様な。

vc を使う事にしました、ありがとうございます。

831
デフォルトの名無しさん[sage]   投稿日:2015/11/08 11:36:04  ID:RpsuGr6i.net(2)
>825
定数だよ。
ついでに言えば、連番に限らないよ。
例えば、enum RelativeDays {Tommorow = 1, Yesterday = -1}なんてのもできなくはない。

832
デフォルトの名無しさん[sage]   投稿日:2015/11/08 12:47:29  ID:vx6yITef.net(2)
>825
> これで作られるのは全部変数で、各定数ごとにメモリを確保しているんですよね?
> メモリを消費したくない場合、enumを使わず、#defineを行ったほうがいいのでしょうか?
このenumの理解度からして闇が深そうだな。

enum tag {e1, e2, e3, …};
e○ごとにメモリを確保してるわけじゃないよ。単に列挙型要素を宣言してるだけでまだ実態はない。

enum tag val1, val2, val3, …;
実際にメモリを確保するのは変数のval○を定義するとき。

まあ他に、#defineじゃなくてenumを使えば、コンパイル時にチェックしてくれるとか利点はある。

833
デフォルトの名無しさん[sage]   投稿日:2015/11/08 13:50:53  ID:2JTWdxT9.net
enumのメモリ消費気にするってw
どんだけたくさん使う気だよ

834
デフォルトの名無しさん[sage]   投稿日:2015/11/08 15:43:20  ID:rgUuUfPG.net
C++デーモン小暮「グハハハハ! お前もカプセル化してやろうか」

835
デフォルトの名無しさん[]   投稿日:2015/11/08 17:29:06  ID:Kfq1KjrF.net(2)
ファイルに書き込みができない
解決策を教えてほしいです

#include <stdio.h>

int main(void){
int i;
int n = 4;
double x;
double y;
double data_x[4] = { 0.8, 1.8, 2.8, 3.8 };
double data_y[4] = { 0.7174, 0.9738, -0.6119, -0.4646 };
FILE *output;
errno_t error;
if ((error = fopen_s(&output, "output.dat", "w")) == NULL){
printf("Can't opne file\n");
}
else{
fprintf(output, "%f,%f\n", data_x[0], data_y[0]);
fclose(output);
printf("Completed\n");

}
return 0;
}
コメント1件

836
デフォルトの名無しさん[sage]   投稿日:2015/11/08 17:35:45  ID:FJ7EwzEm.net
>835
戻り値
正常終了した場合は 0 を返します。
失敗した場合はエラー コードを返します。
これらのエラー コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。

だから fopen_s 正しくはこっちじゃね?

if ((error = fopen_s(&output, "output.dat", "w")) != NULL){
コメント1件

837
デフォルトの名無しさん[]   投稿日:2015/11/08 17:43:23  ID:Kfq1KjrF.net(2)
>836
なるほど,解決したわ

ありがとう

838
デフォルトの名無しさん[sage]   投稿日:2015/11/08 19:21:46  ID:gczgyzuS.net
0を返すってんだから0と比較しろって。
NULLが0じゃない環境も今時珍しいけど
コメント1件

839
デフォルトの名無しさん[sage]   投稿日:2015/11/08 20:08:14  ID:zLvmLdPT.net(4)
それはおかしい
NULLは内部でどういう数値を使っているかにかかわらず
ソースコード上ではNULLはdefineで0と定義してあるのではないかね
だからどうであれソースコード上で0に置き換わるのでは?
しかし((void *)0)と定義して有る場合はコンパイルエラーになるね
コメント2件

840
デフォルトの名無しさん[sage]   投稿日:2015/11/08 20:13:55  ID:rhG8pOkx.net(2)
最終的に置き換わるからって問題じゃなくね
そんなソース引き継ぎたくないわw

841
デフォルトの名無しさん[sage]   投稿日:2015/11/08 20:22:17  ID:krAhSW9o.net
環境によっては-1のこともあると大昔に聞いた気がする。だからNULLと書かなきゃいけないと
今はnull_ptrがあるけど

842
デフォルトの名無しさん[sage]   投稿日:2015/11/08 20:56:58  ID:zLvmLdPT.net(4)
それはない
ヌルポの内部表現が-1だったとしてもソースコード上では0がヌルポ
ポインタが出ててくる事が期待される箇所に0が出現したら
コンパイラはヌルポインターを生成するとCの仕様で決まっている

843
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:33:04  ID:qUw9KKbb.net
0と比較しろって書いてるんだろ?
コメント1件

844
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:42:38  ID:RpsuGr6i.net(2)
NULLが0じゃない、0がNULLなんだ。

つー話はさておき、今時詰め込むメリットないから代入と評価は分けようぜ。

845
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:44:47  ID:zLvmLdPT.net(4)
>NULLが0じゃない、0がNULLなんだ。

いやそれはおかしい
コメント1件

846
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:47:30  ID:rhG8pOkx.net(2)
>845
お前否定しかしてないけどお前が間違ってるっていうw

847
デフォルトの名無しさん[sage]   投稿日:2015/11/08 21:53:37  ID:zLvmLdPT.net(4)
#define NULL 0
と定義して有るんだからNULLが0であって、0がNULLなわけではないし
0がヌルポインタなんだ、の言い間違えだったとしても
ヌルポではない普通の整数の0の場合も有るから
常に0がヌルポなわけでもない
コメント1件

848
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/08 22:03:50  ID:hjGS9Lf9.net
良いじゃんC言語なんてテキトーに書いて動いた終わり。で
もう使われる事もないその程度の言語なんだから
コメント1件

849
デフォルトの名無しさん[sage]   投稿日:2015/11/08 22:05:12  ID:SGCCwhdk.net
ヌル論争なんて聞き飽きた。
ヌルはゼロだと思っていても全く問題ない。

850
デフォルトの名無しさん[sage]   投稿日:2015/11/08 22:22:50  ID:vx6yITef.net(2)
ま、エラーの条件判断に「==NULL」と書いてるところから推理すると、fopenとfopen_sをごちゃ混ぜにしちゃったんだろうね。
最初から次のブログのコードをパクって書いていれば問題なかったのに…
http://blog.livedoor.jp/mrcom511/archives/51270788.html

851
デフォルトの名無しさん[sage]   投稿日:2015/11/09 06:47:17  ID:imWJY0W/.net
>839
>しかし((void *)0)と定義して有る場合はコンパイルエラーになるね

この実装しか見たことない

852
デフォルトの名無しさん[sage]   投稿日:2015/11/09 07:13:22  ID:fyLz/sBu.net(7)
C++の場合は#define NULL 0
Cの場合は#define NULL ((void *)0)
理由は考えろ。
コメント1件

853
デフォルトの名無しさん[sage]   投稿日:2015/11/09 07:35:26  ID:u4Kl1uhV.net
頑なにNULL論争を続けようとする人はなんなの?
なんで実装を気にしてプログラム書くの?
NULLかnullptr使うと死ぬの?

854
デフォルトの名無しさん[sage]   投稿日:2015/11/09 08:35:16  ID:giUW2w8g.net
>848
それは ruby であって C/C++ ではない

855
デフォルトの名無しさん[sage]   投稿日:2015/11/09 16:54:52  ID:xDt2hEwv.net(6)
>847>852
NULLがどう定義されてるかは処理系依存で、
実際0x80000000や0xffffffffで定義された処理系も存在するのよ

実際、C++の2012年のドラフト(www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf)には
The macro NULL is an implementation-defined C++ null pointer constant in this International Standard.
って書いてある。要約するとNULLマクロの実体は処理系依存だって事。
お前らの環境でどう定義されてるかなんざ知らん。

一方でC99の仕様書(www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf)には
An integer constant expression with the value 0, or such an expression cast to type
void *, is called a null pointer constant.
って書いてあって、つまりC99-TC2準拠の処理系なら確実に
#define NULL 0
と書かれてるはずで、そうじゃない処理系は知ったこっちゃない
コメント2件

856
デフォルトの名無しさん[sage]   投稿日:2015/11/09 17:13:45  ID:xDt2hEwv.net(6)
ちなみに何故お前らのNULLが0で定義されてるかというと、
言語としてはそこにアクセス出来ないことになってるので
そこにアクセスしたら確実にセグメンテーションフォールトが発生するようなアドレスの一つが0だから、
というのが正しいんだけど実はこれOS依存。

x86系で動くモダンなOSを仮定するなら、
アドレス0への参照をプログラムが要求
→論理アドレス0を含むページが物理アドレスに載っていないのでページフォールト例外が発生(ディスクリプタがどうとかいう話は省略)
→OSがそれを検出
→プログラムがアクセスしようとしたアドレスが0x00000000-0x00001000番地に含まれている事をOSが認識して、SEGVを発送
→プログラムに処理が戻り、SEGVを検出
→デフォルトハンドラを読みに行って正常に異常終了する
といった流れになる。

これがCPUが違えば、例えばアドレスの最上位ビットが立ってるからだとか、
アドレスのアラインメントが取れてないからだとか、
他の方式によって検出して最終的にセグメンテーションフォールトで落とす感じになる。
なので自然とNULLが意味する値は処理系依存になる。

857
デフォルトの名無しさん[sage]   投稿日:2015/11/09 18:30:01  ID:GSrDHzaU.net(2)
fopen_s
https://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx
> 戻り値
> 正常終了した場合は 0 を返します。失敗した場合はエラーコード(errno)を返します

と書いているのでNULLじゃなく 0で判定する(必要とあらばerrnoも)以外に無いと思うんだが

858
デフォルトの名無しさん[sage]   投稿日:2015/11/09 19:23:27  ID:hqP7pMYo.net(4)
>855-856
C言語でヌルポインターのソースコード上での表現は0と決まっている
内部表現が0x80000000だろうが0xffffffffだろうが、ソースコード上では0と決まっている
大昔に作成されたCのFAQにもそう書いてある
>http://www.kouno.jp/home/c_faq/c5.html#0
>Q: どうやればプログラムの中でヌルポインターを得ることができるのか。
>A: ポインターを書くべきところに現れた定数0は、 コンパイル時にヌルポインターに変換される
>Q: ヌルポインターの内部表現に0でないビットパターンを使っているマシンでは、NULLはどう定義するべきかか。
>A: ほかのどんなマシンとも同じである。0 (または((void *)0))と定義 されている。
>Q: でも0よりはNULLを使うほうが、NULLの値が将来代わることを考えると、特にヌルポインターの内部表現が0でないマシンについては優れているのでは。
>A: いや。(マクロNULLを使うことは好ましいかもしれないが、上の理由 からではない。)
   マクロを使って数を書くべきところをシンボルに置 き換えることは、値が将来変わるかもしれないから、
   よくやるけど、 これはNULLを0の代りに使う理由じゃない。もう一度説明しよう。
   C言 語は、ソースコード上の0が(ポインターを使う場面では)ヌルポイン ターを作り出すことを保証している
一部抜粋してみたが、もっと詳しく知りたければ上記URLを参照のこと
コメント1件

859
デフォルトの名無しさん[sage]   投稿日:2015/11/09 19:25:42  ID:hqP7pMYo.net(4)
Cプログラマーは、昔から自分の書いたプログラムが走るマシンの実 装に関して必要以上に知りたがる。
ヌルポインターがたいていのマシ ンで、ソースコード上も多くの内部表現上も0であることが、保証さ れない仮定を招いている。
マクロ「NULL」を使うことで、その値が将 来変化するかもしれないことや、妙なマシン上では0でないことを指 しているように思えるかもしれない。
「if(p==0)」と書くと、比較す る前に0をポインター型に変換するというよりは、pを整数型に変換す ることを必要とすると解釈されがちである。
最後に(上の質問5.13で 記述した)「ヌル」という言葉は、文脈によって異なる意味を持つの に、違いを大目に見がちである。 混乱を避けるよい方法は、
C言語にはキーワードがあって(Pascalの nilのような)、それを使ってヌルポインター定数を要求すると考える ことである。
コンパイラはソースコードから型が決定できるときは、 "nil"を正しい型のヌルポインターに変換することができるし、でき ないときは苦情を出す。
実際にはヌルポインターのC言語のキーワー ドは"nil"ではなく「0」である。0は"nil"とほとんど同じ働きをする。
違いは、ポインター以外が必要な状況ではキャストされていない0に はエラーメッセージを出す代りに整数の0を作り出すことである。
キャ ストされていない0をヌルポインターのつもりで使うと、そのコード はうまく動かないかもしれない。

860
デフォルトの名無しさん[]   投稿日:2015/11/09 19:37:07  ID:fyLz/sBu.net(7)
>855
4.1 Pointer conversions [conv.ptr]
1 A null pointer constant is an integer literal (2.13.2) with value zero or a prvalue of type std::nullptr_t.

どこにも「0x80000000や0xffffffff」でも良いなんて書いてない。
無知自慢しなくても良いぞ。
コメント1件

861
デフォルトの名無しさん[sage]   投稿日:2015/11/09 19:46:58  ID:xDt2hEwv.net(6)
>858-859
fopen_sなんて関数使ってるから「仕様に完全に準拠してるわけではないC++」についての話題だと思ってたよ。
C言語に関しては、仕様に準拠してりゃ確かにそれが正しい。

俺の発言の要点は、
・変な処理系もあるよ!
・C++ではNULLの見かけ上の値すら未定義(なので便利で適当な値が使われる)。
・Cの処理系では0(仕様通りなら)。
の3つであって、なんで噛みつかれたのかさっぱり分からんのだが。

862
デフォルトの名無しさん[sage]   投稿日:2015/11/09 19:51:21  ID:xDt2hEwv.net(6)
>860
null pointer constantは整数0か、又はstd::nullptr_t型の値(要はnullptr)だって事だろ。
nullptrを整数に(正確にはビット列に)した時の値については何も言ってないのよ。
コメント1件

863
デフォルトの名無しさん[sage]   投稿日:2015/11/09 20:10:28  ID:hqP7pMYo.net(4)
誰もヌルポインターの内部表現の話なんかしてねーよ

864
デフォルトの名無しさん[]   投稿日:2015/11/09 20:28:36  ID:fyLz/sBu.net(7)
>862
バカめ
> NULLがどう定義されてるかは処理系依存で、
> 実際0x80000000や0xffffffffで定義された処理系も存在するのよ
実際に存在するとは、どの処理系だ? それが存在するなら、それは規格を満たしていない。

これ以上、無知の上塗りせずに、間違いを認めて引っ込んだ方が良いぞ。

865
デフォルトの名無しさん[sage]   投稿日:2015/11/09 20:51:17  ID:xDt2hEwv.net(6)
触れたのがあまりに昔で名前は出てこないけど、当時NULLが0だと思ってて嵌ったことは覚えてる。
今は規格に準拠してりゃCでもC++でも0なのか。

866
デフォルトの名無しさん[sage]   投稿日:2015/11/09 20:58:09  ID:eC7QTO9C.net
何時の時代の話かは分からんのだが、
NULLが-1になってた処理系に遭遇したって都市伝説は耳にしたことがあるな
コメント1件

867
デフォルトの名無しさん[]   投稿日:2015/11/09 21:01:16  ID:fyLz/sBu.net(7)
根拠として「C++の2012年のドラフト」をあげているんだから、その言い訳は通用しない。
まだ、恥の上塗り続けるつもりか?

868
デフォルトの名無しさん[sage]   投稿日:2015/11/09 21:05:08  ID:xDt2hEwv.net(6)
NULLが0じゃないこともあるって知識を元に適当に仕様をググッて斜め読みしたらそう読めたんで
そう書いたって話。
誤解させてごめんよ。

Cの仕様でNULLが0だって決まってる方がむしろ驚いてる。

869
デフォルトの名無しさん[sage]   投稿日:2015/11/09 21:32:53  ID:J1dkkwNY.net
内部表現が0とは限らない,というだけの話だろう
いずれにしてもポインタが期待されるところで 0 と書けば,それはヌルポインタであることには変わりない

870
デフォルトの名無しさん[sage]   投稿日:2015/11/09 21:33:59  ID:NTgR53a+.net
>866
俺も聞いたことがある
30年くらい前
まだマシン毎にコンパイラが乱立してた頃
コメント1件

871
デフォルトの名無しさん[sage]   投稿日:2015/11/09 22:28:11  ID:GSrDHzaU.net(2)
実装が
#define NULL 0
だろうがなんだろうが fopen_s は「成功は == 0 で判定しろ」ってんだからさ
NULLで判定しても良いなんてガキみてぇなことグチャグチャ言ってないで
ちゃんと 0 で判定しろよガキ
コメント2件

872
デフォルトの名無しさん[sage]   投稿日:2015/11/09 22:28:25  ID:fyLz/sBu.net(7)
>870
ANSIでCの規格が制定される前は規格がなかったからね。

873
デフォルトの名無しさん[sage]   投稿日:2015/11/09 22:42:43  ID:fyLz/sBu.net(7)
>871
それはそのとおり。
ヌルポがオール0以外な環境だったら、判定が間違う可能性があるからね。

874
デフォルトの名無しさん[sage]   投稿日:2015/11/09 22:49:48  ID:hqP7pMYo.net(4)
確かに整数を返すのだから0と判定したほうが良いのは確かだが

>ヌルポがオール0以外な環境だったら、判定が間違う可能性があるからね。

この根拠はおかしい
NULLはどの環境でも内部表現に関わらずソースコード上では0に置換されるから
ただし、((void*)0)に置換される環境では整数の0のつもりでNULLを使うとコンパイルエラーになるが
コメント1件

875
デフォルトの名無しさん[sage]   投稿日:2015/11/09 22:59:02  ID:ZbpKjgrs.net
>ソースコード上では0に置換される
ちがくない?0はNULLポインタになるけどただし以降に書いてるとおりNULLは0になるかどうかわからんでしょ

876
デフォルトの名無しさん[sage]   投稿日:2015/11/09 23:07:52  ID:kUB8xo8u.net
俺も>838>843>871あたりが正論と思うね
>839からの流れがおかしい
NULLが0と等しいか、などと議論すべき事柄じゃない
そもそもfopen_sの解説からしてリテラル0と比較するのが理に適っている
それをわざわざNULLマクロというワンクッションを挟んで記述する合理的理由がない

877
デフォルトの名無しさん[sage]   投稿日:2015/11/09 23:18:15  ID:fyLz/sBu.net(7)
>874
int x;
x == (void *)0;
これ警告は出るけどエラーにならないでしょ。

878
デフォルトの名無しさん[sage]   投稿日:2015/11/09 23:45:30  ID:eIzs0U/u.net
NULLはゼロだと思っておけば良い。

879
デフォルトの名無しさん[sage]   投稿日:2015/11/10 01:09:51  ID:0bGxannp.net(2)
思うのは勝手だがNULLをゼロの代わりに使ってはいけない

880
デフォルトの名無しさん[sage]   投稿日:2015/11/10 02:14:04  ID:YWed6J6d.net(3)
struct Location {
int x;
int y;
int z;
};
って
Position pos = {1, 2, 3};
みたいに宣言出来るのにLocationを引数をとる関数にGetValue({1, 2, 3})みたいに出来ないのはなぜですか?
コメント2件

881
デフォルトの名無しさん[sage]   投稿日:2015/11/10 02:15:23  ID:YWed6J6d.net(3)
PositionはLocationの間違いです

882
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/10 02:16:33  ID:rHJUCiJo.net
どのみち環境依存の関数使って書いてるのにNULLだけこだわるアホ

883
デフォルトの名無しさん[sage]   投稿日:2015/11/10 02:34:08  ID:co6NjOXk.net(2)
>880
出来るが

struct location_t{ int x, y, z; };

void func( location_t pos ){} //OK;
void func( location_t &pos ){}; //NG
void func( location_t &&pos ){}; //OK

884
デフォルトの名無しさん[sage]   投稿日:2015/11/10 02:39:07  ID:YWed6J6d.net(3)
struct location_t{ int x, y, z; };

void func( location_t pos ){} //OK;
これに対して
func({1,2,3});
とするとE2188構文エラーが出ました

885
デフォルトの名無しさん[sage]   投稿日:2015/11/10 03:04:26  ID:co6NjOXk.net(2)
環境は?
こっちはVS2013で試したけど動いたよ
コメント1件

886
デフォルトの名無しさん[sage]   投稿日:2015/11/10 07:52:52  ID:3CFe6hEs.net(6)
>880
Position pos = {1, 2, 3};
これの右辺は初期化子という構文要素、
GetValue({1, 2, 3})
これのカッコ内は式という構文要素。
使用出来る形式が異なる。

887
デフォルトの名無しさん[sage]   投稿日:2015/11/10 07:57:59  ID:/JKv2M44.net
NULLは今は0かも知れないが、0が常にNULLと同じ意味を持っている訳ではないってことだろ
#define FOPEN_S_OK (0)
とでもやっておけよ

888
デフォルトの名無しさん[sage]   投稿日:2015/11/10 07:59:17  ID:3CFe6hEs.net(6)
ちなみに後者はC99のコンパウンドリテラルという書式で、
GetValue((struct location_t){1, 2, 3})と記述出来る。
C++(11?)ならGetValue(location_t{1, 2, 3})
コメント1件

889
デフォルトの名無しさん[sage]   投稿日:2015/11/10 08:42:35  ID:1JfD7fk6.net(3)
コンストラクタでいいだろ

890
デフォルトの名無しさん[sage]   投稿日:2015/11/10 08:42:47  ID:xDrjxquL.net(3)
c++ならstd::initializer_listで貰ってイテレータ回しながら関数内で初期化出来たり。

int GetValue(std::initializer_list l) {
for (auto it = l.begin(); it != l.end(); ++it) {
// do something
}
}

GetValue({1,2,3}) // OK

891
デフォルトの名無しさん[sage]   投稿日:2015/11/10 08:48:41  ID:xDrjxquL.net(3)
天ぷらが抜けた

892
デフォルトの名無しさん[sage]   投稿日:2015/11/10 08:58:57  ID:uEihdd6c.net
C++から離れて舞い戻ったらnullptrてあるんだな。
浦島太郎状態

893
デフォルトの名無しさん[sage]   投稿日:2015/11/10 09:10:00  ID:3CFe6hEs.net(6)
void *からの暗黙変換できないからね。崩れかけてるトランプタワー。

894
デフォルトの名無しさん[sage]   投稿日:2015/11/10 09:26:37  ID:2PTLdG6J.net(2)
>885
Borland C++ 5.5.1です

>888
調べてみたところどうやらこのコンパイラはその規格に対応してなかったようです
このコンパイラで引数のところに{}で指定する方法はないですか?
コメント1件

895
デフォルトの名無しさん[sage]   投稿日:2015/11/10 09:32:51  ID:3CFe6hEs.net(6)
>894
無理だね。
コメント1件

896
デフォルトの名無しさん[]   投稿日:2015/11/10 09:33:46  ID:eBvt9LNV.net
orland C++ 5.5.1からLLVM/Clangへ移行

897
デフォルトの名無しさん[sage]   投稿日:2015/11/10 09:38:04  ID:2PTLdG6J.net(2)
>895-896
ありがとうございます
このコンパイラでは駄目なようですね

898
デフォルトの名無しさん[sage]   投稿日:2015/11/10 18:01:22  ID:XNBaBHgi.net(3)
写真は、文字列を関数に渡して逆順にして返す、という問題の解答ですが、疑問があります。

char *s = "文字列"
これは文字列リテラルのアドレスを渡しているので書き換えができるかは処理系依存という理解でいいでしょうか?
コメント2件

899
デフォルトの名無しさん[sage]   投稿日:2015/11/10 18:02:25  ID:XNBaBHgi.net(3)
画像貼り忘れました。。

http://i.imgur.com/4mqb1BM.jpg
コメント1件

900
デフォルトの名無しさん[sage]   投稿日:2015/11/10 18:28:45  ID:xgXHwxle.net
>898
どうなるかは処理系依存。

The effect of attempting to modify a string literal is undefined.
って書いてあった。

char s[] = "This is a test.";
が正しいと思うのです。
コメント1件

901
デフォルトの名無しさん[sage]   投稿日:2015/11/10 18:45:03  ID:0bGxannp.net(2)
>899
'\n' がキモいな。 endlだろうI like C++ならw

902
デフォルトの名無しさん[sage]   投稿日:2015/11/10 19:19:58  ID:3CFe6hEs.net(6)
C++なんて破綻したのをlikeな地沼って存在するのか?

903
デフォルトの名無しさん[sage]   投稿日:2015/11/10 19:23:43  ID:37NidK9w.net(2)
>898
余り詳しいわけではないけど、俺は処理系非依存だと思う。(常に書き換えできる)
charとstd::stringは別物だろ。
コメント2件

904
デフォルトの名無しさん[sage]   投稿日:2015/11/10 20:36:58  ID:c0uHB6kx.net
みなさんありがとうございます。
これは独習c++という本ですが、第3版14刷とかなり版を重ねていて他の説明などは分かりやすく書かれているので少し気になりました。

905
デフォルトの名無しさん[sage]   投稿日:2015/11/10 20:59:32  ID:1JfD7fk6.net(3)
>903
文字列リテラルがROMに配置されてたら書き換え不能じゃね?
コメント1件

906
デフォルトの名無しさん[sage]   投稿日:2015/11/10 21:18:58  ID:XNBaBHgi.net(3)
>903

非依存と書かれていたのですね。見落としてました。
私の環境では
vs2015 実行時強制終了
g++ コンパイル時にエラー
borland 書き換え可能
となっています。

907
デフォルトの名無しさん[sage]   投稿日:2015/11/10 21:45:36  ID:YYcxvMD9.net
endlはフラッシュ処理が入るから若干遅い

908
デフォルトの名無しさん[sage]   投稿日:2015/11/10 21:51:28  ID:FYErR5Mx.net
endlにフラッシュ処理が入る…

909
デフォルトの名無しさん[sage]   投稿日:2015/11/10 22:12:49  ID:1JfD7fk6.net(3)
フラッシュ処理の遅延気にするってw
どんだけ出力する気なんだよw

910
デフォルトの名無しさん[sage]   投稿日:2015/11/10 22:36:41  ID:37NidK9w.net(2)
>905-906
処理系依存だった。
> 同じ文字列リテラルが区別されるかどうかは処理系での定義による。
> 文字列リテラルを変更しようとするプログラムのふるまいは不定である。
> K&R第2版P236(A2.6)、ただしその後の変更があった場合は知らない
ちなみに記憶クラスはstaticで定数扱いだから、ROM領域においてもいいらしい。

以下ページだと
char s_l* = "literal'; // リテラルを指す
char s_a[] = "literal"; // 自動変数を指す
みたいな感じだね。つまり>900も正解。
http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01077.html

911
デフォルトの名無しさん[sage]   投稿日:2015/11/10 23:15:02  ID:xDrjxquL.net(3)
ポインタを表すべき場所での0がヌルポインタになるのは分かったんだけど、
もし本当にアドレス0のデータを読み書きしたくなったらどう書くのが正解なの?

volatile int8_t* text_screen = 0xb8000;
text_screen[0] = 'a';
text_screen[1] = 7;
でアドレス0xb8000に0x0761が書かれると仮定して。
コメント4件

912
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/10 23:42:57  ID:0FN92oKT.net
C/C++で書かないのが正解

ゴミ言語

913
デフォルトの名無しさん[sage]   投稿日:2015/11/10 23:48:09  ID:3CFe6hEs.net(6)
>911
ヒント
ポインタを表すべき場所での「定数 0」がヌルポインタコンスタント

914
デフォルトの名無しさん[sage]   投稿日:2015/11/11 00:03:15  ID:kzShUi9X.net(2)
>911
アドレス指定で読み書きする必要があるような環境向けの処理系ならやりかたが用意されてるだろ。
そのコンパイラのマニュアル嫁

915
デフォルトの名無しさん[sage]   投稿日:2015/11/11 00:32:08  ID:iOpec/0o.net(11)
>911
ptrdiff_tとのunion作って0をぶち込んどけ

916
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/11 01:09:50  ID:uYSp+fPE.net(2)
NULL == 0 とか単なるモンキーパッチ

917
デフォルトの名無しさん[sage]   投稿日:2015/11/11 01:44:08  ID:X7TkVs/Y.net(2)
>911
0(NULL)でありえないアドレスと判断してるのであって、
アクセスしてはダメってわけじゃないし、できないわけではない

0番地にアクセスが必要、つまり安全ってわかってるなら、
判断の必要もなくアクセスすりゃあいい
コメント3件

918
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/11 03:23:51  ID:uYSp+fPE.net(2)
そういう判断でやってるとNULLでエラーチェックやってる場所でバグるんだよね

NULLにアクセスしてんのと同じだもん
NULLを -1 に定義しなおすのが正解

C使わないのが大正解

919
デフォルトの名無しさん[sage]   投稿日:2015/11/11 03:37:46  ID:YjEvuyTw.net(4)
まぁそんな状況はないって事ですよ。

920
デフォルトの名無しさん[sage]   投稿日:2015/11/11 07:24:41  ID:mKuF2Y4X.net(8)
>917
いや、ダメだよ。
ヌルポインタコンスタントを、ポインタタイプに変換したものが、ヌルポインタ。
ヌルポインタは如何なるオブジェクトへのポインタとも等しく無い事が保証されている。
NULLが何かを指しているのはこれと矛盾。

921
デフォルトの名無しさん[sage]   投稿日:2015/11/11 07:30:43  ID:/esTl/Qt.net
>917
アクセスしちゃダメってマニュアルに書いてあるCPUもあるよ
コメント1件

922
デフォルトの名無しさん[sage]   投稿日:2015/11/11 07:45:21  ID:HaR9EPgA.net
CPUからアドレス0を読み書きできるように設計したCPUがあったら
大いなる仕様設計ミスでしかない
コメント2件

923
デフォルトの名無しさん[sage]   投稿日:2015/11/11 08:27:12  ID:X7TkVs/Y.net(2)
>922
電源入れたらゼロ番地にアクセスするCPUは設計ミスなのか?

924
デフォルトの名無しさん[sage]   投稿日:2015/11/11 08:28:14  ID:dnGEiVDn.net(2)
>922
普通に読み書きできるよ、アドレス0にはね by Z80, i80x86

925
デフォルトの名無しさん[sage]   投稿日:2015/11/11 08:51:55  ID:bkM6Jmzo.net(2)
0番地が普通にアクセス可能な環境があるなら
その時には処理系がNULLに別の(特殊な)定数を割り当てようとするんじゃないかな?
ぎゃくにNULLマクロを使ってコードを書いていれば、そんな環境の違いをプログラマは意識する必要はないよね
コメント4件

926
デフォルトの名無しさん[sage]   投稿日:2015/11/11 09:05:54  ID:mKuF2Y4X.net(8)
>925
x86(64も含む)は0番地にアクセス可能だよ
コメント1件

927
デフォルトの名無しさん[sage]   投稿日:2015/11/11 09:20:54  ID:pvIjWuQG.net
論理アドレス空間と物理アドレス空間の区別がつかないなら黙ってろ。

928
デフォルトの名無しさん[sage]   投稿日:2015/11/11 09:29:38  ID:bkM6Jmzo.net(2)
>926
私の言葉足らずで済みません。「プログラムから見て」R/W可能か?というつもりでした(o_ _)o

929
デフォルトの名無しさん[sage]   投稿日:2015/11/11 09:34:37  ID:iOpec/0o.net(11)
>917
それだとNULLの内部表現によってはアドレス0にアクセスしたことにならない。

>925
ソースコード上のヌルポインタコンスタントはヌルポインタの内部表現に置き換わることに注意しなきゃいけない。
つまり単に*((*int)0) = 0;等とやると実際に何が行われるかが処理系依存ということになる。
コメント2件

930
デフォルトの名無しさん[sage]   投稿日:2015/11/11 09:42:23  ID:F3g6v2f+.net
>929
ヌルポインタのデリファレンスは未定義じゃない?
コメント1件

931
デフォルトの名無しさん[sage]   投稿日:2015/11/11 09:45:32  ID:iOpec/0o.net(11)
>930
未定義だっけ?
処理系依存って書いちゃったけど。

932
デフォルトの名無しさん[sage]   投稿日:2015/11/11 12:31:12  ID:dnGEiVDn.net(2)
>925
NULL マクロなんか不要だよ、NULL って書かずに 0 って書いて全く問題ない

>処理系がNULLに別の(特殊な)定数を割り当てようとする
たぶんハードウェアのアドレス空間上にそのような特別な場所はないと思うよ
コメント1件

933
デフォルトの名無しさん[sage]   投稿日:2015/11/11 12:56:10  ID:mKuF2Y4X.net(8)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

934
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:21:46  ID:WDtG518P.net(6)
可変長引数の場合はキャストが必要
でもこれは良く考えれば一般的にそうだ
単に0と書いたとき、charなのかintなのかlongなのかlong longなのか
usngiendなのかsigneldなのか何なのか分らないではないか

935
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:36:22  ID:iOpec/0o.net(11)
va_startしてva_argすればそれ以上キャストは要らんだろ。
何言ってんの?

多分、可変長引数個数関数の最後の引数はNULLにしてねって書いてある
GTKなんかのライブラリで困るって言いたいんだと思う。

936
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:38:17  ID:m8XjY7WS.net(4)
スタックに積むときのサイズはコンパイラはわかってるだろ
取り出す方で判別する必要があるだけだ
リテラルの0はintだろ?

937
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:41:58  ID:iOpec/0o.net(11)
どうでもいいけどリテラルの0って八進数だっけ?
コメント2件

938
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:44:02  ID:WDtG518P.net(6)
君が何言ってるの?
int32とint64でサイズが違うけど
単に0と書いただけでは判断つかない
期待される型が分っている場合ならコンパイラが適切に変換してくれる
(0をヌルポインターに変換するのと同じように)

しかし可変長引数やプロトタイプの無い関数の場合は
コンパイラは期待される型がわからないから
int64のつもりで0と書いていても、コンパイラはintの0を生成するだろう
キャストするかサフィクスをつけなければならない
(ちょうど(void *)0と書かなければならないのと同じようにな)

939
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:48:05  ID:m8XjY7WS.net(4)
>コンパイラはintの0を生成するだろう

自分で答え書いてるじゃんw

940
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:49:33  ID:m8XjY7WS.net(4)
>937
どっちでも同じだから気にしないことにしてるw

941
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:49:47  ID:iOpec/0o.net(11)
判別付くよね?
int32のつもりでゼロと書きたいなら単に0と、
int64のつもりでゼロと書きたいなら0lって書くけど。

942
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:50:12  ID:WDtG518P.net(6)
可変長引数やプロトタイプ宣言の無い関数で
受け取り側がint64のつもりで受け取っていたら
呼び出し側もint64を渡さなければならない、当たり前
しかし、単に0と書いただけではintになるから
intが32bitの環境ならスタックフレームが壊れて即座にクラッシュする
だから受け渡し側はサフィクスかキャストをして渡さなければならない
これはちょうどヌルポを渡すときに(void *)0とキャストが必要なのと同じこと
もちろん、プロトタイプ宣言があってコンパイラが関数の型を分っているなら
適切に変換されるわけだがな
コメント1件

943
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:53:48  ID:m8XjY7WS.net(4)
スタックフレームは壊れないっしょ
積んだ奴がスタックポインタを戻すcdeclだからできることではあるが

944
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:54:02  ID:WDtG518P.net(6)
だから可変長引数やプロトタイプの無い関数で
ヌルポインターを渡すときに(void *)0とキャストが必要というのは
数値のリテラル一般にも、そういうことだということ
特別な事じゃない
元々そういうもの

945
デフォルトの名無しさん[sage]   投稿日:2015/11/11 14:55:01  ID:WDtG518P.net(6)
スタックフレームは確かに壊れんなスマソ
しかしプログラムはバグるがな

946
デフォルトの名無しさん[sage]   投稿日:2015/11/11 15:01:43  ID:iOpec/0o.net(11)
>942
ちょっと待って。
確認なんだけど、プロトタイプ宣言が無い関数を呼んだ時って
呼び出し側がどう書こうがintにキャストされるんじゃなかったっけ?
古いCの仕様で。

それと、君はキャストをどの意味で使ってる?
俺は(呼ばれる側が、引数の型を既に判明してる引数の情報から推測できる場合には)
reinterpret_castが必要ないって意味で言ってるんだけど。

947
デフォルトの名無しさん[sage]   投稿日:2015/11/11 15:13:38  ID:iOpec/0o.net(11)
ところでさ。

確かx86/x64上のCだと、32bit以下の型をスタック使って引数として渡す場合にも
スタックポインタって1引数あたり丁度32bit分ズレたと思うんだけど。

つまり、doubleだのint64_tだのを渡さない限り、可変長引数個数関数のva_argはどんな32bit以下の型に対しても
同じように上手く動く筈なんだけど、違ったっけ?

948
デフォルトの名無しさん[sage]   投稿日:2015/11/11 15:31:07  ID:WDtG518P.net(6)
むしろfloatはdoubleに拡張されるんじゃなかったっけか?
コメント1件

949
デフォルトの名無しさん[sage]   投稿日:2015/11/11 15:36:59  ID:iOpec/0o.net(11)
>948
補足ありがとう。なんか忘れてる気がしてた。
それでscanfとprintfの書式に対称性がなくなるんだった。

950
デフォルトの名無しさん[sage]   投稿日:2015/11/11 16:24:58  ID:YjEvuyTw.net(4)
なんだかわからんが、NULLを使えばいんですよね
という当たり前の事に帰着するのであった。

951
デフォルトの名無しさん[sage]   投稿日:2015/11/11 17:05:05  ID:mKuF2Y4X.net(8)
NULLなんか使っちゃダメに決まってんだろ。アホウ。

952
デフォルトの名無しさん[sage]   投稿日:2015/11/11 17:18:00  ID:YjEvuyTw.net(4)
だから 実際問題となるケース出せ ぼけが
コメント2件

953
デフォルトの名無しさん[sage]   投稿日:2015/11/11 17:18:55  ID:hcWNQVA+.net
>937
8

954
デフォルトの名無しさん[sage]   投稿日:2015/11/11 17:40:41  ID:Ye3Cp2LR.net
>929
× > *((*int)0) = 0;
○ > *((int*)0) = 0;
コメント1件

955
デフォルトの名無しさん[sage]   投稿日:2015/11/11 17:59:41  ID:iOpec/0o.net(11)
>954
なんか変だとは思ってた。
サンクス

956
デフォルトの名無しさん[sage]   投稿日:2015/11/11 19:36:27  ID:mKuF2Y4X.net(8)
>952
もう一回言ってやる。
NULLなんか使っちゃダメに決まってんだろ。アホウ。

957
デフォルトの名無しさん[sage]   投稿日:2015/11/11 19:45:11  ID:mKuF2Y4X.net(8)
>952
お前、致命的にバカそうだから、指摘してやろう。
NULLを使えと言い出したのはこのスレではお前がはじめてだ。

958
デフォルトの名無しさん[sage]   投稿日:2015/11/11 19:59:15  ID:YjEvuyTw.net(4)
だからお前はプロなのかどうなんだ。
それだけ言え。この馬鹿素人が。

959
デフォルトの名無しさん[sage]   投稿日:2015/11/11 20:15:23  ID:iOpec/0o.net(11)
とりあえずs/NULL/nullptr_t/gを手作業でやったことにして
明日もサボろう

960
デフォルトの名無しさん[sage]   投稿日:2015/11/11 20:15:34  ID:mKuF2Y4X.net(8)
プロだよ。バカ。

961
デフォルトの名無しさん[sage]   投稿日:2015/11/11 20:37:39  ID:WOIGmI6i.net(2)
>921
ないと思うよ‥

962
デフォルトの名無しさん[sage]   投稿日:2015/11/11 20:42:08  ID:WOIGmI6i.net(2)
>933
可変長引数では,(void *)0 ってキャストして書けばいいよ
キャストなしで,とか変な縛りはやめようね

963
デフォルトの名無しさん[sage]   投稿日:2015/11/11 21:27:09  ID:mKuF2Y4X.net(8)
「キャストすんな」はバカを調教する時にすごく重要
あいつら「キャストしないとコンパイラエラーが取れない」とか、真顔で言いだすから。

964
デフォルトの名無しさん[sage]   投稿日:2015/11/11 22:43:57  ID:kzShUi9X.net(2)
>925
NULLをデリファレンスしたら何が起きるかわからないんだから、そのときに0番地に
アクセスすることになってもしょうがない。わざわざNULLの内部表現を変える必要なんてない。
アドレス指定のダイレクトアクセスが必要なら処理系がライブラリ用意するのが筋だろう。

965
デフォルトの名無しさん[sage]   投稿日:2015/11/12 02:02:07  ID:vfLy0hrq.net
C言語はオワコン

966
デフォルトの名無しさん[sage]   投稿日:2015/11/12 04:39:55  ID:X3qMcYPf.net(2)
元々戻り値の話だったのによく飽きないな

967
デフォルトの名無しさん[sage]   投稿日:2015/11/12 05:00:57  ID:+TRt+Sln.net
NULL使えなんて言いだして引っ張る道化が現れるから

968
デフォルトの名無しさん[sage]   投稿日:2015/11/12 06:54:33  ID:Rz9ctgf7.net(2)
成功時NULLと、成功時0と、成功時1以上が
混ざってるとクッソめんどい

969
デフォルトの名無しさん[sage]   投稿日:2015/11/12 08:28:00  ID:X3qMcYPf.net(2)
0, 1以上, NULLを同列で考えてるから混ざってると感じるだけ

970
デフォルトの名無しさん[sage]   投稿日:2015/11/12 08:39:19  ID:Titn/2xe.net
成功時にNULLを返す関数ってどんなのがあったっけ。

971
デフォルトの名無しさん[sage]   投稿日:2015/11/12 08:46:28  ID:0/9agn9x.net
戻り値の型が整数型なら0は返せても、NULLは返せないからな。
ポインタ型を返す関数なら、正常時に意味のあるポインタを返したいだろうからNULLを返すなんて無意味な仕様にしないだろうし。

972
デフォルトの名無しさん[sage]   投稿日:2015/11/12 09:04:13  ID:Rz9ctgf7.net(2)
ああすまん、最後は失敗時NULLだな

973
uy ◆Qawu9.2l1E [sage]   投稿日:2015/11/12 12:11:32  ID:YKGP90Ph.net
経験が無いのをバレないように会話していくスレw
コメント1件

974
デフォルトの名無しさん[sage]   投稿日:2015/11/12 12:21:56  ID:FMRhjNH0.net
それはお前だけ

975
デフォルトの名無しさん[sage]   投稿日:2015/11/12 12:22:55  ID:9l61Vk4V.net

976
デフォルトの名無しさん[sage]   投稿日:2015/11/13 12:04:58  ID:P+x1lmAA.net
CのstaticとC++のanonymous namespaceってどう違うんだっけ?
コメント2件

977
デフォルトの名無しさん[sage]   投稿日:2015/11/13 15:57:23  ID:cTzYhkFo.net
>976
Cのstaticはそのファイルでのみ有効
C++ anonymous namespaceでは知らん
基本C++では宣言とコードは別ファイル
cpp側で書けば、そのファイルでのみ有効なんじゃ無い?
そんなコード書いたこと無いけどさ

978
デフォルトの名無しさん[sage]   投稿日:2015/11/14 17:35:20  ID:Ngo/6AAy.net
>976
staticは名前の通り記憶クラス指定子。静的寿命を持つという宣言。
関数の外でstatic宣言するとファイルスコープになるのはどっちかというと副作用。

namespaceには記憶クラスを指定する機能は無い。
コメント1件

979
デフォルトの名無しさん[sage]   投稿日:2015/11/14 19:02:05  ID:iwAmPq2+.net
副作用じゃねーよ
Cは予約語をケチるため、一つの予約語を使い回す

980
デフォルトの名無しさん[sage]   投稿日:2015/11/14 20:04:03  ID:MSvtHxf5.net
externできなくない?

981
デフォルトの名無しさん[sage]   投稿日:2015/11/14 21:42:00  ID:5MMaz5Qo.net
>978
>namespaceには記憶クラスを指定する機能は無い。

うそつけ

>http://exlight.net/devel/cpp/unnamed_namespace.html
>名前の有効範囲をファイルスコープに制限したい場合に利用する.
>次のように名前空間名を指定せずにnamespaceで囲むと,同一ファイル内からは見えるけど,
>他のファイルからは見えないグローバル変数などをつくることができる.
>staticじゃないの?
>文脈によって意味が変わってきてわかりにくいところが不評で,C++ではstaticではなく無名名前空間を使うようになっている.

982
デフォルトの名無しさん[sage]   投稿日:2015/11/15 02:02:58  ID:YRBdjGon.net
いや、記憶クラスではないだろ。

namespace
{
 int g_count;
}

こうすると、コンパイラが勝手に、

namespace XYZ@20151115
{
 int g_count;
}
using namespace XYZ@20151115;

みたいな解釈をして、定義されたファイルの利用者は、namespaceを指定せずに利用できる。
が、他のファイルからはXYZ@20151115を知らないとアクセスできないので、結局アクセスできないというだけ。
コメント1件

983
uy ◆Qawu9.2l1E []   投稿日:2015/11/17 19:15:42  ID:f2qjXPcC.net
load "fileA.rb" , true

984
デフォルトの名無しさん[sage]   投稿日:2015/11/17 21:38:05  ID:of/WOUg/.net
>982
実装は関係なくね?
外から見る手段がないなら内部リンケージ以外の何者でもないだろ

985
デフォルトの名無しさん[sage]   投稿日:2015/11/24 22:35:37  ID:RCu8tHgV.net(2)
static int* p=0;

static int* p;
って動作違うんすか?
差し替えたら動作変わったんすけど何がどう変わったのかわからんので思い当たる節があったら教えてほしい

986
デフォルトの名無しさん[sage]   投稿日:2015/11/24 22:54:27  ID:AGfVRi14.net
んー差し替えたのホントにそこだけ?

987
デフォルトの名無しさん[sage]   投稿日:2015/11/24 23:32:05  ID:RCu8tHgV.net(2)
本当にこの一文というか「=0」の二文字だけっす
ポインタの使い方が正しくないだけならともかく同じ意味のはずなのに動作自体が変わるのはおかしいなあと思って
コメント1件

988
デフォルトの名無しさん[sage]   投稿日:2015/11/24 23:34:08  ID:ORfHMd4J.net
printfデバッグできるような状況でもないのかしら
コメント1件

989
デフォルトの名無しさん[sage]   投稿日:2015/11/24 23:57:41  ID:XeCWO9iV.net
>987
せめてどう変わったのかを教えて欲しい
コメント1件

990
デフォルトの名無しさん[sage]   投稿日:2015/11/25 00:04:51  ID:KJ2R+Cik.net
nullptrでいいやん

991
デフォルトの名無しさん[sage]   投稿日:2015/11/25 02:10:04  ID:VZbixYb2.net(2)
>988
>989
関数の頭にこれを書いたのですが、
起動時に一度だけ0で初期化して、以降は関数内で値を保持し続けるという(静的変数にしてほしい)挙動をするのは
static int* p;
の方

static int* p=0;
だと関数を呼び出したときにたまにp=0を実行し直しているような挙動をするようです
コメント1件

992
デフォルトの名無しさん[]   投稿日:2015/11/25 07:18:22  ID:YbqZzFFd.net(2)
>991
規格上の呼び方は知らんけど、C++のstatic変数の初期化のタイミングは、その宣言文が初めて実行される時と思えば良い。
宣言文が実行と言うのもおかしな表現だが。
コメント1件

993
デフォルトの名無しさん[sage]   投稿日:2015/11/25 09:53:50  ID:VZbixYb2.net(2)
>992
ありがとう、でもstaticの機能については理解しています(staticの仕様について質問していると勘違いされそうなので具体的な挙動の違いを書くことを渋っていた)
聞きたいのは
static int* p

static int* p=0
で現に挙動が変わるのでこの宣言は何が違うのかということ
コメント2件

994
デフォルトの名無しさん[sage]   投稿日:2015/11/25 10:53:08  ID:HI8L8hd9.net
static変数はコンパイル時に初期化されると信じてた俺、涙目 。・゚・(ノД`)・゚・。
コメント1件

995
デフォルトの名無しさん[sage]   投稿日:2015/11/25 11:21:25  ID:Sra0FKsR.net
コンパイル時に初期化は勘違いもはなはだしいろう・・・
プログラム起動時の間違いかな

996
デフォルトの名無しさん[sage]   投稿日:2015/11/25 11:28:54  ID:n/g2lh6I.net(2)
>993
コンパイラは何使ってる?
試しにclang++ -S 1.cc -o 1.S -O0でアセンブリレベルで比較したりしたけど
全く同じコードになってたよ。
gccでも同じコードになった。

>994
コンパイル時に初期化ならconstexprだな。
実行時には書き換えできないけど。

グローバルなstaticはmain関数実行前に初期化(但し初期化に依存関係がある場合に正しく処理するとは限らない)
関数内のstaticは関数が初めて実行される時に初期化(しかもスレッドセーフ)

997
デフォルトの名無しさん[sage]   投稿日:2015/11/25 16:47:14  ID:YbqZzFFd.net(2)
>993
それで、コードが変わると思えないけどな。
Cのつもりでロード時に初期化されてる事を仮定してなんか変な事やって、違うとの主張だと思ったわけ。

アセンブリリスト出力してみなよ。

998
959[sage]   投稿日:2015/11/25 18:32:33  ID:sLdr6t9m.net
http://www.dotup.org/uploda/www.dotup.org624170.png
アセンブリコード出力してみました
微妙にpが呼び出されるタイミングが違っていて(何がどう影響しているのか全くわからんが)ここのせいで挙動が変わっているらしい
全く同じではないということがわかったのは収穫だけど、アセンブリコードについては詳しくないのでこの違いがどう響いているのか俺にはわからぬ

環境はVisualStudio2013です
コメント1件

999
デフォルトの名無しさん[sage]   投稿日:2015/11/25 19:10:36  ID:n/g2lh6I.net(2)
>998
なんとなくだけど、左右逆じゃね?

そして、左右があってるとすればstatic int* p = 0;が
実は0で初期化されてないコードを吐いてる。
コメント1件

1000
デフォルトの名無しさん[sage]   投稿日:2015/11/25 19:48:32  ID:HmIgiY2q.net
>static int* p=0

これ、意味的には初期化だけど、言語仕様的には初期化じゃなく代入に過ぎないからコードが変わるのは当たり前じゃね?

1001
デフォルトの名無しさん[sage]   投稿日:2015/11/25 20:31:14  ID:pS65oVmN.net
は?

1002
デフォルトの名無しさん[sage]   投稿日:2015/11/26 08:58:30  ID:4oXn5tau.net
どこかで
#define static
とかしてんじゃない?
コメント1件

1003
デフォルトの名無しさん[sage]   投稿日:2015/11/26 09:02:13  ID:GuU354a3.net(2)
動きの通りでいいんじゃない
関数内に書いてるんだったら
先(左)のは関数に入ってからゼロクリア
後(右)のはメモリ領域確保時に暗黙の初期化でしょ
コメント1件

1004
デフォルトの名無しさん[sage]   投稿日:2015/11/26 12:21:05  ID:Utv/2Onf.net
>999
もう一回試したけど左右はあってる

>1002
ライブラリはDxLibだけ使ってるけどそんな変な仕様が入っていることはない……と思う

>1003
原因はよくわからんが結果はそんな感じなんすかね
コメント2件

1005
デフォルトの名無しさん[sage]   投稿日:2015/11/26 13:24:13  ID:GuU354a3.net(2)
>1004
原因わかりきってるじゃん
書いた通りに動いてるだけだよ
関数内の最初で代入するなら関数呼ばれる度に代入するんだから
暗黙の初期化がコンパイル時の最適化によって削除されるだけ
コメント1件

1006
デフォルトの名無しさん[sage]   投稿日:2015/11/26 14:31:41  ID:w6z7subU.net
>1004
c++のドラフトのsection 6.7.4によると、
The zero-initialization (8.5) of all block-scope variables with static storage duration (3.7.1) or thread storage
duration (3.7.2) is performed before any other initialization takes place. Constant initialization (3.6.2) of a
block-scope entity with static storage duration, if applicable, is performed before its block is first entered.
って書いてある。妥当ならただ一度だけ初期化しろ、そして初期化の前には0により初期化しろって事。
つまり、
static int* p;
とか
static int* p = 0;
とか書かれているなら、最初に実行されるときにはp==0が成り立った状態でその行を抜けなければならず、
しかももし代入が行われるのであれば、その代入はただ一度だけ行わなければならない。
そういう訳で、
>1005
> 関数内の最初で代入するなら関数呼ばれる度に代入するんだから
この解釈は間違い。

一方でVC++の場合、
あのアセンブリリストが正しいなら、
static int* p = 0;
と書かれた場合にpの実体はBSSセクションに置かれる。
で、MicrosoftのPE/COFFの仕様書によると、このBSSセクションは以下の通り、初期化されないデータが置かれる事になってる。
https://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx から入手できる資料より一部抜粋
Section Name | Content
-------------|---------
.bss | Uninitialized data (free format)
つまりバグバグだって事だな!
コメント3件

1007
デフォルトの名無しさん[]   投稿日:2015/11/26 16:20:53  ID:FOlz1cOR.net
関数内の初期値あり静的変数が関数コールの度に初期化されてたら意味無いだろ

1008
デフォルトの名無しさん[sage]   投稿日:2015/11/26 20:05:34  ID:1UotzJYh.net
>1006
その、Uninitialized data って初期化子で明示的に初期化されない変数(オブジェクトファイルに初期化データが無い)が配置されるところ。
ロードされた時(少なくともエントリポイントに制御が移る前)には0になってる。

こっから先はエスパーだが、
static int *p;の領域を壊している可能性が高い。
static int *p = 0;の時はC++の流儀で初回に0が代入されてバグが隠蔽される。
コメント1件

1009
デフォルトの名無しさん[sage]   投稿日:2015/11/27 01:14:50  ID:Bpp9Chxs.net(3)
>1008
ふーむ
今cygwin/gccで__attribute__((section(".bss")))してでっかい未初期化の配列作って表示したりしてみたら
確かに0で初期化されてた。

ELFの.bssだとプログラム実行時に0で初期化されるってきちんと書いてあるんだけど、
PE/COFFの.bssにはそれが書いてないから怪しく思えたのよ
コメント1件

1010
デフォルトの名無しさん[sage]   投稿日:2015/11/27 01:38:40  ID:A7JAVQ0/.net(2)
いままでLinuxの32bit環境想定で作られたツールを、マシンをx86_64化したのにあわせて
64bit環境にmakeしなおしてます

が、一部のソースは、構造体とかで32bit環境前提で作ってあったり、リンクするライブラリが
32bit環境のものしかない等の理由により、それらのツールはgccに「-m32」オプションを
つけて、32bit環境のバイナリを作らせています

オプションは、ツール用のMakefileに「-m32」を入れてるのですが、しかしたまにソースを
流用する時、32bit専用ソースを誤って64bit環境にソースに混入させてしまう場合が
あることから、32bit環境でコンパイルさせるようにできないかと思ってます

#pragma とかで、そういうチェックや指定はできるのでしょうか
コメント2件

1011
デフォルトの名無しさん[sage]   投稿日:2015/11/27 02:15:31  ID:mzBGejrM.net(7)
>1009
書いてあるが。
https://msdn.microsoft.com/en-us/library/thfhx4st.aspx
Variables that are uninitialized are considered to be initialized to zero and are stored in .bss.

それ以前に.bssに置かれた変数が0でないなら、MSがpeを採用した時から
世界中でPGが発狂しているという事すら考えつかないのか?
コメント1件

1012
デフォルトの名無しさん[sage]   投稿日:2015/11/27 02:28:22  ID:mzBGejrM.net(7)
>1010
static_assert
ないなら
struct foo {int foo[sizeof(void *) == 4 ? 0 : -1];};
コメント1件

1013
デフォルトの名無しさん[sage]   投稿日:2015/11/27 02:36:02  ID:Bpp9Chxs.net(3)
>1011
「PE/COFFの仕様書には」.bssがプログラム実行時に0で初期化されるか否かが書かれてないって話。
参照すべき資料はそいつではなく>1006の方。

> それ以前に.bssに置かれた変数が0でないなら、MSがpeを採用した時から
> 世界中でPGが発狂しているという事すら考えつかないのか?
.bssがきちんと初期化されないならされないで、Cがそれを未初期化なstatic変数の場所として利用しなければ
発狂しないんじゃないかい?
mallocがゼロクリアされないからって誰も文句言わないだろう?

>1010
コンパイルが通らなくなりゃそれで良いのであれば
static_assert(sizeof(ptrdiff_t) != 4, "error!");
かな。
コメント2件

1014
デフォルトの名無しさん[sage]   投稿日:2015/11/27 02:49:14  ID:mzBGejrM.net(7)
>1013
1 C/C++の規格で0に初期化されることは要求されている
2 世界中で発狂していない
しかし、
> MicrosoftのPE/COFFの仕様書によると、このBSSセクションは以下の通り、初期化されないデータが置かれる事になってる。
と書かれている。バグだ!!!
と騒いだ道化は誰でしょう?
コメント1件

1015
デフォルトの名無しさん[sage]   投稿日:2015/11/27 07:36:06  ID:A7JAVQ0/.net(2)
>1012
>1013
回答ありがとうございました
コンパイルが通らなければ、それで気づくと思うので、その方法を試してみます

1016
デフォルトの名無しさん[sage]   投稿日:2015/11/27 08:46:01  ID:Bpp9Chxs.net(3)
>1014
誰でしょう?私です

しかし初期化すべきデータをBSSセクションに置かないという選択をCコンパイラ作者が行ったなら
BSSセクションの中身が実際に初期化されるか否かに関わらず
世界中で発狂するような事態には決してならない、というのも正しいよね?

1017
デフォルトの名無しさん[]   投稿日:2015/11/27 10:56:30  ID:mzBGejrM.net(7)
> あのアセンブリリストが正しいなら、
> static int* p = 0;
> と書かれた場合にpの実体はBSSセクションに置かれる。
と仮定した上で、
> MicrosoftのPE/COFFの仕様書によると、このBSSセクションは以下の通り、初期化されないデータが置かれる事になってる。
と書かれている。バグだ!!!
と騒いだ道化は誰でしょう?

1018
デフォルトの名無しさん[]   投稿日:2015/11/27 12:38:32  ID:K1Tb93fe.net
もう直ぐ、ニューヨークも日経も暴落します。

紅白歌合戦なんてやってられない阿鼻驚嘆の地獄絵図です。皆さんも、現金、食料の準備をしてください。

リーマン超える不況

世界貿易の「体温」を示すといわれる海運運賃指標、バルチック海運指数が1985年の統計開始以来、過去最低を記録した。
http://richa rdkoshimizu.at.webry.info/201511/article_190.html


                        日本から始まる世界的株式市場の大暴落

      , - ―‐ - 、
     /         \    終いには政府にも支えることができなくなり、日本がアメリカ国債の25%を引き出すと世界経済が破綻します。
    /    ∧ ∧  ,   ヽ    それが最終的な暴落であることがはっきりするや否や、マイトレーヤは出現するでしょう。彼は「匿名」で働いております。
   ./  l\:/- ∨ -∨、! , '
  / ハ.|/          ∨|,、ヘ     最初になくなるのは世界の株式市場でしょう。彼らは世界を餌にして生きており、何も還元しません。
|ヽ' ヽ     >  <    ノ!       マイトレーヤは次のように言われる――かれらは自分の財産を隠し、犯罪的雰囲気さえも創出している。            ×竹中&小泉  ←懲役?
〈「!ヽハ._    __    _.lノ 
 く´ \.)    ヽ. ノ   (.ノ        政府の第一の義務は、人々を食物で養うこと、そして最後に防衛です。国民の意志を裏切ると、自殺につながる。      ×黒田&安倍  ←自殺?
  \ `'ー-、 ___,_ - '          マイトレーヤは原発の閉鎖を助言されます。多くの人々が核の汚染の影響で不必要に死んでいます。             ×東電&中曽根 ←死刑?
    ` - 、 ||V V|| \
       | ||   || l\          マイトレーヤが公に現れるにつれて、UFOが姿を表すでしょう。彼の最初の控えめな態度に混乱してはならない。
     / ″         \
(((  /  まる子れーや \     世界平和の脅威は、イスラエル、イラン、アメリカです。イスラエルの役割は跪いて、パレスチナに許しを請うことです。
    ̄ \_ \ /_/

1019
デフォルトの名無しさん[]   投稿日:2015/11/27 12:56:38  ID:zp6Snri4.net
http://lobby.xyz

ネットのロビイスト求む!

コネクションボックス ロビーに

ご参加ください

1020
デフォルトの名無しさん[]   投稿日:2015/11/27 13:21:19  ID:mzBGejrM.net(7)
COFFの.bssに置いて開発者が発狂した一例
http://processors.wiki.ti.com/index.php/Uninitialized_Static_Objects_Not_Se...
でも、こんなことはWindowsでは起こっていない。

1021
デフォルトの名無しさん[sage]   投稿日:2015/11/27 15:01:12  ID:NfVJ1pe2.net
ID:mzBGejrM は鼻につく言い方(書き方)しかできないのか?
コメント1件

1022
デフォルトの名無しさん[sage]   投稿日:2015/11/27 16:42:50  ID:47yXVFDW.net
日常生活のストレスからくるもんだろ
哀れんでおけばいい

1023
デフォルトの名無しさん[sage]   投稿日:2015/11/27 18:18:55  ID:mzBGejrM.net(7)
>1021
ウソを垂れ流す>1006の方が良いとでも?

1024
デフォルトの名無しさん[sage]   投稿日:2015/11/27 20:05:22  ID:hBuCorfy.net
相手が悪いからって自分が悪いことしていい理由にはならないんやで

1025
デフォルトの名無しさん[sage]   投稿日:2015/11/27 20:57:16  ID:mzBGejrM.net(7)
正確か否か
それ以外の評価は意味なし

バカにはそれがわからないようだ
罵られたくなかったら、でたらめなレスをする前に一週間くらい、無い知恵振り絞って考えろ

1026
デフォルトの名無しさん[sage]   投稿日:2015/11/27 21:26:45  ID:yIQF9FHR.net
さぞ辛いことがあったんだね
ここではいくらでも見栄張って自分を主張していいのよ

1027
1001[]   投稿日:0000/00/00 00:00:00
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
クイズ!金の正解!銀の正解! (726)フジ実況
志村動物園 (634)NTV実況
炎の体育会TV (568)TBS実況
満天☆青空レストラン 岩手編★2 (513)NTV実況
名探偵コナン「米花町二転三転ミステリー(前編)」★3 (663)NTV実況
実況 ◆ テレビ朝日 47697 楽園のごはん (459)テレ朝実況
[再]世にも奇妙な物語'16 秋の特別編★4 (751)フジ実況
報道特集★4 (164)TBS実況
このスレッドが人気です(ニュース系)
【軍事】フランス海軍の強襲揚陸艦「ミストラル」が佐世保基地に入港 日本、英国、米国の部隊を乗せ初の4カ国共同訓練へ ★4 (393)ニュー速+
【サッカー】J2で異例の退場処分 相手選手ではなくボールボーイへの”ファウル”で一発レッド (1000)音楽・芸能ニュース
【芸能】キングコング西野が激怒、テレビ収録中に途中退席 (652)音楽・芸能ニュース
【サッカー】徳島サポーターがボールボーイに水かけ! (586)音楽・芸能ニュース
【軍事】フランス海軍の強襲揚陸艦「ミストラル」が佐世保基地に入港 日本、英国、米国の部隊を乗せ初の4カ国共同訓練へ★3 (1002)ニュー速+
【調査】40代、35%が「貯蓄ゼロ」 (1000)ニュー速+
【軍事】フランス海軍の強襲揚陸艦「ミストラル」が佐世保基地に入港 日本、英国、米国の部隊を乗せ初の4カ国共同訓練へ★2 (1002)ニュー速+
【軍事】北朝鮮が弾道ミサイル1発を発射し失敗 東京メトロなど一時運転見合せ★12 (1001)ニュー速+
プログラム板の人気スレ
オブジェクト指向って自然な文法だな 3 (575)
Excel VBA 質問スレ Part47 (705)
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代 (150)
ねねっちと一緒にプログラムを勉強するスレ第2話 (600)
C言語なら俺に聞け 139 (862)
【統計分析】機械学習・データマイニング15 (158)
スレ立てるまでもない質問はここで 147匹目 (418)
くだすれPython(超初心者用) その33 (351)
推薦図書/必読書のためのスレッド 81 (905)
C++相談室 part130 (276)
ふらっと C#,C♯,C#(初心者用) Part127 (408)
C#, C♯, C#相談室 Part94 (64)
Pythonのお勉強 Part52 (873)
Git 15 (672)
Visual Studio 2015 Part8 (715)
Visual Studio 2017 Part2 (139)
Xamarin Part3 (845)
Swift part10 (462)
Java入門・初心者質問スレ Part.3 (140)
Ruby 初心者スレッド Part 59 (1000)
C# vs Java どっちが好き? その3 (191)
クラス名・変数名に迷ったら書き込むスレ。Part27 (948)
HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net (302)
プログラミング言語 Rust 2 (817)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (643)
Androidプログラミング質問スレ revision53 (220)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (636)
Androidプログラミング質問スレ revision53 (212)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)