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

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

【初心者歓迎】C/C++室 Ver.90【環境依存OK】

1 :デフォルトの名無しさん:2014/03/25(火) 00:45:54.57 ID:VoemgV7u
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.89【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1390171944/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。

2 :デフォルトの名無しさん:2014/03/25(火) 00:46:37.60 ID:VoemgV7u
----テンプレここまで-----

3 :デフォルトの名無しさん:2014/03/25(火) 00:49:06.88 ID:bvFcvrs8
このスレで質問することを禁ずる

4 :デフォルトの名無しさん:2014/03/25(火) 00:49:55.79 ID:VoemgV7u
↑ いつものボット

5 :デフォルトの名無しさん:2014/03/25(火) 00:56:06.42 ID:bvFcvrs8
このスレで質問するってことは無能である何よりの証拠

6 :デフォルトの名無しさん:2014/03/25(火) 08:45:20.17 ID:b1DcnFZ1
>>1

7 :デフォルトの名無しさん:2014/03/25(火) 18:57:42.36 ID:mtUgnBBf
新スレhoge記念

8 :デフォルトの名無しさん:2014/03/25(火) 21:01:46.39 ID:A1lqZyhT
hogeは禁止されていません
自由に使って構いません

9 :デフォルトの名無しさん:2014/03/26(水) 00:51:02.53 ID:oexEF2Zl
ここはhogeスレニダ。ウリのスレニダ

10 :デフォルトの名無しさん:2014/03/27(木) 21:24:22.59 ID:bJmMH0bS
私はBorland C++を使ってプログラミングしているのですが、
makefileの使い方が分かりません。
どなたか教えてくれませんか?

11 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/27(木) 21:55:02.97 ID:pkdNwHUQ
>>10
Makefileがあるコマンドラインでmakeまたはmake -f Makefileを実行すると、ビルドが開始される。
make cleanでコンパイル後のオブジェクトをきれいさっぱり消す。
make (ルール名)でMakefileに書かれたルールを実行する。ルールは次のように記述する:

ルール: 必要なファイルのスペース区切り
<タブ文字>実行するコマンド

詳しくは附属のヘルプを見ろ

12 :デフォルトの名無しさん:2014/03/27(木) 21:55:09.35 ID:iFr+67KQ
make
と入力してEnterをおします

13 :デフォルトの名無しさん:2014/03/27(木) 21:58:54.48 ID:pkdNwHUQ
(誤)Makefileがあるコマンドライン
(正)Makefileがあるフォルダのコマンドプロンプト

14 :デフォルトの名無しさん:2014/03/27(木) 22:02:28.05 ID:hIRwfa74
>Makefileがあるフォルダのコマンドプロンプト

日本語でおk

15 :デフォルトの名無しさん:2014/03/27(木) 22:08:24.63 ID:pkdNwHUQ
コマンドプロンプトを開いて、CDコマンドとドライブ指定でMakefileのあるフォルダに移動して(以下略)

古くないWindowsならShift+フォルダ右クリックでコマンドプロンプトが開ける

16 :デフォルトの名無しさん:2014/03/27(木) 22:10:06.86 ID:bJmMH0bS
コマンドプロンプトはスタートを押すと出てくるプログラムですか?

makefileというファイルに以下のように記述しました。

#
# Borland社のBorland-C++コンパイラ用のMakefile
#
CC=bcc
#
# フラグ
# -N -- スタックオーバーフローのチェック
# -v -- デバッグ可能
# -w -- すべての警告をオンにする
# -ml -- ラージモデル
#
CFLAGS=-N -v -w -ml

calc1.exe: calc1.c
$(CC) $(CFLAGS) -ecalc1 calc1.c

clean:
erase calc1.exe

17 :デフォルトの名無しさん:2014/03/27(木) 22:14:20.02 ID:pkdNwHUQ
Borlandが古すぎる。BccInstでBCC55をインストールして使え

18 :デフォルトの名無しさん:2014/03/27(木) 22:18:41.99 ID:pkdNwHUQ
コマンドプロンプトは、コマンドが入力できる黒い画面。古いWindowsならDOSプロンプト

19 :デフォルトの名無しさん:2014/03/27(木) 22:23:05.34 ID:pkdNwHUQ
何でそんな古いコンパイラ使ってるの? 馬鹿にされるよ

20 :デフォルトの名無しさん:2014/03/27(木) 22:23:47.82 ID:bJmMH0bS
ドライブ指定してmakefileに移動しようとしたら
「ディレクトリ名が無効です」になります。

21 :デフォルトの名無しさん:2014/03/27(木) 22:24:52.62 ID:lIcuNLQ3
もうvisualstudio入れろよ
今更そんな古い環境使うとか苦行だろ

22 :デフォルトの名無しさん:2014/03/27(木) 22:25:13.90 ID:pkdNwHUQ
「makefileに移動」じゃなくて「makefileのあるフォルダに移動」だよ

23 :デフォルトの名無しさん:2014/03/27(木) 22:28:10.86 ID:bJmMH0bS
makeを入力すると、
'make'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたバッチファイルとして認識されません
とでます。

24 :デフォルトの名無しさん:2014/03/27(木) 22:28:38.98 ID:pkdNwHUQ
別のドライブに移動したいときは「D:」のように入力してEnter

25 :デフォルトの名無しさん:2014/03/27(木) 22:31:28.19 ID:ErFGKncP
パス通ってないだろ

26 :デフォルトの名無しさん:2014/03/27(木) 22:32:03.27 ID:pkdNwHUQ
>>23
bccのインストールができてない。
まずは環境変数PATHを設定する。
「SET PATH=%PATH%;bccのあるフォルダへのパス」

27 :デフォルトの名無しさん:2014/03/27(木) 22:33:02.94 ID:V0dGQBZu
>>23
プログラムの前にDOSの勉強をしろ

28 :デフォルトの名無しさん:2014/03/27(木) 22:41:07.96 ID:pkdNwHUQ
古い!! ふるすぎる。。。(藁)
お前はそれでも地球人か!!!

29 :デフォルトの名無しさん:2014/03/27(木) 22:44:32.34 ID:bJmMH0bS
インストールしました。
makeを押しても何の反応もありませんが。

30 :デフォルトの名無しさん:2014/03/27(木) 22:46:00.71 ID:lIcuNLQ3
ダメだこいつ…

31 :デフォルトの名無しさん:2014/03/27(木) 22:47:11.61 ID:pkdNwHUQ
エラーメッセージがなく、EXEが作成されてれば成功。

32 :デフォルトの名無しさん:2014/03/27(木) 22:47:17.82 ID:bJmMH0bS
Copyrightが出てくるだけです。

33 :デフォルトの名無しさん:2014/03/27(木) 22:50:45.73 ID:pkdNwHUQ
タブ文字って知ってる?

34 :デフォルトの名無しさん:2014/03/27(木) 22:51:15.73 ID:bJmMH0bS
.exeは対象のプログラム名で出てくるのでしょうか?
それとも、makefile.exeのように出てくるのでしょうか?

35 :デフォルトの名無しさん:2014/03/27(木) 22:53:22.32 ID:bJmMH0bS
タブ文字・・・分かりません。
makefileに書く書式でしょうか?

36 :デフォルトの名無しさん:2014/03/27(木) 22:58:18.30 ID:bJmMH0bS
タブ文字調べました。
プログラムのスペース文字のことですね。

37 :デフォルトの名無しさん:2014/03/27(木) 23:04:46.62 ID:pkdNwHUQ
キーボードの左側にあるTabというキーを打つと入力できる。
Makefile中のコマンドの前にはTab文字を入力しないといけない。
「CD」で現在のフォルダの場所(パス)を確認しろ。calc1.cを右クリックプロパティで場所を確認しろ。

38 :デフォルトの名無しさん:2014/03/27(木) 23:15:12.68 ID:iFr+67KQ
Tabをおしてもタブ文字がはいらなかった場合は…
たとえば、4個の半角空白を\tに置換します
しかしそれができるエディタなら、タブ文字がはいるだろう

39 :デフォルトの名無しさん:2014/03/27(木) 23:19:21.00 ID:bJmMH0bS
Tabで打ってませんでした。
パスとcalc1.cの場所は同じです。

40 :デフォルトの名無しさん:2014/03/27(木) 23:22:14.63 ID:pkdNwHUQ
「DIR /W」した結果をここに貼れや

MakefileがMakefile.txtになってる可能性があるな

41 :デフォルトの名無しさん:2014/03/27(木) 23:27:47.79 ID:bJmMH0bS
拡張子はつけてません

42 :デフォルトの名無しさん:2014/03/27(木) 23:30:50.82 ID:pkdNwHUQ
Makefileは同じ場所にある?
念のために「DIR」して確認してくれ。

43 :デフォルトの名無しさん:2014/03/27(木) 23:36:59.26 ID:TRNtuGkP
uuエンコードしてup

44 :デフォルトの名無しさん:2014/03/27(木) 23:39:08.03 ID:bJmMH0bS
同じ場所にあります。

45 :デフォルトの名無しさん:2014/03/27(木) 23:39:22.57 ID:LrW8OE+k
俺、子供の頃地球に住んでたことあるよ。

46 :デフォルトの名無しさん:2014/03/27(木) 23:40:29.85 ID:fqEnNET5
>>24
変なこと教えるなよ。
ドライブごとのカレントフォルダーは
今となっては誰も欲してない機能なんだから
cd /d 移動先のパス
にしとけ。

47 :デフォルトの名無しさん:2014/03/27(木) 23:45:04.99 ID:pkdNwHUQ
フォルダをZIP圧縮してアップローダーにアップロードしろ

48 :デフォルトの名無しさん:2014/03/27(木) 23:55:18.99 ID:pkdNwHUQ
古過ぎるコンパイラは馬鹿には無理。

49 :デフォルトの名無しさん:2014/03/27(木) 23:58:38.08 ID:pkdNwHUQ
It is impossible for fools to use too old compilers.

50 :デフォルトの名無しさん:2014/03/28(金) 00:02:57.04 ID:CsDGXoI3
BorlandっていまやWin最強のコンパイラーだろ?
Clangになって一番すごいWinのコンパイラーに進化したらしいよな

51 :デフォルトの名無しさん:2014/03/28(金) 00:41:16.94 ID:yDdY0uS3
VC++ EEじゃあかんのか

52 :デフォルトの名無しさん:2014/03/28(金) 00:52:34.68 ID:vM8zXvpO
次のように表示されます。

bcc -N -v -w -ml -ecalc1 calc1.c
'bcc'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
** error 1 ** deleting calc1.exe

53 :デフォルトの名無しさん:2014/03/28(金) 01:08:29.53 ID:a5++l4GP
>>52
じゃあパスが通ってないんだろう、環境変数のpathnの項を弄れ
やり方? bccの使い方を説明するサイトとか本にはだいたい載ってるだろと

54 :デフォルトの名無しさん:2014/03/28(金) 01:09:57.34 ID:CsDGXoI3
>>52
違う,いまのBorlandは
clang -o calc1.exe calc1.c

55 :デフォルトの名無しさん:2014/03/28(金) 01:12:20.51 ID:CsDGXoI3
>>53
Borlandにはbccなんてのはないから、当然>>52になる

56 :デフォルトの名無しさん:2014/03/28(金) 01:15:11.69 ID:CsDGXoI3
おそらく、bccってやってるぐらいだからコンパイラ・リンカーのcfg設定すら出来てないだろうな

57 :デフォルトの名無しさん:2014/03/28(金) 01:21:27.24 ID:ZLrJM0xQ
とりあえずフルパスでやってみろよ

58 :デフォルトの名無しさん:2014/03/28(金) 01:27:34.35 ID:vM8zXvpO
cfg設定はしてます。
makeを入力すると52のように表示されます。

59 :デフォルトの名無しさん:2014/03/28(金) 01:29:03.46 ID:vM8zXvpO
makefileは>>16のように記述したのですが間違っていますか?

60 :デフォルトの名無しさん:2014/03/28(金) 02:01:11.81 ID:vM8zXvpO
CC=bcc32
に書き換えたら行けました。
そしたら今度は
コマンドオプションの間違い -ml
というエラーが出ました。
-mlをとってmakeをしたら上手くいきました。ラージモデル-mlは認識されていないのでしょうか?
教科書通りにしてるのにおかしいですね。

61 :デフォルトの名無しさん:2014/03/28(金) 02:34:35.65 ID:Bi202b4z
>>60
俺Winの知識ないって自慢し過ぎ
bcc32に限らずwinのコマンドのオプションリスト表示すら出したことないだろ
winの経験が少しあれば普通はオプションリスト表示オプションを付けて起動して、
どんなオプション付けられ、それが何をするのか調べることぐらい出来ると思うが
winの場合のオプションリスト表示は /? ってのが普通(常識)

62 :デフォルトの名無しさん:2014/03/28(金) 02:42:52.86 ID:oiG2WFSt
スモールモデル、ラージモデルは、16ビットの時代

63 :デフォルトの名無しさん:2014/03/28(金) 02:51:20.42 ID:Bi202b4z
>>62
16bitとはおいおいすぎ><
16bitのプログラムを開発したいから、わざわざBorlandを選んだのかな

64 :デフォルトの名無しさん:2014/03/28(金) 05:13:02.52 ID:FWVtOBdw
つーか、おまえらバカにして遊んでるだけだろ

65 :デフォルトの名無しさん:2014/03/28(金) 10:06:39.77 ID:6uoLiniK
とんでもない。
馬鹿になんてしてないよ。
遊んでいることは否定しないけど。

66 :デフォルトの名無しさん:2014/03/28(金) 11:40:09.31 ID:dRXuKu/3
>>64
そりゃsizeofをプリプロセッサが処理するような処理系を好んで使うような奴だもの

67 :デフォルトの名無しさん:2014/03/28(金) 11:52:19.86 ID:WLy6H0qs
やっぱりねw

68 :デフォルトの名無しさん:2014/03/28(金) 12:29:41.58 ID:dy0OpFC/
>>64
bccに-mlでバージョン出さない時点で普通に古いコンパイラを前提にするだろ

69 :デフォルトの名無しさん:2014/03/28(金) 13:04:27.64 ID:RWL6RT/i
明示するだろ、JK

70 :デフォルトの名無しさん:2014/03/28(金) 17:42:32.13 ID:vM8zXvpO
>>61
オプションリスト表示はどのように開くのでしょうか?
コマンドプロンプトに/?を入力しても反映されません。

71 :デフォルトの名無しさん:2014/03/28(金) 18:40:43.95 ID:YNdMan3y
単に
bcc32
と入力してEnterをおします

むかしBorland C++Builder バージョン5か6のおまけとして
コマンドラインコンパイラのオプションの表が付属していました。
それと異なります。たぶん全部を表示しないと思われます

72 :デフォルトの名無しさん:2014/03/28(金) 18:47:27.10 ID:YNdMan3y
>>19
いいコンパイラだよ

73 :デフォルトの名無しさん:2014/03/28(金) 18:50:58.97 ID:YNdMan3y
calc1.cってなに?

74 :デフォルトの名無しさん:2014/03/28(金) 21:02:05.81 ID:vM8zXvpO
>>71
表示されました。ありがとうございます。

>>73
今、オライリーのC実践プログラミングという教科書を使用しているのですが、
その中に例として出ているプログラムです。

75 : ◆QZaw55cn4c :2014/03/28(金) 21:16:01.34 ID:oXAQt7Rw
>>72
そうそう、コードガードはわりと便利、評価版をダウンロードすればいいし

76 :デフォルトの名無しさん:2014/03/29(土) 12:43:43.99 ID:OMABeBxL
本が古いなら、それに環境をあわせないと。
煽られているように、とりまそれ最新じゃないよ

時代は便利になったんだ。
codepad, ideone もあるよ。 >>1

77 :デフォルトの名無しさん:2014/03/29(土) 12:48:33.82 ID:T0jzXlJE
>>76
いわゆる分割コンパイルにも対応してほしいな、makefile いれとけるとか

78 :デフォルトの名無しさん:2014/04/01(火) 18:44:18.29 ID:zkzJISd4
C++の基礎だけかじって、GUIプログラムも作ってみたいと思ってVisualStudioを触ってみると、様相がだいぶ違って困惑しています。
2つ教えてください。
1つ目
まず、MFCで自動作成されたソースファイルを見てもmain()?winmain()?_tmain()?すら見つかりません。
イベントドリブンだから、初期化とそれぞれのイベントに対応した部分以外は触る必要がないので隠されているのでしょうか?
なんとなくでも全体の流れを把握したいのでmain()にあたる部分を見たいのですが、どこに置いてあるのでしょうか?

2つ目
VisualStudioで作成したソースを、フリーで落とせる、C++の勉強に使っていたようなC++コンパイラでコンパイルすることはできるのでしょうか?
複数のファイルに分かれたようなプログラムを書いたことがないのでmakefileとかもよくわかってはいないし、目的があって他のコンパイラを使いたいわけでもないのですが、
VisualStudioで作成したソースはVisualStudioを使わないとコンパイルできない特殊な仕様なのか、
(ファイル間の関係を理解して正しくmakefileを書けば)あくまで普通のC++の仕様に従った、一般的なコンパイラが理解できるソースを作成しているのか知りたいと思っています。

79 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/01(火) 19:06:36.07 ID:28c8XDsv
1つめ。WinMain関数は自動リンクされるライブラリに含まれている。
有料VC++がインストールされているフォルダのどこかにMFCのソースがある。
初心者には膨大なのでgrepを使いこなさないと読めない。
WinMainとCWinAppを読めば動作がわかる。
2つめ。ソースプログラムやコンパイラによる。ソースがC++11なら
C++11に準拠したコンパイラでなければ使えない。

80 :デフォルトの名無しさん:2014/04/01(火) 19:14:53.77 ID:KWNjZyFY
1つめはステップインで開始すればいい

81 :デフォルトの名無しさん:2014/04/01(火) 19:45:25.44 ID:28c8XDsv
ヒント:C:\Program Files

82 :デフォルトの名無しさん:2014/04/01(火) 19:53:07.99 ID:CqvqfScs
>>78
とりあえずVC++ExpressEdition触ってみたらいいと思う

83 :デフォルトの名無しさん:2014/04/01(火) 20:06:30.50 ID:hppE64Hw
rc とか mc が無いとguiは難しいでしょうね

84 :デフォルトの名無しさん:2014/04/01(火) 20:27:34.83 ID:PR3x9no5
>>82
素で言っているのか

85 :デフォルトの名無しさん:2014/04/01(火) 20:34:07.93 ID:CqvqfScs
>>84
初期プロジェクトで既にウィンドウ生成までできてるから
流れ見るのならいけるんじゃね?
関数はもちろん調べながら

86 :デフォルトの名無しさん:2014/04/01(火) 20:53:33.69 ID:eefQLiAy
>>82
VCでGUIソフトとなるとMFC使えないExpressは苦行だろ
MFCじゃなくてQtなら良いが

87 :デフォルトの名無しさん:2014/04/01(火) 20:58:12.28 ID:eyBPHv5q
今時MFCとかMやな

88 :デフォルトの名無しさん:2014/04/01(火) 21:00:40.54 ID:zkzJISd4
レスありがとうございます。
ステップインで見てみると、appmodul.cppというファイルに_tWinMain()があり、そこからさらに
winmain.cppというファイル内のAfxWinMain()が呼ばれているようでした。
いきなり理解するのは難しそうですが、おいおい見ていこうかと思います。

ところで>>82でVC++ExpressEditionを薦めていただきましたが、製品版とは何か違うのでしょうか?
今使っているのはDreamSparkで手に入れたVisualStudio2013を使っていますが、旧版やExpressEditionのダウンロードも可能です。
VisualStudio2013の情報はぐぐった限りまだ少ないので旧版を使った方がいいような気もしてます。

89 :デフォルトの名無しさん:2014/04/01(火) 21:02:18.77 ID:28c8XDsv
製品版あるなら製品版だけでいいよ

90 :デフォルトの名無しさん:2014/04/01(火) 21:03:43.90 ID:28c8XDsv
expressは製品版に比べ機能が少ない

91 :デフォルトの名無しさん:2014/04/01(火) 21:47:13.30 ID:BTv6StGE
製品版よりちょっと動作が軽い

92 :デフォルトの名無しさん:2014/04/01(火) 22:13:30.10 ID:q8+ciQV2
MFCが付いてない

93 :デフォルトの名無しさん:2014/04/01(火) 22:27:29.90 ID:CqvqfScs
>>87
VS2013触った事ないからわからんけど
フォームアプリケーションじゃなくてwin32アプリケーションがあればそれでソース見れるんじゃない?

> なんとなくでも全体の流れを把握したいのでmain()にあたる部分を見たい
こういう事かな ttp://msdn.microsoft.com/ja-jp/library/bb384843.aspx

94 :デフォルトの名無しさん:2014/04/01(火) 23:04:38.46 ID:JvY411Bp
Expressに無料版MFCでいいじゃん。
ATLの方が簡単だけどな。

95 :デフォルトの名無しさん:2014/04/01(火) 23:46:31.78 ID:q8+ciQV2
無料MFCて何の事だよ

96 :デフォルトの名無しさん:2014/04/02(水) 17:38:29.47 ID:SfgYmxWg
それっぽい単語を並べただけなのでマジレスしないでください

97 :デフォルトの名無しさん:2014/04/02(水) 19:39:44.52 ID:aNx9C+Mf
>>95はモグリ

98 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/03(木) 12:52:10.02 ID:lJqirrU9
http://www.geocities.jp/home_page22/C/dmc.html

99 :デフォルトの名無しさん:2014/04/03(木) 15:33:05.57 ID:BFyxuILc
てっきりMZCが出てくる流れかと思ったがそうじゃなかったw

100 :デフォルトの名無しさん:2014/04/04(金) 15:36:27.65 ID:QN8rMztS
マルチコアへの対応って、AfxBeginThreadでマルチスレッドにしたらOSが勝手にコアごとに振り分けてくれるという認識であってる?
ググるとParallelクラスがあるけど、ネイティブでは使えないっぽい。

101 :デフォルトの名無しさん:2014/04/04(金) 16:48:02.82 ID:nM83ZP3Z
AfxBeginThreadはある関数を新しいスレッドで開始するだけだから、
parallel forみたいなことをしたい場合は、
自分で各スレッドのforの範囲を決めたり、
スレッドが終了するのを自分で待ったりする必要がある。

ネイティブで使えるパラレルライブラリはちゃんと入っているから探すべし。

102 :デフォルトの名無しさん:2014/04/04(金) 19:59:43.18 ID:ZtsQOPBg
マルチコアまともに扱いたいならMFCなんか使わんやろ

103 :デフォルトの名無しさん:2014/04/04(金) 20:06:44.55 ID:2QttofMo
OpenMPは楽して並列化させたい場合に威力を発揮するな
……OpenACCが使えるCompilerってフリーに無かったっけ?

104 :デフォルトの名無しさん:2014/04/04(金) 20:41:28.03 ID:DD5EG69p
マルチコアを真面目に使いたいときに
GUIフレームワークをわざわざ変える奴は
マトモな設計が出来ない奴

105 :デフォルトの名無しさん:2014/04/04(金) 20:43:23.33 ID:eu/rYsXw
MFC関係ないよね

106 :デフォルトの名無しさん:2014/04/04(金) 20:59:32.67 ID:UDPO/kAP
儂もそう思う。が、未だに世に知られていない新理論を
構築済みなのかも知れないのでもう少し語らせてみたいです。

107 :デフォルトの名無しさん:2014/04/04(金) 23:36:48.04 ID:QN8rMztS
>>101
OpenMPとかPPLとかBoostとかいろいろあるんだな
調べてみるよありがとう

108 :デフォルトの名無しさん:2014/04/05(土) 00:52:05.63 ID:Z9uNYFZQ
char なら printf
w_char なら wprintf
TCHAR なら _tprintf
だと思うのですが、どうして三番目のやつは先頭に _ が付くのでしょうか?

109 :デフォルトの名無しさん:2014/04/05(土) 00:56:55.10 ID:JxLvhIna
マクロって_MAX_PATHとか付くやん

110 :デフォルトの名無しさん:2014/04/05(土) 01:50:54.62 ID:EG+AV0eK
標準規格にはないWindows用の独自拡張だから

111 :デフォルトの名無しさん:2014/04/05(土) 02:16:53.63 ID:goifYp5b
コンパイラメーカーや、ライブラリの作者は、_を多用します
プログラマは、先頭に、_をつかわないようにします(おれは、そういわれた)

112 :デフォルトの名無しさん:2014/04/05(土) 02:21:01.16 ID:zHyV6h3a
>>111
俺もC言語辞典(古い)でそれ見た

113 :デフォルトの名無しさん:2014/04/05(土) 02:47:32.13 ID:oiRFlfhh
>>100だけど、とりあえず何もしないループ回してCPU使用率見たら、特にマルチスレッド処理してないのに複数コアが仕事してるみたいだった。
マルチスレッドを意識してプログラムしなくてもwindows8は賢いからある程度勝手に対応してくれるのか?
かといって全コアが100%に張り付くというわけでもなく、60%弱くらいでよくわからん。

これを回しただけなんだけど
for (int j = 0; j < 100000; j++){
for (int i = 0; i < 100000; i++){}
}

114 :デフォルトの名無しさん:2014/04/05(土) 03:30:05.84 ID:zHyV6h3a
>>113
空ループって最適化したら消えるんじゃねーの?
それ以前に裏で別のプロセス走ってるとか
コンパイラの自動並列化が効いちゃったとかのオチな気がする

115 :デフォルトの名無しさん:2014/04/05(土) 03:59:45.28 ID:JxLvhIna
>>113
1コアの100% =
2コアの50% =
4コアの25%

116 :デフォルトの名無しさん:2014/04/05(土) 04:09:44.16 ID:4p3tjfYN
よくわからないがシングルスレッド高負荷処理で
同一コアと思われるハイパースレッディングの
論理CPUペアが50%ずつ(たまに60+40の非対称)
になるのはWindowsでよくあること。
表示が間違ってるのではないかと思ってるけど

117 :デフォルトの名無しさん:2014/04/05(土) 11:56:14.14 ID:oiRFlfhh
コンパイラの自動並列化がそれっぽい、便利なんだな
もっと詳しくならないとマルチコアとか考えるだけ無駄ってことか……

118 :デフォルトの名無しさん:2014/04/05(土) 12:06:18.53 ID:Vwyio/wC
マルチコアとマルチスレッドはべつ。
シングルスレッド・プログラムでも、OSがマルチコア使うかもしれないし
マルチスレッド・プログラムでも、OSが1コアしか使わないかもしれない。
プログラマが出来るのは主にスレッド管理だけ。

119 :デフォルトの名無しさん:2014/04/05(土) 12:07:27.06 ID:zHyV6h3a
>>117
http://msdn.microsoft.com/ja-jp/library/hh872235.aspx

120 :デフォルトの名無しさん:2014/04/05(土) 12:10:33.92 ID:Vra9QIvI
にほんごでおk

121 :デフォルトの名無しさん:2014/04/05(土) 12:59:48.48 ID:zqI4wR1v
>>113
「マルチスレッドにすると勝手にコアごとに割り付けてくれる」ってのは正しい
正確には割り付けるんじゃなく、並列に実行される。

CPU使用率は、ツールやコマンドによって計算方法が違っている場合がある。
例えば4コアの場合、全CPUをフルで使った場合100%と表示するか、400%と表示するかはツール次第。

122 :デフォルトの名無しさん:2014/04/05(土) 13:32:33.53 ID:Gtcr4gqx
構造体を動的に生成したいのですが、このやりかたでよろしいでしょうか?
http://ideone.com/Yr4XRf

123 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 13:35:36.03 ID:pKk9GxNe
>>122
型名の始めは大文字にしたほうがいいね。

124 :デフォルトの名無しさん:2014/04/05(土) 13:38:16.05 ID:Gtcr4gqx
>>123
そうですね^^

型名以外には何か問題点とかありますか?

125 :デフォルトの名無しさん:2014/04/05(土) 13:38:47.30 ID:NnouwwX7
はい

126 :デフォルトの名無しさん:2014/04/05(土) 13:39:59.09 ID:Gtcr4gqx
>>125
具体的にはどのような?

127 :デフォルトの名無しさん:2014/04/05(土) 13:42:36.52 ID:30x58bFF
このやりかたでよろしいでしょうか?
はい
後何が必要なのか?

128 :デフォルトの名無しさん:2014/04/05(土) 13:44:42.90 ID:Gtcr4gqx
>>127
ポインタの扱いが苦手でして
一応コンパイラもエラー吐かなかったので大丈夫みたいですがなにぶん心配性なもんで・・・

129 :デフォルトの名無しさん:2014/04/05(土) 13:50:24.60 ID:/rC4NDRr
>>128
で?

130 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 14:03:30.11 ID:pKk9GxNe
>>129
次のコード書いてみて。

131 :デフォルトの名無しさん:2014/04/05(土) 15:18:00.60 ID:N2+78ftB
>>108
願望

132 :デフォルトの名無しさん:2014/04/05(土) 15:21:03.39 ID:zHyV6h3a
>>122
そもそも構造体のメンバ変数が1つだけって……
動的確保してるのにその個数が定数値って……

例:http://codepad.org/l9spLfkF

133 :デフォルトの名無しさん:2014/04/05(土) 15:22:25.93 ID:zHyV6h3a
おっとfreeを忘れてた……
http://codepad.org/3ZiOa4oN

134 :デフォルトの名無しさん:2014/04/05(土) 15:23:25.39 ID:JxLvhIna
>>132
例だから別にいいだろ

135 :デフォルトの名無しさん:2014/04/05(土) 15:53:12.52 ID:Vra9QIvI
ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない

typedef struct 〜 の書式で宣言するなら struct の後のタグ名は不要
おまじない気分でつけるものじゃない

何よりまず、obj001からobj002にコピーしている意味がわからない
この後 obj002を使おうとしていますというオチじゃないかと非常に気持ち悪い

136 :デフォルトの名無しさん:2014/04/05(土) 15:55:30.71 ID:Vra9QIvI
×ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない

137 :デフォルトの名無しさん:2014/04/05(土) 15:55:38.93 ID:PXTTIzjC
> 何よりまず、obj001からobj002にコピーしている意味がわからない

いや、その点はどうでもいだろw
ポインタの勉強するときそういう代入してみるのってよくあることだろ。

138 :デフォルトの名無しさん:2014/04/05(土) 16:15:50.31 ID:JxLvhIna
本題以外にケチつける奴はただ優越感に浸りたいだけ
浸れてないけど

139 :デフォルトの名無しさん:2014/04/05(土) 16:21:18.84 ID:LokGB3M7
×ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない、というのが持論です

140 :デフォルトの名無しさん:2014/04/05(土) 17:03:41.01 ID:Vra9QIvI
改めて見直してみたらいろいろな慣習とか規約があるみたいだな
よし、今日のところは引き分けにしておいてやる

141 :デフォルトの名無しさん:2014/04/05(土) 17:55:33.89 ID:YrLzJmoN
sprt使わずにdistance名乗るか

142 :デフォルトの名無しさん:2014/04/05(土) 18:38:06.46 ID:zqI4wR1v
>>123
え?なんで型名を大文字で始めるの
定数と間違えてない?

143 :デフォルトの名無しさん:2014/04/05(土) 19:04:31.24 ID:zHyV6h3a
>>141
実用上はいちいちsqrtしないだろ?

……ごめんなさい忘れてただけです

144 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 19:22:03.80 ID:kCbCwa1D
>>142
例えばDogという型名とdogという変数名が衝突しないから、分かりやすいコードが書ける。

145 :デフォルトの名無しさん:2014/04/05(土) 19:35:59.53 ID:zqI4wR1v
>>144
うん。そうです。自分が勘違いしていました・・・

146 :デフォルトの名無しさん:2014/04/05(土) 22:27:29.57 ID:pxBAHja5
型名と変数名が衝突しないルールなどこの世に無数にあるのに、
自分の使ってるルールがさも普遍的に良いものであるかのような
ミスリードをする奴の言うことなど真に受けてはいけない

147 :デフォルトの名無しさん:2014/04/05(土) 22:45:29.81 ID:JxLvhIna
char cszBuff
TCHAR tszBuff
int nCount
UINT unCount

typedef struct tagStructName{
} T_STRUCTNAME;

いろいろやってみて自分が納得行くの使ったらいいんや

148 :デフォルトの名無しさん:2014/04/05(土) 23:56:57.72 ID:d+kzfy0R
>>147
システムハンガリアンさんちーす
まだ絶滅してなかったんすね!
頑張ってくださいね!

149 :デフォルトの名無しさん:2014/04/06(日) 03:16:28.05 ID:PoyortF4
> 型名と変数名が衝突しないルールなどこの世に無数にあるのに、

ルール以前に、文法で型名と集成体タグ名と変数名は衝突し得ないんじゃね?
http://ideone.com/srhSui

あと、typedefされた型名って_tってサフィックスつけるのが一般的だと思うんだけど
これもローカルなルールなんやろか

150 :デフォルトの名無しさん:2014/04/06(日) 03:33:10.66 ID:v5F7vKVc
>>149
そのとおりだねえ
ISO/IEC 9899:1999 6.2.1p1
An identifier can denote an object; a function; a tag or a member of a structure, union, or
enumeration; a typedef name; a label name; a macro name; or a macro parameter.

集成体タグと typedef 名と変数は異なる名前空間だね

151 :デフォルトの名無しさん:2014/04/06(日) 03:39:44.68 ID:lcQBK2Mz
>>149
http://en.wikipedia.org/wiki/Typedef
によると、POSIXでは _t サフィックスは typedef の名前にリザーブされていて、それゆえ
名前が衝突しないようにユーザが定義する typedef には _t を使わないほうがいいらしい

152 :デフォルトの名無しさん:2014/04/06(日) 03:53:44.87 ID:PoyortF4
>>150
規約での確認、dです

>>151
> Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.
…マジっすか orz

153 :デフォルトの名無しさん:2014/04/06(日) 04:43:31.25 ID:7TI60JXf
衝突ってのはコンパイルエラーではなくて
人が目で見て区別がつきやすいよう
同じ綴りを避けるって話だろうに
アスペなおまいらは

154 :デフォルトの名無しさん:2014/04/06(日) 07:44:06.37 ID:AUPUS+0I
>>153
人の目で区別する必要があるシチュエーションってどんなの?

155 :デフォルトの名無しさん:2014/04/06(日) 11:01:21.41 ID:Gd53X1PX
>>153
よほど糞な開発環境なんだなお前

156 :デフォルトの名無しさん:2014/04/06(日) 11:52:04.47 ID:gdJCg3c2
あえて言おう
処理系指定で組めばおk
初心者なんだろ、何か組みあがった快感って大事だぞ

157 :デフォルトの名無しさん:2014/04/06(日) 12:09:44.18 ID:BmjYK//+
別のものには違う名前を使うもので
名前を使い回すなって当たり前のことだろ
どんだけ馬鹿なんだおまえら

158 :デフォルトの名無しさん:2014/04/06(日) 12:18:02.39 ID:PoyortF4
流れぶったぎりでスマソ
_tサフィックスのことは、下にも書かれてたよorz
ttp://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02

159 :デフォルトの名無しさん:2014/04/06(日) 13:36:30.63 ID:9b0FkJFr
>Such type names are reserved by POSIX

本当にWikiは嘘だらけだな
byだと適用範囲がPOSIXでなくC全般と読めてしまう

160 :デフォルトの名無しさん:2014/04/06(日) 15:47:59.42 ID:PoyortF4
byよりinの方が良いかもね…スレチだけど

161 :デフォルトの名無しさん:2014/04/06(日) 16:35:16.36 ID:5rOAt6qX
>>159-160
Wikiなんだから編集できるんじゃねーの?

162 :デフォルトの名無しさん:2014/04/06(日) 16:39:48.19 ID:Pw+vYT2x
A「こんな説明みつけたよ!
B「間違ってるねそれ。
 やっぱりWikipediaはこらだから
A「直せるんだから直せよ
B「えっ、何で俺が?
A「えっ?

163 :デフォルトの名無しさん:2014/04/06(日) 16:46:07.08 ID:YqB/fCSo
byの方がいいだろ

164 :デフォルトの名無しさん:2014/04/06(日) 16:56:24.24 ID:k991ba7o
A「byだとPOSIX以外にもルールが適用されると読める
B「byの方がいいだろ

せめて意見するときは
そう考える根拠ぐらい書きたいものだ

165 :デフォルトの名無しさん:2014/04/06(日) 16:57:56.33 ID:PoyortF4
byの方が良いのかorz
Wiki編集するところだったよorz

166 :デフォルトの名無しさん:2014/04/06(日) 19:15:29.97 ID:X8q2hYwd
そもそもその後の for 以下を読めば C 全般に適用とかの変な解釈するわけないと思うんだが...

167 :デフォルトの名無しさん:2014/04/06(日) 19:22:56.79 ID:714kpsax
>Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.

POSIXによって予約されているため
ユーザー定義型での使用は避けるべきである

POSIX準拠システムでのアプリケーションプログラムを超えて
POSIXと関係ないオペレーティングシステムのアプリケーションにまで言及しとりますがな

168 :デフォルトの名無しさん:2014/04/06(日) 19:41:42.06 ID:YqB/fCSo
避けるべきということに変わりはないだろ
お前は移植性の事全く考えないの?
POSIXでないシステムの方が圧倒的に少ないというのに

169 :デフォルトの名無しさん:2014/04/06(日) 19:47:23.97 ID:X8q2hYwd
で、どこに C 全般とか書いてあるんだ?

170 :デフォルトの名無しさん:2014/04/06(日) 19:54:26.32 ID:PoyortF4
>>167
"by ISO/IEC"でなく"by POSIX"という時点でお察し(ry

171 :デフォルトの名無しさん:2014/04/06(日) 19:56:17.95 ID:k991ba7o
なんでこんなに揉めるんだ?
Cのtypedefの説明に「_tはPOSIXで予約済」
って書いてあったら
POSIX系以外も従う必用性がある
ように読めるだろ。

>避けるべきということに変わりはないだろ
それは書いた人の主観であって
百科事典の説明に書くべきじゃないぞ。
技術文書書いたこと無いの?

172 :デフォルトの名無しさん:2014/04/06(日) 19:58:14.20 ID:k991ba7o
「POSIXではオペレーティングシステムの為に予約」
という表現にすれば問題なくなると思うのだが

173 :デフォルトの名無しさん:2014/04/06(日) 19:59:31.29 ID:14wt57ia
>>158
いっぱいあるんだな……

174 :デフォルトの名無しさん:2014/04/06(日) 20:13:54.33 ID:IsEOtgMD
_t はタグのtなのかtypedefのtなのかどっちですか?

175 :デフォルトの名無しさん:2014/04/06(日) 20:16:44.81 ID:YqB/fCSo
>>171
読めないよ
俺C言語で新しいOS書いたわー
そのOSでは大文字で始まる型名予約してるから使うなよ!って書いて、誰がC言語全般に影響あると思うんだ?

176 :デフォルトの名無しさん:2014/04/06(日) 20:22:32.03 ID:YqB/fCSo
POSIXが何かわかってるやつはC言語全般に影響が〜なんて誤解しない。
POSIXが何かわかってない奴は(圧倒的多数であるPOSIXシステムで動かされる可能性を考慮して)無条件に従っておいた方がいい

なんの問題もない。

177 :デフォルトの名無しさん:2014/04/06(日) 20:22:37.76 ID:ZIQhn8PO
Wikipediaの内容についての議論はWikipediaのTalkページでやれよ

178 :デフォルトの名無しさん:2014/04/06(日) 20:24:58.76 ID:X8q2hYwd
>>171
> なんでこんなに揉めるんだ?

単なるしきたりを

> POSIX系以外も従う必用性がある
> ように読めるだろ。

なんて言うアホがいるからだろ。

179 :デフォルトの名無しさん:2014/04/06(日) 20:29:09.78 ID:k991ba7o
>>178
説明の文面が妥当かどうかの話をするときに
どうしてシキタリが出てくるんだよアホですか?

180 :デフォルトの名無しさん:2014/04/06(日) 20:30:38.36 ID:8z3KlCR7
もうここで議論するべき内容ではないどっか行け

181 :デフォルトの名無しさん:2014/04/06(日) 20:34:13.86 ID:X8q2hYwd
convention も読めないアホは口挟むなよ (w

182 :デフォルトの名無しさん:2014/04/06(日) 20:36:21.69 ID:PoyortF4
なかなか面白かった

>>174
型名(type name)のtらしい…俺はtypedefのtって思い込んでたけど
ttp://stackoverflow.com/questions/231760/what-does-a-type-followed-by-t-underscore-t-represent

183 :デフォルトの名無しさん:2014/04/06(日) 20:44:57.82 ID:k991ba7o
>>181
「Cのsize_t(しきたりでtypedefには_tを付けたもの)は
 POSIXによって予約されている」
などと言っている出鱈目なWikipediaの説明が
妥当だと思うアホはすっこんでろ

184 :デフォルトの名無しさん:2014/04/06(日) 20:57:23.37 ID:6fUxN2Jx
All rights are reserved by POSIX.

185 :デフォルトの名無しさん:2014/04/06(日) 20:57:26.93 ID:X8q2hYwd
>>183
誰が妥当って言ってるんだ?
俺は単にそう書いてると言ってるだけだぞ。

まあ、しきたりで自爆したからごまかしたいんだろうけど (w

186 :デフォルトの名無しさん:2014/04/06(日) 21:05:47.20 ID:frwmbROr
NG推奨ワード:
Qz
STL
ヘッダ
POSIX ←new
片山
hoge

187 :デフォルトの名無しさん:2014/04/06(日) 21:23:14.93 ID:YqB/fCSo
CがNGワードになる日も近いな

188 :デフォルトの名無しさん:2014/04/06(日) 21:28:22.80 ID:5rOAt6qX
>>186
え、いつの間にかSTLとヘッダもアウトになってたのかw
ここは酷いインターネッツですね

189 :デフォルトの名無しさん:2014/04/06(日) 21:39:32.30 ID:uqLF0x8H
>>186
ついでに
スレが荒れるのでCやC++に関することはすべて厳禁

190 :デフォルトの名無しさん:2014/04/06(日) 21:52:35.54 ID:EzHv0eI8
まどろっこしいな
ようは2ちゃんねるの禁止が落としどころだよね

191 :デフォルトの名無しさん:2014/04/06(日) 22:19:16.09 ID:2m7iHXEE
p2使えないから2ch廃止でいいよもう
出先で書き込めなくてもどかしいったらありゃしない

192 :デフォルトの名無しさん:2014/04/06(日) 22:35:34.44 ID:yUhKfMaZ
●は使えるだろ
●が無いとスレ立てできない

193 :デフォルトの名無しさん:2014/04/06(日) 23:14:43.66 ID:2m7iHXEE
浪人ってやつ?
買う気ないからひろゆきの新しい方に期待するわ

194 :デフォルトの名無しさん:2014/04/07(月) 01:28:14.02 ID:AB68SSs6
SYSTEMTIMEの引き算をしたくて
http://stackoverflow.com/questions/8699069/difference-between-two-systemtime-variable
の回答4にある
SYSTEMTIME operator-(const SYSTEMTIME& pSr,const SYSTEMTIME& pSl)
をそのまま使って、

SYSTEMTIME ts,te,tdif;
GetSystemTime(&ts);
Sleep(1000);
GetSystemTime(&te);
tdif = te - ts;

としたら、最後の引き算の行で、
エラー 1 error C2676: 二項演算子 '-' : 'SYSTEMTIME' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)

と出るのですが、解決方法がわかりません。どうしたらよいでしょうか?

195 :デフォルトの名無しさん:2014/04/07(月) 02:54:37.57 ID:LXdO3Noc
>>194
teのアドレス - tsのアドレスをtdifに入れるというおかしな事してる

196 :デフォルトの名無しさん:2014/04/07(月) 04:02:36.25 ID:Yfheg34z
>>194
operator-()の定義かプロトタイプ宣言を
WinMain()だかtmain()だかの前でやれば解決する、と予想

197 :デフォルトの名無しさん:2014/04/07(月) 04:21:05.28 ID:AB68SSs6
皆さん
アドバイスありがとうございました。
>>196
その通りでした。プロトタイプ宣言忘れていました。
無事に動いたのですが、実行結果がおかしいのです。
約1秒の差が計測できると思ったのですが、
tdifの中身を見ると、
wYear 1601 unsigned short
wMonth 1 unsigned short
wDayOfWeek 1 unsigned short
wDay 1 unsigned short
wHour 0 unsigned short
wMinute 0 unsigned short
wSecond 1 unsigned short
wMilliseconds 515 unsigned short
となっていますので

1601年1月1日0時間0分1.515秒
の差ということでしょうか?どういうことでしょうか?

198 :デフォルトの名無しさん:2014/04/07(月) 04:29:51.17 ID:Yfheg34z
>>197
ttp://msdn.microsoft.com/ja-jp/library/x3399a54.aspx

199 :デフォルトの名無しさん:2014/04/07(月) 06:08:42.83 ID:NjqqbTFI
>>197
SYSTEMTIME ってカレンダーの年月日時間みたいなもの。
それらの引き算をカレンダーの年月日時間にするってへんだろ。
結果のカレンダー年月日時間は0年0月0日0時0分1.515秒ですって、カレンダーではありえないだろ
期待する結果は年月日時間で表せる差じゃないか(1年2ヶ月3時間4分5秒違うとか)

200 :デフォルトの名無しさん:2014/04/07(月) 11:35:54.05 ID:uM+gajuN
>>197
SYSTEMTIMEの起点は1601年1月1日0時0分0秒
つまり、ゼロをSYSTEMTIMEとして解釈すると「1601/01/01 0:00:00」になる

201 :デフォルトの名無しさん:2014/04/07(月) 13:13:30.33 ID:8ZhLD5KA
どうでもいいけど、>199は説明が下手だな。

202 :片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/07(月) 14:25:12.80 ID:nfj7Xkns
SystemTimeToFileTimeを使ってSYSTEMTIMEをFILETIMEに変換して、
ULARGE_INTEGERを使って64ビット整数に変換して、引き算をする。

203 :デフォルトの名無しさん:2014/04/07(月) 15:40:44.16 ID:4PSeJxmH
時刻と時間の違いが分かってないタイプ?

204 :デフォルトの名無しさん:2014/04/07(月) 18:59:37.11 ID:iQnUI2e5
>>202
194がやっているのがまさにそれなんだけど、問題は戻り値の型が時間間隔ではなく
時刻を表す型になっていることだから、
>>194 の operator-() の戻り値を __int64 にして v_res=v_right-v_left; 以下を
return v_res; に変えれば100ナノ秒単位の経過時間が得られるようになる。
100ナノ秒じゃ細かすぎるというなら、戻り値を double にして return v_res / 10000.0;
に変えるとか工夫しろ。

205 :デフォルトの名無しさん:2014/04/07(月) 19:23:33.56 ID:BajMmze5
>>202
時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたいから、
SYSTEMTIMEを戻り型にしているんじゃないのか

Winで経過時間を求めるのにSYSYEMTIMEを使うって普通なのか?
違うなら何を使うのが多い?

206 :デフォルトの名無しさん:2014/04/07(月) 19:29:45.40 ID:4vTqmZSq
よく分からんがC++なら<chrono>使えばいいんじゃね?
Win依存でいいならtimeGetTimeとかQueryPerformanceCounterとかがあるし

207 :デフォルトの名無しさん:2014/04/07(月) 20:26:10.88 ID:Y4utMABq
「時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたい」
という要求下で "年" の計算にうるう年の考慮は必要だろうか?

208 :デフォルトの名無しさん:2014/04/07(月) 20:35:46.78 ID:4vTqmZSq
>>207
その辺難しいよね
365日とするか365.2425日とするか365.2422日とするか……
表示を日までに済ませておくのが無難かと

209 :デフォルトの名無しさん:2014/04/07(月) 21:01:58.18 ID:iQnUI2e5
>>208
.NETのTimeSpanクラスはそうなってるね。
内部表現は100ナノ秒刻みの整数値で、ミリ秒、秒、分、時間、日への変換はするが
月、年への変換はしない。

210 :デフォルトの名無しさん:2014/04/07(月) 21:27:01.61 ID:dmj0DO96
>>207
それ以前に月が 30日でいいのかと...

211 :デフォルトの名無しさん:2014/04/07(月) 21:32:53.82 ID:Y4utMABq
>>210
あああああーーーーー
考えるほどマンドクサイっすな

212 :デフォルトの名無しさん:2014/04/07(月) 21:49:28.54 ID:wQYu7k63
>>186
なんでQZが筆頭なんだ?

213 :デフォルトの名無しさん:2014/04/07(月) 21:52:25.42 ID:pviM0T4Q
どう考えても一番の荒らしです

214 :デフォルトの名無しさん:2014/04/07(月) 22:31:32.85 ID:tNhu6rzw
片山やhogeよりPOSIXが上なのかw

215 :デフォルトの名無しさん:2014/04/07(月) 22:33:46.15 ID:4vTqmZSq
質問いい?
switch構文のcase内で変数宣言したら、それについて
「'変数' の初期化が 'case' ラベルによって行われませんでした。」
って言われたんだけどどういうことなの……?
ついでにswitch部分に赤波線が付いて、「制御の転送は次の初期化をバイパスします」
って言われたんだけど何故エラーになるのか意味が分からない。誰か分かる人教えて下さい
(VS2013でコンパイルしている時に発生)

216 :デフォルトの名無しさん:2014/04/07(月) 22:35:47.03 ID:2mFu56Lz
caseだけだとスコープが同じになる
ブロックをつければいい

217 :デフォルトの名無しさん:2014/04/07(月) 22:40:02.07 ID:Y4utMABq
switch () {
case A:
 { // ローカルスコープにしちまう
  int a;
 } break;
case B:
 …
default:
 …
}

218 :デフォルトの名無しさん:2014/04/07(月) 22:41:30.01 ID:4vTqmZSq
>>216
ブロックを付けるって、要するに
case test:
 〜
 break;

case test:{
 〜
 break;
}
にするってことでいいの?

219 :デフォルトの名無しさん:2014/04/07(月) 22:47:22.50 ID:2mFu56Lz
Yes

220 :デフォルトの名無しさん:2014/04/07(月) 23:30:25.89 ID:H5+AU72d
個人的にはbreakは外に出したいな

221 :デフォルトの名無しさん:2014/04/08(火) 00:20:22.54 ID:lvT6VRY6
case test:としたときに
testにおけるのは何?
int a,b,c;
...
switch()
case (b=a+1, c++, C): なんてのでもOK(試してないけど)?

222 :デフォルトの名無しさん:2014/04/08(火) 00:23:17.09 ID:lXmRpq/E
>>221
試せ

223 :デフォルトの名無しさん:2014/04/08(火) 00:32:19.53 ID:zX8m8ach
>>221
ラベルだけだよ

224 :デフォルトの名無しさん:2014/04/08(火) 00:32:44.67 ID:4GqgTU2E
>>221
定数の整数式とscoped enumの値だけ
switch (a) case std::integral_constant<int, 6>::value:;

225 :デフォルトの名無しさん:2014/04/08(火) 13:44:22.59 ID:J+Ne3rG0
最近、よその板で、"「"だけで右を閉じてないのが流行ってるのか
すんげーむずむずするんだが

226 :デフォルトの名無しさん:2014/04/08(火) 14:02:26.18 ID:M2I5N33k
>>225
在日のおまえは知らないだろうが、明治時代からある用法だぞ。

227 :デフォルトの名無しさん:2014/04/08(火) 16:39:02.94 ID:9nnVwB+Q
>>226
(正直鬼物語で見たのが最初だなんて言えない)

228 :デフォルトの名無しさん:2014/04/08(火) 17:27:19.75 ID:DhHmBmSp
エロゲーでは普通じゃないのか?

229 :デフォルトの名無しさん:2014/04/08(火) 18:01:46.09 ID:Agmut9XT
どんな使い方なんだ?
(ry なんかはときどき見るな
閉じていない括弧に違和感を持つのはある意味プログラマらしいか

230 :デフォルトの名無しさん:2014/04/08(火) 18:31:11.83 ID:Bi2RyCEo
カッコつけてんじゃね〜よ

231 :デフォルトの名無しさん:2014/04/08(火) 18:50:35.55 ID:C0aY6nOj
つけてねーよ

232 :デフォルトの名無しさん:2014/04/08(火) 19:05:43.04 ID:Ge61TJlR
case 1+1;
goto 2;
goto 1+1;
goto 2*1;
各環境でナニがドコまで許されるのか興味はあるな

233 :デフォルトの名無しさん:2014/04/08(火) 22:58:16.49 ID:5xZMJR+X
>>229
プログラマは、半開区間が大好きさ!
[0, 4)

234 :デフォルトの名無しさん:2014/04/08(火) 23:04:52.46 ID:9wIzdaaz
>>233
ワロタ

235 :デフォルトの名無しさん:2014/04/09(水) 00:10:02.38 ID:dDyddEcZ
もう全て半角にして英語圏顔文字でも使っとけよ:D

236 :デフォルトの名無しさん:2014/04/09(水) 04:45:08.14 ID:GDCkrjSs
roffとか気持ち悪いよな

237 :デフォルトの名無しさん:2014/04/09(水) 13:15:17.74 ID:/wyRfLaC
>>236
UN*XやるまえにDOSでTeXやってたからあれは意外になんとも
かつては汗でパーサ書いてたっていうから、まあそういうことなら。

238 :デフォルトの名無しさん:2014/04/13(日) 08:17:37.43 ID:7/oWURrR
time関数は1970年からの秒数らしいですが
long型で格納するとなると、68年くらいで限界が来ませんか?
2038年くらいにいろんなプログラムやばいっすか?

239 :デフォルトの名無しさん:2014/04/13(日) 08:24:54.58 ID:2iqAA/H6
2000年問題の時に話題にあがりました 「2038年問題」でぐぐれぇ

240 :デフォルトの名無しさん:2014/04/13(日) 08:30:51.23 ID:7/oWURrR
おーやべえ
でも今からプログラムつくろうとするとtime_tは64bitで定義されてるっぽいですね
3000億年まで安心か

241 :デフォルトの名無しさん:2014/04/13(日) 09:06:00.54 ID:olete8aZ
炎上学習法は要りません

242 :デフォルトの名無しさん:2014/04/13(日) 09:33:49.42 ID:m7xM1FWF
どこが炎上してんだよ

243 :デフォルトの名無しさん:2014/04/13(日) 15:21:37.00 ID:qnyX9I3J
2000年の頃は見えないほど先の話だと思っていたが
既に3分の1消化してるんだな

244 :デフォルトの名無しさん:2014/04/13(日) 18:18:53.37 ID:CtgsENNt
1000年以上先の問題ならまだしも、38年だと分野によっては平気で使われ続けるからな

245 :デフォルトの名無しさん:2014/04/13(日) 18:50:58.03 ID:Am7dEU9n
言わんとしてることはわかるからいいんだけど、64bitでコンパイルしてlongが32bitなのMSのコンパイラぐらいだぞ

246 :デフォルトの名無しさん:2014/04/13(日) 18:52:32.07 ID:P3Ox4abS
互換性を優先したんだろうね

247 :デフォルトの名無しさん:2014/04/13(日) 18:55:12.72 ID:N2UMgO6H
time_tは64bitになってるから許してやれ

248 :デフォルトの名無しさん:2014/04/14(月) 07:18:41.20 ID:CAt5QB21
ttp://ja.wikipedia.org/wiki/%E6%95%B4%E6%95%B0%E5%9E%8B
同じソースでlongが32bitになったり64bitになったりする方が混乱するわ
昔intが16bitになったり32bitになったりで難儀した

249 :デフォルトの名無しさん:2014/04/14(月) 08:17:35.70 ID:XwQYiHbH
typedefせずソースに直接intとかlongとか書いてるの?

250 :デフォルトの名無しさん:2014/04/14(月) 08:28:42.62 ID:iMQET/ga
>>248
つstdint.h(cstdint)
規格仕様上複数マシンで動作できることを重視したから型ごとの制約が緩いのよね
と言うか既出の話題だったわw
http://toro.2ch.net/test/read.cgi/tech/1393539884/61-69

251 :デフォルトの名無しさん:2014/04/14(月) 11:00:15.74 ID:fXV0vjOD
vectorにクラスを格納するのって
#include <iostream>
#include <vector>
class c_myclass
{
public:
    void myfunc(int num)
    {
        std::cout << "myfunc" << num << " が呼び出されました \n";
    }
};
int main()
{
    c_myclass temp;
    std::vector<c_myclass> vec;
    
    for(int i=0; i<10; ++i)
        vec.push_back(temp);
    
    for(int i=0; i<vec.size(); ++i)
        vec[i].myfunc(i);
    
    return 0;
}
このような感じでよろしいでしょうか?
ちなみに
サイズを指定する場合は
std::vector<c_myclass> vec(10);でしょうか?

252 :デフォルトの名無しさん:2014/04/14(月) 11:15:14.08 ID:Kn6UHMuG
よろしいです
しいて言えば
vec.push_back(temp);
より
vec.emplace_back();
の方がよろしいかと思われます

253 :デフォルトの名無しさん:2014/04/14(月) 11:22:23.22 ID:fXV0vjOD
>>252
ありがとうございます
もしよろしければemplace_back()について解説お願いします
リファレンスを見てもよくわからなかったので

254 :デフォルトの名無しさん:2014/04/14(月) 11:23:47.56 ID:Kn6UHMuG
コンストラクタを直接呼び出してくれるpush_backでございます
コピーが発生しないので多少効率的になります

255 :デフォルトの名無しさん:2014/04/14(月) 11:25:50.80 ID:fXV0vjOD
>>254
なるほど

256 :KUSO KOTE ◆unko./w.Osri :2014/04/14(月) 12:36:29.24 ID:8ev4IZFy
>>253
もしc_myclassにc_myclass(bool,double)みたいなコンストラクターがあったら、
emplace_back(true,1.23)とすることが出来て
かつvectorの中の格納領域上に直接c_myclassを作成できる。
と思う(想像)。

257 :デフォルトの名無しさん:2014/04/14(月) 15:28:45.80 ID:MAoTOR9V
emplace*()はいいね。巨大なクラスを連想配列に放り込む時に重宝だよ。

258 :デフォルトの名無しさん:2014/04/14(月) 16:17:06.14 ID:/qNJTuFi
open(2)したディレクトリを直接read(2)する方法ってあります?

259 :デフォルトの名無しさん:2014/04/14(月) 16:37:16.17 ID:oIWmwaCC
日本語でおk

260 :デフォルトの名無しさん:2014/04/14(月) 17:29:53.33 ID:aQsMBHRD
↓ちなみにひろゆきサイドの開発者はめちゃくちゃ臭い

4095 :名無しさん@13周年 :2014/04/14(月) 04:46:02.73 ID:wJLzpOd2P(4)
jimがさくらのクローラを遮断したみたいだな
迂回しても迂回→遮断のイタチごっこは目に見えてるので遮断できない方法でdatを引っこ抜くまでだ
具体的には専ブラっぽい挙動でnetからdat引っこ抜いてscに投げるスクリプト書いてやるからお前らそれブン回せ
たらこにはリクエスト+受け取り+改ざんチェック用のスクリプト書いてやるよ

あー久しぶりにemacs起動するわ
3時間で書いてやる

4209 :名無しさん@13周年 :2014/04/14(月) 09:22:21.15 ID:wJLzpOd2P(4)
あとちょっと書き足してバグとったらexeで配るよ
さしあたりdatの回収は俺がやっとく
C++で書きなおして独自の難読化施してるからnetの奴らにREできるかな?マカフィーでも無理なんじゃないかな

4210 :名無しさん@13周年 :2014/04/14(月) 09:24:13.59 ID:wJLzpOd2P(4)
今の時点で一つ言えるとしたら不特定多数を舐めるなってこと



あー久しぶりにemacs起動するわ()
3時間で書いてやる()

C++で書きなおして独自の難読化施してるからnetの奴らにREできるかな?マカフィーでも無理なんじゃないかな()

不特定多数を舐めるなってこと()

261 :デフォルトの名無しさん:2014/04/14(月) 18:01:44.00 ID:0/p4fR0J
いちいち持ってくるお前も臭い

262 :デフォルトの名無しさん:2014/04/14(月) 19:15:32.34 ID:yacO1o/C
>>258
できるでしょ?readdir(3C)とかは内部ではreadを呼んでる

263 :デフォルトの名無しさん:2014/04/14(月) 20:02:57.67 ID:g31zNjzu
>>262
read(2) の manには

EISDIR fd refers to a directory.

Other errors may occur, depending on the object connected to fd.
POSIX allows a read() that is interrupted after reading some data to
return -1 (with errno set to EINTR) or to return the number of bytes

とある

264 :デフォルトの名無しさん:2014/04/14(月) 20:41:55.55 ID:DVvt3Ia1
最近C++勉強始めたんですが、質問があります。(Cは良く分っているつもりです)。
C++には参照渡しという記述方法があることを知ったのですが、Cのポインタ渡しに
慣れている私としては、参照渡しを使わずにすべてポインタ渡しでコードを記述する
ほうが見易いので、そうしようかと思うのですが、何かデメリットありますか?
参照渡しを使うほうがよい点などありましたら教えてください。

265 :デフォルトの名無しさん:2014/04/14(月) 20:51:36.33 ID:UPYb5gKr
(個人的に思う)一般的に
ポインタで渡す=ヌルが渡ってくる可能性がある、つまり、常にヌルチェックが必要
ポインタで渡す=ヌルが渡せる、この引数はオプション的である

参照で渡す=なんかしらわたってくる、ヌルチェック不要
参照で渡す=この引数は必ず必要である

あと一時変数オブジェクトの寿命の関係とかあった気がするが忘れたw

266 :デフォルトの名無しさん:2014/04/14(月) 21:14:47.05 ID:iMQET/ga
>>264
ポインタ渡しと違い、参照渡しの場合、
・絶対に実体があるので、適当なアドレスが渡って
 不正なメモリアクセスを行うことがない
 また、参照する中身は変更できないので紛れがない
・普通の変数と同じように記述できる。構造体のメンバ関数にも
 アロー演算子ではなくドット演算子でアクセスできる
 また、関数の引数に使った際、呼び出す側としてはいちいち
 アドレスを渡すということを意識せず使用できる
・ポインタと違い参照自体にはメモリ消費がない
こんなところか

267 :デフォルトの名無しさん:2014/04/14(月) 21:17:29.88 ID:lcY87dee
返り値の話ではないとして。
参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。

268 :デフォルトの名無しさん:2014/04/14(月) 21:21:57.27 ID:lEZQ3TFl
メモリ消費がないというのは不適切だろ
インラインで消えたりするが

269 :デフォルトの名無しさん:2014/04/14(月) 21:46:00.21 ID:iMQET/ga
>>268
いや、俺の持ってる本では
「ポインタと違って独自にメモリ領域が割り当てられない」
的なことが書いてあるんだが……違うの?

270 :デフォルトの名無しさん:2014/04/14(月) 21:49:58.13 ID:7APDnn3f
(お前が)(malloc/new等で)と読めなくもないが大丈夫か

271 :デフォルトの名無しさん:2014/04/14(月) 21:55:35.64 ID:buURFUek
初期のC++はC言語へのコンバータで実現してたろ。
参照も内部的にはポインタ動作と変わらないかと。

272 :デフォルトの名無しさん:2014/04/14(月) 22:00:06.15 ID:iMQET/ga
>>271
それって「参照がポインタで実装されてる(ことが多い)」って話じゃなかった?

273 :264:2014/04/14(月) 22:02:44.39 ID:DVvt3Ia1
みなさん解説ありがとうございます。
大変参考になります。
>参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
もう少し詳しく解説お願いします。

274 :デフォルトの名無しさん:2014/04/14(月) 22:04:37.96 ID:iMQET/ga
あとこんなページも見つけた
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958
http://www.osak.jp/program/arg_ref_val.html

275 :デフォルトの名無しさん:2014/04/14(月) 22:18:22.93 ID:msrdBAHC
>>269
通常の実装では、呼び出し側ではスタックにアドレスを積むという点で全く同じだし、
呼ばれる側でもそこを参照するのに違いはないよ。
まぁ、インライン展開で消えれば話は別だけど。
一番のメリットは、(参照先ではなく)参照自体を書きかえられないことだね。
それもまた、ポインタでもconstにすればできるわけだけど。

276 :デフォルトの名無しさん:2014/04/14(月) 22:54:29.26 ID:CAt5QB21
ttp://codepad.org/Qo0ErNs1
この例ではポインタで渡す気が起きない

277 :デフォルトの名無しさん:2014/04/14(月) 23:06:35.99 ID:lcY87dee
>>276
const付けような。

278 :264:2014/04/14(月) 23:14:28.51 ID:DVvt3Ia1
>276
サンプルコードありがとうございます。
>この例ではポインタで渡す気が起きない
すみません、まだよく分らないのですが、ポインタで
void WriteLine(const string *pstr)
{
printf("%s\n", pstr->c_str());
}
のようにすると何か問題があるのでしょうか?

279 :デフォルトの名無しさん:2014/04/14(月) 23:17:14.74 ID:lcY87dee
http://codepad.org/UUMHZZxJ

参照にするとこうかける

280 :デフォルトの名無しさん:2014/04/14(月) 23:20:11.44 ID:i+D5B13r
>>273
++や--の挙動がポインタと参照で違うんじゃね?

281 :デフォルトの名無しさん:2014/04/14(月) 23:32:46.57 ID:lcY87dee
>>273
ポインタでオブジェクト返されると誰がdeleteすべきなのかドキュメント見るか返す関数の中身見るまでわからないよね?
参照にすると返したやつが所有している物の中身を見させて貰ってるってことがわかるからdeleteしなくていいって事がドキュメント見なくてもわかる。

引数でもポインタだと引数で渡されたポインタを内部で保持しておくから呼び出し側でdeleteや中身の変更をしてはだめになるのかとかわからない。

282 :デフォルトの名無しさん:2014/04/14(月) 23:41:59.74 ID:CAt5QB21
>>278
ttp://codepad.org/uAzCCBJQ
ポインタでも書けるしこの例では問題はない
が、やっぱり人に見せると「何で参照使わないの?」と言われそう

283 :デフォルトの名無しさん:2014/04/14(月) 23:54:52.78 ID:73GA0vhp
string *str = new string("hello");
....
delte str;
....
WriteLine(str); //deleteしてるけど、、、ポインタ値は生きてるから アッー

結局、コンテナをうまく使って生ポ(生new)は極力排除しようぜって流れ

284 :デフォルトの名無しさん:2014/04/14(月) 23:59:10.65 ID:lcY87dee
>>282
なんで「何で参照使わないの?」と言われるのかその理由を書かないと意味ないだろ。

たとえば
http://codepad.org/wCMxFlfO
文字列を返す関数と文字列を引数にとる関数があるとする。
参照だったら文字列を返す関数を文字列を引数にとる関数の引数に直接書ける
ポインタだったら一度ローカル変数で受け取ってそのポインタを書かないとだめ

285 :デフォルトの名無しさん:2014/04/15(火) 00:13:55.46 ID:MOmoi8a1
int& a = *(int*)0;
a = 0;

286 :デフォルトの名無しさん:2014/04/15(火) 00:17:57.06 ID:lShoPitp
ポインター操作が目的でなく
null許可を表現させたいわけでもなく
読み取り用途限定の時に
わざわざポインターを使う方が不自然

287 :デフォルトの名無しさん:2014/04/15(火) 00:21:36.20 ID:jMxUSFKT
>>285
一行目がダメコードって一目瞭然じゃないか。
ポインタだったらnullを渡すのが悪いのか?nullチェックせずに代入するほうが悪いのか?になる

>>286
ポインタしかない世界から来た人には多分通じないよ。

288 :デフォルトの名無しさん:2014/04/15(火) 00:25:16.54 ID:hh7KqCRP
生ポ引数/戻り値なんて特別理由がある場合以外は使うなってこった

289 :264:2014/04/15(火) 00:28:56.87 ID:7FIahpja
私なりに結論を出してみたのですが、
参照渡しをするのは、
void WriteLine(const string &str);
みたいに、その関数に値を読み取り限定で渡す場合に主に使う。
ただし、必ずconstを付けておく。

上記以外はポインタ渡しを使う。
で良いでしょうか?

290 :デフォルトの名無しさん:2014/04/15(火) 00:35:43.12 ID:8L+RgIaL
参照はポインタの初心者版みたいなもの。
使い方が分からないのがあえて使わなくていい。

291 :デフォルトの名無しさん:2014/04/15(火) 00:36:31.44 ID:c0zlhsuS
>上記以外はポインタ渡しを使う

いいえ。
その他にもムーブセマンティクスを達成
したいときにも参照を使います。

292 :デフォルトの名無しさん:2014/04/15(火) 00:45:18.87 ID:jMxUSFKT
>>290 っていうC++初心者が書くコードはひどく読みづらいので真に受けたらだめ

293 :デフォルトの名無しさん:2014/04/15(火) 01:27:44.04 ID:PjplhgrG
ageる奴は碌なこと喋んねーな

294 :デフォルトの名無しさん:2014/04/15(火) 03:06:53.30 ID:2JpOUwgl
>>289
漏れも俺様ルールで、const参照は読み取り用、
ポインタは値を変更する時と、使い分けている

295 :デフォルトの名無しさん:2014/04/15(火) 06:05:04.19 ID:sGkhMKKa
>>289
ttp://ideone.com/SIOYc5
なかなかいい例が思い浮かばないが
この例ではconstを付けられないが参照が相応しいと思う

全てに当てはまる使い分けの条件は提示できないので
個人やチームの判断で使い分けするしか

296 :デフォルトの名無しさん:2014/04/15(火) 07:52:53.60 ID:AA0ZYDWw
格納場所という意味で>289が作った関数仕様を実装する場合も、自衛はするべき。
void readSome(Type * const result)
{
// ++result; // これがエラーになってくれる。
}

297 :デフォルトの名無しさん:2014/04/15(火) 08:09:35.12 ID:6lm4j3zL
俺はしないな。
意味的にはそうなのだけれど
C++のconstは真面目に付けると可読性を著しく損なう

298 :デフォルトの名無しさん:2014/04/15(火) 08:59:58.71 ID:Byz6doxp
>>263
うん。262は間違いでした。
調べたらreaddirはgetdents(2)を呼んでた
そりゃそうか。ファイルシステムで構造違うしな

299 :デフォルトの名無しさん:2014/04/15(火) 10:42:12.48 ID:ZiuccpsX
>>296
そのレベルは冗長

300 :デフォルトの名無しさん:2014/04/15(火) 12:47:22.14 ID:tCJ2yelK
参照なら要らないのにね。

301 :デフォルトの名無しさん:2014/04/15(火) 12:54:41.51 ID:dDf7e/l1
値渡しの引数にconstをつけるのはやりすぎな気がする
void f(const int x) なんてしないでしょ

302 :デフォルトの名無しさん:2014/04/15(火) 13:09:58.76 ID:tCJ2yelK
する奴いるよ。きっと>296も同じタイプ。

303 :KAC:2014/04/15(火) 13:26:56.79 ID:OYr23JgA
>>296
なんか違う事書いてるぞ。>289の仕様満たすならconstは*の左。

>>297
どんな所で可読性が落ちるって?
お前がまともに使えないだけじゃないの?

304 :デフォルトの名無しさん:2014/04/15(火) 14:19:33.38 ID:SFbbbO6x
流れぶった切って悪いんですが
>>251
c_myclassがインターフェースクラスを継承している場合は
継承元メンバ(インターフェースクラス)に仮想デストラクタを書いておけば良いのですか?

305 :デフォルトの名無しさん:2014/04/15(火) 14:41:39.21 ID:tCJ2yelK
>>303
>296が言いたいことは、>289の仕様ならconst * string const strだろ。

306 :デフォルトの名無しさん:2014/04/15(火) 14:42:44.92 ID:tCJ2yelK
いけね、Typo。
string const * const strね。

307 :デフォルトの名無しさん:2014/04/15(火) 14:59:38.52 ID:JmWJ8ekL
>>304
違いが分かればよいのだが…
http://ideone.com/w9UqT0

308 :デフォルトの名無しさん:2014/04/15(火) 15:09:29.49 ID:SFbbbO6x
>>307
さらっと確認したので怪しいのですがたぶん
クラスAには仮想デストラクタが無い為に
newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、
クラスBは仮想デストラクタがメンバにあるので
deleteされる際に継承元のデストラクタが呼び出される訳ですよね

そこで、ベクターにオブジェクトを格納する話につながる訳ですが
>>251のc_myclassがインターフェースクラスを継承しているときには
やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?

309 :デフォルトの名無しさん:2014/04/15(火) 15:27:23.32 ID:JmWJ8ekL
だーね

310 :デフォルトの名無しさん:2014/04/15(火) 15:32:30.40 ID:SFbbbO6x
確認しつこくてすいませんが
まとめると>>307のdlvBを
dlvB temp
std::vector<dlvB> obj;
obj.push_back(temp);
みたいにしちゃっておkってことですよね

311 :デフォルトの名無しさん:2014/04/15(火) 18:05:27.38 ID:ef3kTbvB
>>310
そうしたいなら仮想デストラクタとか仮想関数とか関係ない。
コピーコンストラクタを作ればいいだけ。

312 :デフォルトの名無しさん:2014/04/15(火) 18:37:17.89 ID:u428dFct
std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように
多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい

313 :デフォルトの名無しさん:2014/04/15(火) 20:01:11.81 ID:Nbqron3B
仮想デストラクタが必須なのは当然として
vectorに突っ込むケースを考えると
難易度としては
vetcor<Base>
vetcor<Base*>
vetcor<shared_ptr<Base>>
ptr_vector<Base>
こんな感じじゃね?
それぞれ注意点はあるが
一見簡単そうに見える
vetcor<Base>
が一番きつい

314 :デフォルトの名無しさん:2014/04/15(火) 20:12:18.40 ID:MU2KfTCa
>vetcor<Base>
そもそも派生クラスを突っ込めない。
>vetcor<Base*>
所有権がどこにあるのか分からないので論外。
>vetcor<shared_ptr<Base>>
virtualデストラクタ不要で便利。
>ptr_vector<Base>
今更ptr_vector?unique_ptrでいい。

315 :デフォルトの名無しさん:2014/04/15(火) 20:33:50.00 ID:O7xBtcGx
make_uniqueが標準に入らないと、記述量がちょっと面倒

316 :デフォルトの名無しさん:2014/04/15(火) 20:42:49.07 ID:Nbqron3B
>>314
たしかに
デザパタで
知らんかった
流行り廃りとかあるの?デザパタで

317 :デフォルトの名無しさん:2014/04/15(火) 20:49:25.61 ID:aOtL598m
std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?

318 :デフォルトの名無しさん:2014/04/15(火) 20:54:50.82 ID:tBkVUf7m
moveできないから

319 :デフォルトの名無しさん:2014/04/15(火) 23:53:29.68 ID:hh7KqCRP
noncopyableだからだろ

320 :デフォルトの名無しさん:2014/04/15(火) 23:56:04.64 ID:of9IS0B8
ユニポもそうだけど

321 :デフォルトの名無しさん:2014/04/16(水) 00:00:41.11 ID:cUKcFdx2
>>320
すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで

322 :デフォルトの名無しさん:2014/04/16(水) 00:40:07.75 ID:UZj3cAYP
なるほど、unique_ptrの機能はC++11が前提なんですね

323 :デフォルトの名無しさん:2014/04/16(水) 01:04:51.10 ID:RlYL1+PT
>>321
>copyかmoveが出来ないとコンテナには入れられない

ソースは?
vectorについてはその通りだとは思うが

324 :デフォルトの名無しさん:2014/04/16(水) 01:55:04.23 ID:cUKcFdx2
>>323
悪いけど、規格の該当箇所探すのメンドいから↓読んでみて
http://faithandbrave.hateblo.jp/entry/20120418/1334731512

325 :323:2014/04/16(水) 06:52:53.53 ID:gRD8q33D
>>324
23.3.5p2でstd::listは23.2の仕様に従うとなっていて
そこで説明されるemplace_frontはEmplaceConstructibleであることが要求されていて
26.2.1p13のEmplaceConstructibleの定義は
コピー/ムーブを要求していないと読んだのだけれど

326 :デフォルトの名無しさん:2014/04/16(水) 08:18:00.83 ID:ySVTxJz4
古い仕様からアップデートしてない人なんじゃね?

327 :デフォルトの名無しさん:2014/04/16(水) 09:04:15.08 ID:AatfYxHX
>>262
ジジイがしょうわ

328 :デフォルトの名無しさん:2014/04/16(水) 09:05:40.16 ID:AatfYxHX
>>262
ジジイが昭和の知識でレスすんな
つーか、いい加減に死ねよ

329 :デフォルトの名無しさん:2014/04/19(土) 15:31:58.78 ID:9tEZQcT3
順列を列挙しようと思ったのですが、うまく行きません。どこが間違っているのでしょうか
http://codepad.org/WCpyEKL1

330 :デフォルトの名無しさん:2014/04/19(土) 16:05:56.26 ID:j1F3U2CR
>>329
ここ
// for(i=0;i<D && used[i]==0;i++){
for(i=0;i<D;i++){
if(used[i] != 0) continue;

331 :デフォルトの名無しさん:2014/04/19(土) 16:17:09.98 ID:9tEZQcT3
>>330
あw
うっかりでした。ありがとうございます!

332 :デフォルトの名無しさん:2014/04/21(月) 02:08:03.43 ID:myPATJ+I
CYKのプログラム書きたいんだけどいまいちわからんわ

333 :デフォルトの名無しさん:2014/04/21(月) 20:25:21.57 ID:aqBwlWRf
自作のプログラムにboostのregexのlibboost_regex-vc120-mt-sgd-1_55.libを
スタティックリンクして使いたいのですが、あるもうひとつ別のライブラリも
リンクしていてその中にparseという関数があり、.DEFファイルでexportして
います。そうすると、parseという関数が二か所にあるのでエラーするようで、
error LNK2001: 外部シンボル "parse" は未解決です。
となります。良い解決方法ありますか?VS2013です。

334 :デフォルトの名無しさん:2014/04/21(月) 20:28:06.08 ID:FhRn8cH8
もう一つのライブラリはLoadLibraryでロードする

335 :デフォルトの名無しさん:2014/04/21(月) 20:45:39.61 ID:sEf+QBU0
namespaceがあるのに競合するの?
パネーな

336 :デフォルトの名無しさん:2014/04/21(月) 21:03:16.16 ID:nKQE7Rc+
自作の方をLoadLibraryした方が融通利く気がする

337 :デフォルトの名無しさん:2014/04/21(月) 21:33:12.78 ID:GRQWVWO3
衝突の時は別のエラーになると思う

338 :デフォルトの名無しさん:2014/04/21(月) 21:37:25.48 ID:Ugb12/p0
衝突ではなく未解決のシンボルってことは
呼び出し規約の間違いとかかね?

339 :デフォルトの名無しさん:2014/04/21(月) 21:39:13.49 ID:lfASPZAR
定義が見つからないんだろう

340 :デフォルトの名無しさん:2014/04/21(月) 21:49:42.60 ID:bZ7teAnE
extern "C"していないとか
アンダーラインが付いているとか

341 :デフォルトの名無しさん:2014/04/21(月) 21:51:36.46 ID:k3MeFw2G
dumpbin /EXPORTS

342 :デフォルトの名無しさん:2014/04/21(月) 23:02:41.37 ID:aqBwlWRf
すみません、ちょっと説明を間違えていました。自作のDLL (マルチスレッド デバッグ (/MTd))を作成中で、
その中にparseという関数があります。その関数は.DEFでExportしています。boostのregexを使いたいので
#include "boost/regex.hpp" をインクルードして、ビルドすると、そのparseは
libboost_regex-vc120-mt-sgd-1_55.lib で定義されていますというような警告が出てエラーします。
少し調べてみたところ、regexに限らず、boostの関数名と同じ関数を自作のDLLの中に作って、それを.DEF
ファイルに書くと、同じエラー出ました。
たとえば、boost::filesystem::exists()に対して、void exists()という関数を作り、.DEFに書くと
同じエラーします。とりあえず.DEFに書くのをやめると解決するのですが、昨日からboost使い始めたばかりなので
基本的なこと良く分っていません。解決方法ありましたら教えて下さい。
教えていただいたLoadLibraryやextern "C"やdumpbin /EXPORTS は初めてなのでいま調査中です。

343 :デフォルトの名無しさん:2014/04/21(月) 23:24:39.75 ID:sEf+QBU0
>>342
MT,MD,Unicode,SJIS,debug,release,32,64...
うひゃー

344 :デフォルトの名無しさん:2014/04/21(月) 23:26:41.35 ID:p/5mORia
>>342
.defの書き方が間違ってんだろ
ちゃんと=でマングリ名指定してるか?
そもそもLoadLibraryを使ってないのに.defなんて要るのか疑問

345 :デフォルトの名無しさん:2014/04/21(月) 23:44:38.09 ID:bP/zsOii
マングリって卑猥な響きだから「ング」まで書こうなw

346 :デフォルトの名無しさん:2014/04/21(月) 23:46:37.00 ID:lfASPZAR
C++だし名前が被ったからって問題になるとは思えんが

347 :デフォルトの名無しさん:2014/04/22(火) 00:32:10.03 ID:XZpvcXn8
さっぱり分からんけど、boostのlib関数がextern "C"扱いになっているのか

348 :デフォルトの名無しさん:2014/04/22(火) 02:56:45.37 ID:z792onaE
>>342
ビシッと
using namespace boost::filesystem;
using namespace boost::regex;
ってしているか?

349 :デフォルトの名無しさん:2014/04/22(火) 13:53:46.62 ID:z8WHMXPV
boost云々は関係なくてDLLとか装飾名のルールがわかってない
そしてその次は呼び出し規約の罠に嵌るだろう

350 :デフォルトの名無しさん:2014/04/23(水) 08:47:13.64 ID:Fk2AHs0t
マクロをグローバル変数に置き換えたいんですけど、
インクルードガードを使ったヘッダーにグローバル変数を定義すれば使えばexternを使う必要ないし
どこかでグローバル変数の定義を必要もないんじゃないですか?
どうやるのが普通ですか?

351 :デフォルトの名無しさん:2014/04/23(水) 10:08:33.15 ID:PVKzZAxe
状況がよくわからんが、どうやるのが普通かと聞かれればマクロもグローバル変数も使わないのが普通。

352 :デフォルトの名無しさん:2014/04/23(水) 10:32:56.00 ID:Fk2AHs0t
#define ASPECT_RATIO 1.653
でも
const double AspectRatio = 1.653;
でもないとしたら
なにが正解ですか?

353 :デフォルトの名無しさん:2014/04/23(水) 10:37:08.06 ID:jGDL0Z25
もしかしてstaticを知らん人かな

354 :デフォルトの名無しさん:2014/04/23(水) 11:24:29.54 ID:+dMP+eIV
Asperger_ratio

355 :デフォルトの名無しさん:2014/04/23(水) 11:25:41.35 ID:PVKzZAxe
>>352
それらの定義で何が不満なの?

356 :デフォルトの名無しさん:2014/04/23(水) 11:38:28.27 ID:uO48px5M
何がしたいのかわからん
てにをはちゃんと使って

357 :デフォルトの名無しさん:2014/04/23(水) 12:13:19.90 ID:rM84JtQI
.hにはexternつけて宣言
どれかの.cで定義

358 :デフォルトの名無しさん:2014/04/23(水) 18:08:37.36 ID:6DXUFUqF
元がマクロなら実体がいらないはず
C++なら constで問題ない

それとも"変数"にするのが目的なのか

359 :デフォルトの名無しさん:2014/04/23(水) 18:31:38.51 ID:rpCr7euc
ここで__declspec(selectany)で動作保証を得たQが
extern要らない珍説のために降臨です

360 :デフォルトの名無しさん:2014/04/23(水) 20:19:24.40 ID:K3ATFzcJ
質問します。

下記のようなプログラムを作ってみたのですが、バグ(?)が発生しています。

具体的に言いますと、5.6/0.8=7であるはずなのに、「商の整数は・・・」の所が「6」と返されたり、「あまりの結果は・・・」の所が「0.8」と返されたりします。

検索して解決方法を探してみましたが、自分では解決できませんでした。

ご教示よろしくお願いします。

#include <stdio.h>
#include <math.h>

int main()
{
 int shou_int;
 double x=5.6, y=0.8, shou, amari;

 shou = x/y;
 shou_int = (int)shou;
 amari = fmod(x,y);

 printf("商の結果は・・・%f\n",shou);
 printf("商の整数は・・・%d\n",shou_int);
 printf("あまりの結果は・・・%f\n",amari);

 return 0;
}

361 :デフォルトの名無しさん:2014/04/23(水) 20:36:19.28 ID:FOWeiF78
>>360
0.8×6+0.8=5.6 何ら問題ない。
商7、あまり0.0を期待したなら
誤差があるdoubleを使うことが誤り。

http://ideone.com/0NyTzT

362 :KUSO KOTE ◆unko./w.Osri :2014/04/23(水) 21:07:45.02 ID:awWEnTYH
doubleはこういう落とし穴があるので注意されたし。
http://ideone.com/xhrAFz

363 :デフォルトの名無しさん:2014/04/23(水) 21:47:01.45 ID:Md9gKFL1
動的確保について質問です
動的確保をした関数からは確保した配列を他関数に渡せますが
他の関数からは渡せません(Segmentation fault)
なぜでしょうか
また、回避策はありますか

http://codepad/ssrgksbZ

364 :デフォルトの名無しさん:2014/04/23(水) 21:48:24.84 ID:Md9gKFL1
切り貼りしててorg抜け
すみません
http://codepad.org/ssrgksbZ

365 :デフォルトの名無しさん:2014/04/23(水) 21:54:08.65 ID:FOWeiF78
>回避策はありますか
なめてんのか。馬鹿に付けるクスリは無いわボケ

>void initMatrix(int **matrix,
 ↓
int **initMatrix(int **matrix,
matrix = initMatrix(…)

366 :デフォルトの名無しさん:2014/04/23(水) 21:56:11.85 ID:FOWeiF78
まちがえた
>void initMatrix(int **matrix,int m,int
n)
 ↓
int **initMatrix(int m,int n){…}
matrix = initMatrix(m, n);

367 :デフォルトの名無しさん:2014/04/23(水) 22:03:51.85 ID:WNesHxZT
>>366
なるほど
修正したところうまく動きました
ありがとうございます

初心者でよくわからないのですがなぜセグフォになるのでしょうか
関数が終わってしまうと自動的に開放されてしまうのですか?

368 :デフォルトの名無しさん:2014/04/23(水) 22:05:34.00 ID:K3ATFzcJ
>>361-362
そういう仕様(?)なんですね。
回答していただきありがとうございます。

369 :デフォルトの名無しさん:2014/04/23(水) 22:05:58.79 ID:FOWeiF78
>>367
関数呼び出し側と呼ばれた先でそれぞれ
printf("%p\n", matrix);
して出直せ

370 :デフォルトの名無しさん:2014/04/23(水) 22:07:22.97 ID:FOWeiF78
誤: printf("%p\n", matrix);
正: printf("%p\n", &matrix);
俺が出直してくるわボケ

371 :デフォルトの名無しさん:2014/04/23(水) 22:17:03.67 ID:WNesHxZT
in initMatrix: [matrix] == 0x1f70010
in main: [matrix] == (nil)

開放されたという認識であっていますか

372 :デフォルトの名無しさん:2014/04/23(水) 22:39:21.12 ID:D69Yihbi
Asperger_ratio = 100%

373 :デフォルトの名無しさん:2014/04/23(水) 22:54:49.37 ID:SZamVfz1
>>370
あ,なるほど
そういうことでしたか
これだと値渡しと一緒ということですね
理解しました
ありがとうございました

374 :デフォルトの名無しさん:2014/04/23(水) 22:58:31.24 ID:6UzUL/o1
>ID:FOWeiF78
口調何とかしろ、それ以前にまずは落ち着け
>ID:Md9gKFL1=ID:WNesHxZT
>>366のように、ポインタを引数にするのではなく返り値をポインタにするのが常道

375 :デフォルトの名無しさん:2014/04/23(水) 23:06:33.34 ID:h/mD0R6k
結果反映を 引数側への作用 として実装しなければならないのなら
やり取りしたい型の {C++ なら 参照} {Cなら ポインタ}

やり取りしたい型 TYPE

呼び出し元変数
TYPE a;

C++
関数 func_cpp(TYPE& arg);
呼び出し func_cpp(a);

C
関数 func_c(TYPE* arg);
呼び出し func_c(&a);

376 :デフォルトの名無しさん:2014/04/23(水) 23:20:22.44 ID:ThiOTjLk
そういうのはC++向けにラッパー書くものじゃね

377 :デフォルトの名無しさん:2014/04/23(水) 23:42:39.30 ID:6UzUL/o1
>>376
そもそもC++ならvectorあるけどな……

378 :デフォルトの名無しさん:2014/04/24(木) 00:40:47.85 ID:duqxO9nN
>>367
セグフォあーだこーだの前に、超シンプルにして
int a = 1;
関数change_aでこの変数aを100に書き換えたい。
void change_a(???){???}
?のところどうしたら良いと思う

379 :デフォルトの名無しさん:2014/04/24(木) 02:25:11.42 ID:V/BmNssB
>>371
「matrixは」解放されてるな、malloc()で得た領域は解放されていないが

#include <stdio.h>
void f(int arg) { arg = 2; }
int main() {
int v = 1;
f();
printf("%d\n", v); // さて、ここで表示される数は?その理由は?
return 0;
}

380 :デフォルトの名無しさん:2014/04/24(木) 02:54:34.67 ID:AklGWvZ+
int **matrix;

initMatrix(&matrix, ・・・)
showMatrix(sxmatrix)
・・・
って動作をしたかったんだろな

381 :デフォルトの名無しさん:2014/04/24(木) 02:55:20.80 ID:AklGWvZ+
sxはゴミだ忘れてくれ

382 :デフォルトの名無しさん:2014/04/24(木) 04:56:14.66 ID:zfDiDIb5
>>364
無意味なcastすんな

メモリ管理できねえならC++でかけ
http://codepad.org/BuDsQKHX

383 :デフォルトの名無しさん:2014/04/24(木) 08:43:35.64 ID:urYv0y/c
MatrixT initMatrix(size_t m,size_t n) {  MatrixT matrix;
 return matrix;
}
これってNRVOを期待してるけど
最適化されなかったら大ダメージ?

384 :383:2014/04/24(木) 08:47:09.71 ID:urYv0y/c
ああ、ムーブコンストラクターがあれば
大した問題ではないな。失礼

385 :デフォルトの名無しさん:2014/04/24(木) 13:07:39.50 ID:f/UtlFnw
多次元配列が絡んだ場合がよくわかっていないようです
勉強してきます

>>378
void change_a(int *a){ *a = 100; }
>>379
1
値渡し
vの値をf()のargにコピーしているだけ

386 :デフォルトの名無しさん:2014/04/24(木) 13:11:34.00 ID:Z31Ilie8
× vの値をf()のargにコピーしているだけ
○ 変更しているf のargはvとは別の変数(値は呼び出し時のvのコピー)であるため

387 :デフォルトの名無しさん:2014/04/24(木) 13:17:20.61 ID:AklGWvZ+
void f(int arg)なのに呼び出しはf()かよ
ってのはおいといて

f(v)であったとしても
int arg = v;
arg = 2;
return;
と同義だからな

388 :デフォルトの名無しさん:2014/04/24(木) 18:51:35.45 ID:UcaZdIF2
>>387
>呼び出しはf()かよ

f()が呼び出しだなんて誰か言ったっけ。
Cでの宣言(引数は言及しない関数の宣言)を使って
特定の関数のことを指しているのではないの?

389 :デフォルトの名無しさん:2014/04/24(木) 19:07:27.89 ID:2icztRE+
文意は >>379 中のコードの話だと思われる

390 :デフォルトの名無しさん:2014/04/24(木) 20:26:13.24 ID:oR64+xqp
>>385
じゃ
int* pa;
のpaを関数内で書き換えときは?
そして int** ppa;
のppaを関数内で書き換えるときは?

391 :デフォルトの名無しさん:2014/04/24(木) 20:30:38.78 ID:AklGWvZ+
>>390
お前は宣言する時にわざわざ
int a, b;
int* c, *d;
とやっているのか

int a, b, *c, *d;じゃないのか

392 :デフォルトの名無しさん:2014/04/24(木) 22:15:41.81 ID:oR64+xqp
宣言....

393 :デフォルトの名無しさん:2014/04/24(木) 22:25:22.75 ID:tXCIarBm
この場合は定義だね、おっと、 extern は‥‥とかいう信者が湧いてくる

394 :デフォルトの名無しさん:2014/04/24(木) 23:38:14.25 ID:V/BmNssB
>>387
すまんコンパイル通さずにレスした俺が悪かった、修正ありがとう…

要するに、>>364 ではポインタで分かりにくくなってるだけで
起きてるのはそれと同じことなんよね

395 :デフォルトの名無しさん:2014/04/25(金) 00:05:21.23 ID:fXiUYsOQ
>>391
> int a, b, *c, *d;じゃないのか

こんな書き方する奴、まだいるのか

396 :デフォルトの名無しさん:2014/04/25(金) 00:30:55.96 ID:VLxq923M
>>391は普通にそうしているんだろ

397 :デフォルトの名無しさん:2014/04/25(金) 01:12:44.63 ID:k40O+kcb
どっちもでいいよ。
使用するintを1行で書きたいんでしょ。

398 :デフォルトの名無しさん:2014/04/25(金) 01:52:47.62 ID:KcORG+H/
そもそも関数の先頭で未初期化変数定義するみたいな奴なんてまだいるのか

399 :デフォルトの名無しさん:2014/04/25(金) 01:54:09.50 ID:m07o/u+5
そりゃいるでしょうね
コンパイラを選びますし

400 :デフォルトの名無しさん:2014/04/25(金) 02:08:33.86 ID:KcORG+H/
>>399
コンパイラのせいにして思考停止しているのか?
古い仕様のCで書くにしてもスコープ切ればよいだけで
未初期化変数、変数の使いまわしなんてバグの温床だからやっちゃダメ

401 :デフォルトの名無しさん:2014/04/25(金) 02:39:15.54 ID:m07o/u+5
> 古い仕様のCで書くにしてもスコープ切ればよいだけで
Cで書かれたメジャーどころでそんなイディオム使ってるのって存在するの?
そんな規約に出会った事はないし見たこともないのだが。

402 :デフォルトの名無しさん:2014/04/25(金) 02:52:23.74 ID:IKT5NePF
そんな古いコンパイラ使わされるとか苦行ですね。
どんな業界で残ってるんですか?
その業界には絶対に近づかないでおこうと思うので後学のために教えていただけると有り難いです。

403 :デフォルトの名無しさん:2014/04/25(金) 03:53:59.11 ID:VL+oWFa1
必要無いのに初期化とか工程増えるだけやん

404 :デフォルトの名無しさん:2014/04/25(金) 04:53:32.31 ID:DUkBiaE/
gcc に 未だに -pedantic オプションが存在していることを考えるんだ!

405 :デフォルトの名無しさん:2014/04/25(金) 07:38:35.04 ID:IKT5NePF
>>403
初期化の必要がないってどんなとき?

406 :デフォルトの名無しさん:2014/04/25(金) 07:54:41.16 ID:VHgb1LJP
int a;
(分岐して分岐先でそれぞれ代入)

407 :デフォルトの名無しさん:2014/04/25(金) 07:56:53.20 ID:jPmvuOB6
そんなところではろくなエディタやツールもないだろうし
空スコープの濫用でうっかり予期せぬ行連結かましたりする方がこわい

408 :デフォルトの名無しさん:2014/04/25(金) 08:02:41.14 ID:5CU5NLZq
また随分な珍説が出てきたな。

409 :デフォルトの名無しさん:2014/04/25(金) 08:20:24.78 ID:4HugTnIc
>>402
教えてやろう。
お前の周りの家電のマイコンファームウェアだ。
ifやforと同じくらいスコープのネストが深くなるのが基本。

410 :デフォルトの名無しさん:2014/04/25(金) 12:07:55.03 ID:/pxP7/DV
自動変数の領域をスコープ外れた時点で回収するコンパイラ少ないでしょ
少なくともオレは見たことない
組み込みこそスタック領域は貧弱だろ

411 :デフォルトの名無しさん:2014/04/25(金) 12:45:07.65 ID:4HugTnIc
回収っていうか、スコープはずれたら別のスコープの
変数に割り当てられるだけ。
例えばaとbは同じアドレスになる。
デストラクタとかないから、bの時点でaの値が
そのまま残ってる。
{ int a = 100; }
{ int b; }

412 :デフォルトの名無しさん:2014/04/25(金) 12:51:13.14 ID:jPmvuOB6
>>410
最適化で省略してるだけじゃね

413 :デフォルトの名無しさん:2014/04/25(金) 13:14:30.62 ID:TvmR/CLK
規格できまっている挙動ではないし不毛だな

414 :デフォルトの名無しさん:2014/04/25(金) 13:42:24.28 ID:IMABWYJa
だな、>>411 なんてアドレス同じ以前になにもしない可能性が高いし。

415 :デフォルトの名無しさん:2014/04/25(金) 13:43:29.17 ID:B1sFbtmb
>>410
回収ってメモリのことだと思うが
そもそもスコープに入るときに確保されたものじゃないから
スコープ抜けるときに回収しないのは当然

416 :デフォルトの名無しさん:2014/04/25(金) 14:47:59.37 ID:VL+oWFa1
>>414
例えなんだから他は省いてるだろ

417 :デフォルトの名無しさん:2014/04/25(金) 15:27:09.22 ID:KcORG+H/
下等で奇怪、見慣れたコードとはまるで違うとおぼしきモノ達。
それら異形の一群を、ヒトは古くから畏れを含み、いつしか総じて“バグ”と呼んだ。

418 :デフォルトの名無しさん:2014/04/25(金) 19:07:14.27 ID:DUkBiaE/
単にスタックポインタが動くだけなのに回収とか‥‥

419 :デフォルトの名無しさん:2014/04/25(金) 19:08:46.41 ID:ldQxBRm0
そもそも回収という言葉は何を意味するのか

420 :デフォルトの名無しさん:2014/04/25(金) 22:24:27.23 ID:NLMkqq4l
.cppの拡張子でc言語を使いたいのですが(関数のオーバーロードが出来る等 便利な機能があるので)
c++で拡張された部分を使わなければmallocを用いても平気でしょうか?

421 :デフォルトの名無しさん:2014/04/25(金) 22:36:21.02 ID:ldQxBRm0
拡張が見極められるならいいんじゃね

422 :デフォルトの名無しさん:2014/04/25(金) 22:36:57.12 ID:mwVDX3LY
ボクは平気です

423 :デフォルトの名無しさん:2014/04/25(金) 22:37:35.91 ID:jPmvuOB6
言ってることがハチャメチャ

424 :デフォルトの名無しさん:2014/04/25(金) 22:41:48.11 ID:NLMkqq4l
>>423
自分でも言ってて ん?って感じなんですが
for(int i; ; ++i)
みたいなものだとか
結構限定的に使うって感じなんですが
大まかには std空間とクラスを使わない

もっと言うと.cのものを.cppにかえちゃっても大丈夫でしょうかみたいな感じですかね...

425 :デフォルトの名無しさん:2014/04/25(金) 22:44:37.36 ID:I0yUpS7C
C++ で、新たに予約語になったものが、
たまたまCで使われてると、書き換えが必要になる (new とか delete とか)

426 :デフォルトの名無しさん:2014/04/25(金) 22:44:57.28 ID:XFGUZTlf
C経験者ですが例外・テンプレート・クラスを除く
C++の便利な機能を使いたいです。
C++コンパイラーを使ってCのスタイルでmallocを用いてもよかですか?

427 :デフォルトの名無しさん:2014/04/25(金) 22:45:39.98 ID:NLMkqq4l
bool型があったりとか(intで代用すれば問題ないのですが)
//でコメントがサポートされてないのもあるし
cppのおいしい部分だけ使いたいんですよね...

428 :デフォルトの名無しさん:2014/04/25(金) 22:46:59.12 ID:vKWRVcWD
>>426
宜しいんじゃござんせんか?

429 :デフォルトの名無しさん:2014/04/25(金) 22:49:02.72 ID:vKWRVcWD
>>427
>bool型があったりとか(intで代用すれば問題ないのですが)
C99にもそうでない環境でも、大抵stdbool.hが使えると思いますが。

>//でコメントがサポートされてないのもあるし
今時、そんな例外殆どないでしょう。そもそも、普通C99

430 :デフォルトの名無しさん:2014/04/25(金) 22:50:46.85 ID:NLMkqq4l
>>429
すんません
ちょっと極端に言いたかっただけです

431 :デフォルトの名無しさん:2014/04/25(金) 22:53:19.80 ID:LtcOoigK
>>426
いわゆるbetter Cか……別に良いんじゃない?
ただ、mallocじゃなくてnew使おうな
それに、例外・テンプレート・クラスはC++の旨味の大部分だったりするけど大丈夫?
(STLは例外・テンプレート・クラスによる産物なので使わないって意味でOK?)

432 :デフォルトの名無しさん:2014/04/25(金) 23:15:36.79 ID:JcA2jKFr
>>426
むしろ便利なC関数を使えるのがC++の利点だと思う
printfの代わりにcoutしかなかったら間違いなくハゲるし、
mallocの代わりにchar配列をnewするとか、やってられんよ

433 :デフォルトの名無しさん:2014/04/25(金) 23:18:06.68 ID:ldQxBRm0
coutはそうだけどmallocじゃなくnewしようよ
後でオーバーロードしたくなったりするじゃんね

434 :デフォルトの名無しさん:2014/04/25(金) 23:22:28.07 ID:LtcOoigK
>>432
>printfの代わりにcoutしかなかったら間違いなくハゲる
確かにマニピュレータ使い倒して書式設定するのは慣れないとキツいかもね
でもただ表示させたいだけならcout(ストリーム処理)の方が修正も楽じゃん?
>char配列をnewする
悪いことは言わないからstring使っとけ

435 :デフォルトの名無しさん:2014/04/25(金) 23:31:47.30 ID:vKWRVcWD
まぁ、std::stringの代わりにstd::vector<char>を使うこともあるが。
streamのいい点はstd::complexでも分かるように、自作のクラスも階層的に
一度出力処理を書いておけば事が足りる点だな。

436 :デフォルトの名無しさん:2014/04/26(土) 00:07:53.16 ID:4cZNGc28
初心者に対して「mallocじゃなくてnewを使え」とだけしか言わないと、free()使った
ままだったりdelete[]使わなかったり、コンパイルエラーにならないところではまりそう。

437 :デフォルトの名無しさん:2014/04/26(土) 00:14:02.92 ID:2mPnYH20
その手の馬鹿は何度も何度もハマればいいんだよ

438 :デフォルトの名無しさん:2014/04/26(土) 00:19:25.71 ID:LrSvGOM8
malloc が駄目ならalloca を使えば良いじゃない

439 :デフォルトの名無しさん:2014/04/26(土) 00:21:45.69 ID:e4eB3nqK
大抵その時は動いてしまうからたちが悪いんたよ。

440 :デフォルトの名無しさん:2014/04/26(土) 00:54:22.87 ID:TYiKquMH
VC使いに多いかと。
私も平気にfreadとか使ってました。

441 :デフォルトの名無しさん:2014/04/26(土) 01:00:10.95 ID:LAXHDRsh
>>439
ガシガシ使わないとそうそう問題にはなりにくいからな……>メモリーリーク

442 :デフォルトの名無しさん:2014/04/26(土) 01:23:39.24 ID:RUZS612/
こんなコードみつけたんだけど
static const LPCTSTR list[] = {TEXT("AAA"),TEXT("BBB"),TEXT("CCC")};
LPCTSTRの前にconstつけるのと、つけないのでどんな変化があるんですか?

443 :デフォルトの名無しさん:2014/04/26(土) 01:35:06.71 ID:rnp+GXdW
LPCTSTRにコンストはいってるか?
そうだとしても明記したかったんだろ。

444 :デフォルトの名無しさん:2014/04/26(土) 01:42:16.09 ID:fIjhv7f7
list[0]++;

445 :デフォルトの名無しさん:2014/04/26(土) 07:44:36.86 ID:fzTmiJwL
>>441
malloc()なんて裸でつかうもんじゃないよ

446 :デフォルトの名無しさん:2014/04/26(土) 07:47:28.76 ID:fKMdaZRq
// main.c
int main() {
Test test;
test.func();
}

// test.h
class Test {
void func();
};

// test.cpp
void Test::func() {
Test2 tes2;
test2.func2();
}

// test2.h
class Test2 {
void func2();
};

// test2.cpp
void Test2::func2(){
printf("hello\n");
}

447 :デフォルトの名無しさん:2014/04/26(土) 07:50:59.21 ID:fKMdaZRq
というソースコードがあったときに以下のようなmakefileを書きました.

// makefile
main.o : main.cpp
g++ -c main.cpp
test.o : test.cpp
g++ -c test.cpp
test2.o : test2.cpp
g++ -c test2.cpp

libtest2.a : test2.o
ar crsv libtest2.a test2.o
libtest.a : test.o libtest2.a
ar crsv libtest.a test.o libtest2.a

program : main.o libtest.a
g++ -o main main.o libtest.a

448 :デフォルトの名無しさん:2014/04/26(土) 07:52:03.99 ID:FDgGm5F+
malloc使うといけないのか?

449 :デフォルトの名無しさん:2014/04/26(土) 07:56:41.06 ID:fKMdaZRq
ここで,make programすると,Test2::func2がundefined referenceとなってしまいます.
この理由を教えて頂けないでしょうか?

自分では,ar crsv libtest.a test.o libtest2.aでは,Test::funcとTest2::func2が
紐づかないのかなと考えているのですが,,,

尚,makefileの最終行をg++ -o main main.o libtest.a libtest2.aとすれば
成功することはわかっています.

450 :デフォルトの名無しさん:2014/04/26(土) 08:04:58.64 ID:H4OEZVXF
不思議だねw

451 :デフォルトの名無しさん:2014/04/26(土) 08:14:52.42 ID:qVfVXmNl
以下のコードがコンパイル出来ないのです。
std::make_sharedの引数にthisポインタを使用していることが問題っぽいのですが。。。
どなたかC++にお詳しい方、どうか御教授くださいまし。

#include <iostream>
#include <memory>

class T;
class TS;
class TS1;
class TS2;

class TS
{
public:
virtual ~TS() {}
virtual void change() {};
};

class T
{
public:
T() { ts_ = std::make_shared<TS>(); }
void f1() { ts_ = std::make_shared<TS1>(this); } // <= ここと
void f2() { ts_ = std::make_shared<TS2>(this); } // <= ここに問題がありそうなんです。
void ft() { ts_->change(); }
private:
std::shared_ptr<TS> ts_;
};

452 :デフォルトの名無しさん:2014/04/26(土) 08:16:25.20 ID:qVfVXmNl
>>451の続きです

class TS1 : public TS
{
public:
TS1(T* t) : t_(t) {}
virtual ~TS1() {std::cout << "TS1 is dead" << std::endl; }
virtual void change() { t_->f2(); }
private:
T* t_;
};

class TS2 : public TS
{
public:
TS2(T* t) : t_(t) {}
virtual ~TS2() {std::cout << "TS2 is dead" << std::endl; }
virtual void change() { t_->f1(); }
private:
T* t_;
};

int main(void)
{
T t;
for (int i = 0; i < 20; i++) {
std::cout << i;
t.ft();
}
std::cout << "END" << std::endl;
}

453 :デフォルトの名無しさん:2014/04/26(土) 08:19:13.28 ID:H4OEZVXF
エラーメッセージは?

454 :デフォルトの名無しさん:2014/04/26(土) 08:22:01.61 ID:qVfVXmNl
shared_ptrに関するエラーが200行以上出てきます...

455 :デフォルトの名無しさん:2014/04/26(土) 08:27:27.83 ID:BINT6LGE
クラスも使わないbetter C利用者に対して
mallocの代わりにnewを使えというやつはバカ。
エラー処理の考え方が根本的に違って大きな見直しが必用になるのだから
過剰なものを「こちらがいいんだ!」と押しつける
ありがた迷惑

456 :デフォルトの名無しさん:2014/04/26(土) 08:57:11.02 ID:qVfVXmNl
すいません >>451 >>452です。
自己解決しました。

単純にstd::make_shared<TS1>とstd::make_shared<TS2>を呼び出す前に
TS1とTS2の定義がなされてなかったためエラーが出ただけでした。

あまりにも長いエラーメッセージだったのでとんでもないことをしでかしているのかと焦って質問したのですが、
なんともないような話でした。
すいません。。。 > <

457 :デフォルトの名無しさん:2014/04/26(土) 09:17:48.18 ID:oTpRF7L2
make_sharedにthisって根本的に間違ってるぞ。

458 :デフォルトの名無しさん:2014/04/26(土) 09:23:24.24 ID:e4eB3nqK
>>456
単にメンバー内のクラスに持ち主の参照を持たせたいだけだとおもう。

>>455
プリミティブ型なら文句は言わんがC++の構造体とかもmalloc使うのは嫌な匂いがするな。
mallocしか使えないなら大人しくC言語使ってた方がいいんじゃね?
そもそもクラス使わないC++に何のメリットがあんの?

459 :デフォルトの名無しさん:2014/04/26(土) 09:29:41.92 ID:oTpRF7L2
ああ、単にコンストラクタの引数ってだけか

460 :デフォルトの名無しさん:2014/04/26(土) 12:45:37.15 ID:LAXHDRsh
>>458
>クラス使わないC++に何のメリットがあんの?
俺も同意見だが、覚えるのが大変だから覚えない、ってことじゃね?
http://www.kijineko.co.jp/tech/betterc/1

461 :デフォルトの名無しさん:2014/04/26(土) 13:05:57.99 ID:dMJ+hsKf
>>442
list[] 自体が const になるよ。

462 :デフォルトの名無しさん:2014/04/26(土) 13:10:59.56 ID:dMJ+hsKf
>>426
その条件を守っている限りは、問題ないと思いうよ。
*.c と混在させる場合は外部リンケージに注意ね。

463 :デフォルトの名無しさん:2014/04/26(土) 13:12:17.01 ID:+AzHArIu
C++の場合、構造体もクラスの一種だから
コンストラクタやデストラクタその他メソッドがあっても普通のことで
だから「構造体ならmalloc()でもいい」ってのは言えないんよね

…だから、その構造体が自分が管理するものであって
C形式の構造体としてのみ定義されるのなら、かなあ

上にも書かれてる通り、malloc()と違いnewのそれは例外になるから
例外処理を知らない人にはその場で強制終了みたいなもんなんよね
…まあメモリすら確保できないんなら、大概は強制終了で良いような気もするがw

464 :デフォルトの名無しさん:2014/04/26(土) 15:11:50.98 ID:au4nADwa
mallocの件は、単なるメモリ領域を確保したいような場合に、C++なら
newよりもシンプルな手段を取れるってことだろう。
例外じゃなく返り値で判定できるのもいいところ。
当たり前だけど、C++のオブジェクトをmallocで確保するようなことはしないほうがいい。

465 :デフォルトの名無しさん:2014/04/26(土) 15:29:44.95 ID:e4eB3nqK
>>460
なんだ甘えか。
だったらC言語使ってろよって話ですね。
C++の案件にCの知識だけでずっとやっていこうとか思ってるならしね。
>>464
型を決めずに単なるメモリ確保する事って殆ど無いだろ。
例外が嫌ならせめてnew(std::nothrow)使え。それでも例外発生するときはあるがその時はmallocで代替出来ないときだ。

466 :デフォルトの名無しさん:2014/04/26(土) 15:36:17.91 ID:EyRxebkg
何熱くなってるのか知らんが
C++はベターCとしても使えるようになってるんだしmalloc/free使ってもいいだろ
ここの質問者はプログラミング専門とは限らないんだし

467 :デフォルトの名無しさん:2014/04/26(土) 15:41:00.49 ID:ztZgog+i
windows7の32bit VS2013pro無償評価版使用で以下のエラーが出るので
どこをいじったらいいか教授願います

error RC2104: undefined keyword or key name: C:\asukalib-master\asukalib-master\AsukaLib.rc 99 1 AsukaLib

https://github.com/naka2/asukalib ソース一式
https://github.com/naka2/asukalib/blob/master/AsukaLib.h
https://github.com/naka2/asukalib/blob/master/resource.h

468 :デフォルトの名無しさん:2014/04/26(土) 15:46:49.33 ID:rnp+GXdW
AsukaLib.rc 99 1 で、AsukaLibがundefined keyword or key nameでは

469 :デフォルトの名無しさん:2014/04/26(土) 15:49:33.08 ID:e4eB3nqK
>>466
いや、だからクラスも使わないC++の何がベターなの?
メリットない使い方してmalloc使うことによって落とし穴にハマるぐらいならC言語使えばいいじゃん?C++覚える気もないみたいだし?

470 :デフォルトの名無しさん:2014/04/26(土) 15:58:18.06 ID:au4nADwa
C++信者はこれだから・・・。
例えば、Cの文字列処理は初心者泣かせなので、文字列処理のみ
std::stringを使うのはありだよ

471 :デフォルトの名無しさん:2014/04/26(土) 16:06:00.04 ID:e4eB3nqK
>>470
例外、テンプレート、クラスを使わないって前提で話してたんだけど?
std::string使う時点で全てに当てはまりますやん

472 :デフォルトの名無しさん:2014/04/26(土) 16:24:09.22 ID:EyRxebkg
>>469
質問者が「関数オーバーロード」を上げてるでしょ
たとえ「それだけ」であっても便利だと思うけど
引数型ごとに関数名変えるのは確かに面倒だし

473 :デフォルトの名無しさん:2014/04/26(土) 16:27:43.67 ID:dMJ+hsKf
>>469
基本的には、とにかくやってみろ、でいいんじゃね。
本人が制限つけた上でオーバーロード機能を使いたいって言ってるだけなんだから。
仕事じゃないんだから、そこまで全力で反対しなくても。

474 :デフォルトの名無しさん:2014/04/26(土) 18:19:37.24 ID:LAXHDRsh
>>466
ベターC的な要素って大抵最新のCには実装されているんだよな(例:ブロックの途中で宣言)

関数オーバーロードとかのようにほんのつまみ食いしかしないってんなら知らん
でもまあstd::stringとかstd::vectorとかはちょっと覚えるだけで楽できる機能の代表だったり……

475 :デフォルトの名無しさん:2014/04/26(土) 18:37:04.64 ID:Vsr2O9eZ
>std::stringとかstd::vectorとかはちょっと覚えるだけで楽できる

例外安全はくそくらえってことですねわかります

476 :デフォルトの名無しさん:2014/04/26(土) 18:48:00.90 ID:JLcEd4yY
考慮する必要がどこにある

477 :デフォルトの名無しさん:2014/04/26(土) 19:22:58.63 ID:pdO++Zde
バッファオーバーランに比べればどうということはない

478 :デフォルトの名無しさん:2014/04/26(土) 19:30:11.19 ID:e4eB3nqK
std::vector、std::stringを使っただけで例外安全じゃなくなるわけでもなし。メモリ確保に失敗なんていう致命的な例外発生したなら大抵はそのまま終了でいいんじゃないかと思う。

そもそもC言語だけ使ってたら例外と無縁で居られるかと言えばそうでもないし、例えばWindowsだといろんなWin32APIがC言語で使ってても例外出す(SEH)。

479 :デフォルトの名無しさん:2014/04/26(土) 19:40:11.42 ID:TksPWY/c
kuso *p = (kuso *)malloc(sizeof(kuso)*100);

vector<int> a(100); // ここで例外出たらどうすんの

free(p);

480 :デフォルトの名無しさん:2014/04/26(土) 19:51:25.71 ID:e4eB3nqK
>>479
そのままプロセス終了してなんの問題もないじゃん。

481 :デフォルトの名無しさん:2014/04/26(土) 19:56:45.35 ID:ahYJ/99m
つまり例外安全はくそくらえってこと

482 :デフォルトの名無しさん:2014/04/26(土) 19:58:16.52 ID:e4eB3nqK
はあ?
外に例外出さない事が例外安全ってわけじゃないぞ?

483 :デフォルトの名無しさん:2014/04/26(土) 20:01:51.06 ID:ahYJ/99m
>>478
>Win32APIがC言語で使ってても例外出す(SEH)
参考までに、例外を出すAPIは何?

484 :デフォルトの名無しさん:2014/04/26(土) 21:06:09.66 ID:LAXHDRsh
>>482
例外安全の段階:
[1]不送出保証→そもそも例外を外に出さない
[2]強い例外安全性→失敗しても副作用を起こさず、全データは元の値を保持
[3]基本的例外安全性→失敗すると副作用が起こるかもしれないがデータは有効な値である

485 :デフォルトの名無しさん:2014/04/27(日) 09:02:09.27 ID:jKbi43u9
>>474
> 関数オーバーロードとかのようにほんのつまみ食いしかしないってんなら知らん

恥ずかしくない?
ちょっと ROM ってなよ。

486 :デフォルトの名無しさん:2014/04/27(日) 10:26:32.60 ID:GHcWHbCh
>>483
InitializeCriticalSection

487 :デフォルトの名無しさん:2014/04/27(日) 13:12:36.77 ID:lkIW61dB
>>483
int a = 1, b = 0, c;
c = a / b; // SEH発生。

RaiseExceptionでもSEH起こせる。

488 :デフォルトの名無しさん:2014/04/27(日) 13:50:54.86 ID:t1mtJyDY
>>469
流石にクラス使っちゃうとbetterCどころかC++でしか無いと思うが…

>>474
そもそもbetterCって言葉自体が昔のCで生まれた言葉だからな
まあ、現代ではC++環境をC言語として使わざるを得ないケースもある
その結果C99ではなくbetterCに成らざるを得ないって事情もあるけど

489 :デフォルトの名無しさん:2014/04/27(日) 15:25:31.54 ID:ysde5Cmk
>>487
undefined behaviorの挙動や
明示的に例外だすAPIの話をされてもねぇ

490 :デフォルトの名無しさん:2014/04/27(日) 15:25:43.37 ID:XlPRquUK
SEH の __try 〜 __finally を実装してる Cコンパイラで
どうSEHを捕まえてるのか良くわからんな

491 :デフォルトの名無しさん:2014/04/27(日) 16:00:19.19 ID:jKbi43u9
>>489
> 明示的に例外だすAPIの話をされてもねぇ

意味わからん

492 :デフォルトの名無しさん:2014/04/27(日) 22:54:26.81 ID:OJzsjaa+
toupperやtolowerの全角文字版って有りますか?

493 :デフォルトの名無しさん:2014/04/27(日) 23:03:22.74 ID:dRMpu4rZ
>>492
全角文字の文字コードは何?JIS?shift-JIS(CP932)?, EUC?, それとも?

494 :デフォルトの名無しさん:2014/04/27(日) 23:17:09.79 ID:KqK7z0IN
よくある、計算結果の下5桁を〜の問題をとく上で、
10進数で表すと5桁以内の数字A の二乗の下五桁をとって新しいAとし、・・・
をできるだけ早く何回も繰り返す計算をC言語で実現したいです。どんな方法が最適でしょうか?

素直に
int A = 765 //初期値
for(i=0; i<10000; i++){
A = (A*A) % 100000;
}
とするのが一番早いのでしょうか

495 :デフォルトの名無しさん:2014/04/27(日) 23:20:06.18 ID:D03yOYH6
gmpだな

496 :デフォルトの名無しさん:2014/04/28(月) 00:07:41.35 ID:vBB1ZBuL
>>494
マジレスすると、その計算はもっとエレガントに書ける
http://d.hatena.ne.jp/kazu-yamamoto/20090223/1235372875
ついでにメモ化を施せば完璧

497 :デフォルトの名無しさん:2014/04/28(月) 00:37:29.03 ID:S0oQyofE
最適化された式を求めるのは数学者がやるのか?

498 :デフォルトの名無しさん:2014/04/28(月) 05:29:03.79 ID:nB7PeshG
>>494
Aが符号付き32bitで 46341 以上の時、また、
Aが符号無し32bitで 65537 以上の時、
A * A はオーバーフローするね。

A = (A * A) % 100000;
で、次のAは 100000 の剰余なのでありえる。

Aを64bit値にするか、宿題の制限で32bit整数しか
使えないのなら自前でやるか

499 :デフォルトの名無しさん:2014/04/28(月) 11:03:17.60 ID:3V71eLEm
>>494
オーバーフローを回避するにはキャストすると良いよ
A = ((long long)A * A) % 100000;

500 :デフォルトの名無しさん:2014/04/28(月) 14:46:48.36 ID:JkAfPWWw
ていうか素で計算しちゃ駄目な
パズル寄りの問題なんじゃないの

501 :デフォルトの名無しさん:2014/04/28(月) 15:08:25.42 ID:97z81I41
long double という128bitがあるのに
intには128bitがないのでしょうか?

502 :デフォルトの名無しさん:2014/04/28(月) 15:22:00.40 ID:mheEU0a2
long doubleが128ビットとは決まっていないし
intが128ビットでも問題ない

503 :デフォルトの名無しさん:2014/04/28(月) 15:58:44.30 ID:RIsmFlCa
またこいつか

504 :デフォルトの名無しさん:2014/04/28(月) 16:05:25.72 ID:fuxL29fH
vs は80bitだったし、今はdouble と一緒だよ。

505 :デフォルトの名無しさん:2014/04/28(月) 19:04:52.24 ID:t63YSNJY
>>504
>vs は80bitだったし
本当か?単にFPUの内部処理桁というだけで、表からは触れないんじゃなかったか?

506 :デフォルトの名無しさん:2014/04/28(月) 19:15:35.13 ID:mheEU0a2
win16時代のms-c系は80ビットだった

507 :デフォルトの名無しさん:2014/04/28(月) 19:24:46.50 ID:fuxL29fH
>>505
ソース貼っておく
http://msdn.microsoft.com/ja-jp/library/9cx8xs15.aspx

508 :デフォルトの名無しさん:2014/04/28(月) 20:08:02.05 ID:eYjErRwy
windows formに関してなのですが
//Form1.h
private:
    PictureBox^ p;
    System::void Form1_Load(System::Object^ , Sytem::EventArgs^ e)
    {
        p = gcnew PictureBox;
        p->Dock = DockStyle::Fill;
        p->BackColor = Color::White;
        
        p->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::display);
        this->Controls->Add(p);
    }
    void display(Object^ s, System::Windows::Forms::PaintEventArgs^ e)
    {
        draw(e, p);
    }
//graph.cpp
    void draw(System::Windows::Forms::PaintEventArgs^ e, System::Windows::Forms::PictureBox^ p)
    {
        System::Drawing::Graphics^ g = e->Graphics;
        //描画処理
    }
のように分割コンパイルしても大丈夫ですか(一応エラーは出なかったのですが)

509 :デフォルトの名無しさん:2014/04/28(月) 20:32:31.13 ID:/YsEmaXY
省略する部分のチョイスがおかしいので読み取れないが
エラーも警告も無ければ大丈夫じゃない?

510 :デフォルトの名無しさん:2014/04/28(月) 20:34:54.25 ID:eYjErRwy
>>509
ありがとうございます
たしかにチョイスしているところが微妙ですね...
要はForm1.hにガリガリ書きたくないので外部ファイルに委託したかっただけです

511 :デフォルトの名無しさん:2014/04/28(月) 20:50:39.82 ID:/YsEmaXY
要はC++/CLIでポトペタし生成されたコードが
汚ならしく我慢できないって話でしょ?
それは昔から言われてる事で改善される気配もないから
GUI周りはC#で書くのが基本だよ

512 :デフォルトの名無しさん:2014/04/28(月) 20:55:46.98 ID:eYjErRwy
>>511
そうなのでしょうね...
ところで あまりC#には詳しくないので、
.NETを使う上ではc++とc#の実行速度に違いとかは出てくるのでしょうか

513 :デフォルトの名無しさん:2014/04/28(月) 21:06:47.27 ID:/YsEmaXY
基本同じと見ていいよ
ど忘れしたが3文字のなんだったかな、IronPythonで使われてるソレは遅い
でも、C#,C++/CLI,VB.NET,Boo,F#...なんかは同等とみていい
C++/CLIのメリットは
速度じゃなくて、P/Invokeでラッパー書かれることが無いようなマイナーな
C/C++なライブラリをそのまま扱えるので手抜きが出来る
正直それだけだと思うよ

514 :デフォルトの名無しさん:2014/04/28(月) 21:12:51.02 ID:eYjErRwy
ありがとうございます
c#はシンプルに書けるので良いですよね
いままでC/C++を使っていましたが
確かにC#に移行してみるのも手ですね

515 :デフォルトの名無しさん:2014/04/28(月) 22:17:33.16 ID:nYT9hkTJ
>>513
3文字っつーとDLRかな
まああれが遅いのはしゃーない気がする

516 :デフォルトの名無しさん:2014/04/28(月) 23:41:11.77 ID:rB8lTHTI
switch文で意図的なフォールスルーをするとき
なにかわかりやすい目印を書きたいんだけど
みんなはどうしてる?

517 :デフォルトの名無しさん:2014/04/28(月) 23:42:52.41 ID:nYC6TNjH
// fall through

518 :デフォルトの名無しさん:2014/04/29(火) 00:04:11.92 ID:aeW4+FvO
>>515
それそれ
しゃーない部分があるのは承知してるし
場合によっては使える状況もあるだろうから否定はしない
ただ、用途に合わない人にとって
裏切られたというか騙された感を持つのはこれもまたしゃーない部分なんじゃないかな
ソレ系のものはソレである事をなるべく目立たないよう擬態する傾向にあるよね
suffixにソレを付ける命名規則を義務付けて欲しいよマジで
手間が増えるだけで嫌がらせでしか無い

519 :デフォルトの名無しさん:2014/04/29(火) 00:24:59.21 ID:Br1Uxtes
>>516
// no break

520 :デフォルトの名無しさん:2014/04/29(火) 00:45:09.57 ID:9oDU/gS/
ガベコレが自動でほぼ制御できないjavaとC#で長く経験をつんできた開発者が
C++の原始的なリソース管理に慣れるにはどういう学習素材が推奨されますか?

521 :デフォルトの名無しさん:2014/04/29(火) 00:47:07.98 ID:QmOywj8Q
メモリ以外のリソースに関しては
C++もJavaもC#も変わらないと思うのだが

522 :デフォルトの名無しさん:2014/04/29(火) 01:18:14.33 ID:QkXu+GLn
コンストラクタ、デストラクタがあるからJavaより楽だよな。

523 :デフォルトの名無しさん:2014/04/29(火) 01:32:39.98 ID:F17WGv/b
Javaは原因を突き止めるのが非常に困難なメモリリークに弱い印象
実際すごく苦労している

524 :デフォルトの名無しさん:2014/04/29(火) 01:46:56.22 ID:aeW4+FvO
>>520
質問がおかしい
> JavaとC#で長く経験をつんできた開発者
であるならばCは使えるでしょ

525 :デフォルトの名無しさん:2014/04/29(火) 02:48:00.08 ID:AbATIs9f
初歩的すぎる質問ですがVC++2010で標準ライブラリを使うとき
#include の前に必要な準備はありますか?
(どこかからヘッダファイルをダウンロードして突っ込むとか)

526 :デフォルトの名無しさん:2014/04/29(火) 02:51:13.36 ID:tzWpsPe5
>>525
標準ライブラリなら何も要らないよ
普通に「#include <stdio.h>」とか書けばいい
と言うか他のコンパイラでも標準ライブラリは
デフォで組み込まれてるだろw

527 :デフォルトの名無しさん:2014/04/29(火) 05:43:49.50 ID:9oDU/gS/
JavaとC#の経験しかなくて、オブジェクト指向の基本は理解してるつもりだけど
C++でコード書くと必ずメモリリークが起ります。
こんな私が読むべき基本書籍があればご教示ください。

528 :デフォルトの名無しさん:2014/04/29(火) 05:58:15.66 ID:04fcb81y
newなどを使わず、STLを使う。

529 :デフォルトの名無しさん:2014/04/29(火) 06:04:36.63 ID:pH50e3ah
newしたものは必ずスマポに入れる

530 :デフォルトの名無しさん:2014/04/29(火) 07:42:22.09 ID:TKW4+dLj
newしたものはグローバル変数にいれる。そしてdeleteしない。絶対にしない。

531 :デフォルトの名無しさん:2014/04/29(火) 08:09:12.73 ID:B/znruqO
それじゃダメだろ

532 :デフォルトの名無しさん:2014/04/29(火) 08:51:47.48 ID:TKW4+dLj
64ビットあれば使い切れないから大丈夫。使い切るころには128ビットになってる。

533 :デフォルトの名無しさん:2014/04/29(火) 09:11:51.14 ID:devc/baf
>>527
オブジェクト指向を忘れるのが第一

534 :デフォルトの名無しさん:2014/04/29(火) 09:40:00.00 ID:5ghJ9rEO
>>527
関数別にしてその関数をループで何回も呼んで
どの関数でリークしてるか確認

535 :デフォルトの名無しさん:2014/04/29(火) 09:41:52.06 ID:5ghJ9rEO
動的確保されたメモリのリークは_CrtSetDbgFlag使う

536 :デフォルトの名無しさん:2014/04/29(火) 18:35:47.38 ID:lGzouSbD
素人だがvectorじゃだめなのん?

537 :デフォルトの名無しさん:2014/04/29(火) 18:46:49.51 ID:qPmT0/IR
そんなレベルの素人は引っ込んでろ(`・ω・´)!

538 :デフォルトの名無しさん:2014/04/29(火) 18:55:46.21 ID:lGzouSbD
>>537
じゃあ代案出してみろよ

539 :デフォルトの名無しさん:2014/04/29(火) 19:00:52.43 ID:qPmT0/IR
>>529
これに一票

540 :KAC:2014/04/29(火) 19:16:34.41 ID:3cTlepGQ
>>527
その手の手法に関するいい書籍は見たこと無いな。

とはいえ、さほど難しい話じゃ無い。
忘れててもなんとかなるような案が上に色々紹介されてるが、
基本的にはdeleteを忘れなければいい。

処理の初めにnewしたら処理が終わってdelete
クラス生成時にnewしたらクラス消すときにdelete
というように、作るタイミングと消すタイミングは対にできる。
(初めに0初期化して適宜newする方法でも同じ考えでいい)

プログラムで何かをロックしてロック解除を忘れることは無いよな?
同じようなイメージで扱えばいいだけだよ。

541 :デフォルトの名無しさん:2014/04/29(火) 19:17:16.90 ID:lGzouSbD
本末転倒ではあるがnewを使いたければ素直にgcのあるものを使えば良いと思うんだけど...
そもそもjava c#と違ってnew避けるべきだと思うんだが速度は落ちるし
一応gcを実装するライブラリもあったような記憶はあるけど
いきなりc++の設計に手を出すんじゃなくてcから手を出した方が良いと思うんだが素人だけど
>>539
あとスマポって万能なの?

542 :デフォルトの名無しさん:2014/04/29(火) 19:22:38.00 ID:YSaKMYqx
循環参照はだめで、「弱い」参照とかいろいろ駆使している模様、というかそういうときは Boehm GC でいいと思う

543 :デフォルトの名無しさん:2014/04/29(火) 19:27:46.11 ID:lGzouSbD
>>542
そうそれ
ところでBoehmGCには弱点とかある?

544 :デフォルトの名無しさん:2014/04/29(火) 19:39:02.96 ID:04fcb81y
速度はどれだけ違うんだよ?
STLの標準装備のコンストラクタ、デストラクタでは不可能なことはなによ?

545 :デフォルトの名無しさん:2014/04/29(火) 19:41:50.07 ID:qPmT0/IR
細かいことかもしらんが
>STLの標準装備のコンストラクタ、デストラクタでは不可能なことはなによ?
とはなんぞ

546 :デフォルトの名無しさん:2014/04/29(火) 19:42:08.49 ID:lGzouSbD
>>544
速度はどれだけ違うんだよ←実行する環境によって変わるだろ

547 :デフォルトの名無しさん:2014/04/29(火) 19:56:20.09 ID:04fcb81y
>>545
動的確保して自動で解放するが。

char *p = new char [10000];
int *q = new int [10000];



string p(10000,'\0');
vector<int> q(10000);

548 :デフォルトの名無しさん:2014/04/29(火) 19:58:13.49 ID:Kb/I3Vlc
速度は実測が基本

549 :デフォルトの名無しさん:2014/04/29(火) 20:00:27.36 ID:qPmT0/IR
>>547
それはコンストラクタ・デストラクタとは言わない(だから細かいことかもと言った)

550 :デフォルトの名無しさん:2014/04/29(火) 20:05:26.50 ID:qPmT0/IR
>>547
あと出来ないこととしてポリモーフィズムを使うクラスの動的確保が思いつかないのはどうかと

551 :デフォルトの名無しさん:2014/04/29(火) 20:08:30.04 ID:lGzouSbD
>>550
kwsk

552 :デフォルトの名無しさん:2014/04/29(火) 20:20:37.20 ID:qPmT0/IR
クラスAと派生Bがあって
管理はAだけで行いとして
new/deleteを使わずvectorだけで行えるかと言ったら
行えないでしょ

553 :デフォルトの名無しさん:2014/04/29(火) 20:26:46.08 ID:lGzouSbD
たしかに

554 :デフォルトの名無しさん:2014/04/29(火) 20:33:46.15 ID:04fcb81y
わけわからん
できれば簡易なコードをのせてくれないか

555 :デフォルトの名無しさん:2014/04/29(火) 20:48:13.51 ID:qPmT0/IR
class A
{

556 :デフォルトの名無しさん:2014/04/29(火) 20:52:35.27 ID:qPmT0/IR
http://codepad.org/0KxLBhHf
push_back時でエラーになると思ったが・・・
まあどのみち出来ないが

557 :デフォルトの名無しさん:2014/04/29(火) 21:21:18.44 ID:pH50e3ah
vector<B>とvector<A*>でおk

558 :デフォルトの名無しさん:2014/04/29(火) 21:25:20.68 ID:qPmT0/IR
それはポリモーフィズムの有り難みがないなあw

559 :デフォルトの名無しさん:2014/04/29(火) 21:26:58.34 ID:l3FqGA+x
スマポやptr_で突っ込めばいいじゃん

560 :デフォルトの名無しさん:2014/04/29(火) 21:27:01.68 ID:pH50e3ah
一応条件は満たしてるが誰もやらんわな
new使ってvector<unique_ptr<A>>にするわ

561 :デフォルトの名無しさん:2014/04/29(火) 21:39:32.17 ID:qPmT0/IR
だからわりと>>529に帰結する

562 :デフォルトの名無しさん:2014/04/29(火) 22:33:19.67 ID:Xa41IdEJ
boost::ptr_vectorでしょポリモーフィズムしたいのなら

563 :デフォルトの名無しさん:2014/04/29(火) 22:34:28.52 ID:Xa41IdEJ
>>556
ああそれスラッシング起きてますわ
エラーにはならない

564 :デフォルトの名無しさん:2014/04/29(火) 22:40:08.35 ID:dgi8jKwW
>>563
スライシングでは?
と突っ込んでみる。

565 :デフォルトの名無しさん:2014/04/29(火) 23:29:13.34 ID:U0vwb+Hl
スラッシングってメモリが足りなくて仮想記憶が動きっぱなしになってしまう状態だよな

566 :デフォルトの名無しさん:2014/04/29(火) 23:53:34.34 ID:5ghJ9rEO
スワップひどい常態か

567 :デフォルトの名無しさん:2014/04/30(水) 10:37:19.00 ID:Q2kmZuTL
vector<bool>で
1000番目だけtrueにしてあとは0にしたいんですけど、
push_backを1000回繰り替えさないと駄目なんですか?
まとめて入力する方法があれば数十回0をコピーするだけでいいと思うのですが。

568 :デフォルトの名無しさん:2014/04/30(水) 10:44:35.64 ID:d1Jpupa6
>>567
・vector<bool>は基本的に使わない方が良い。詳しくは次のURL参照
https://sites.google.com/site/cpprefjp/reference/vector
boolの配列的なものが欲しければdeque<bool>を使うか、std::bitsetを使うか、
boost::dynamic_bitsetを使うことをお勧めする
http://d.hatena.ne.jp/melpon/20111114/1321297053

・配列やコンテナを同じ値で埋める際はstd::fillを使うといい。使い方は次の通り
http://topcoder.g.hatena.ne.jp/nitoyon/20081019/1224429244
http://ppp-lab.sakura.ne.jp/cpp/library/016.html

569 :デフォルトの名無しさん:2014/04/30(水) 10:45:43.72 ID:cWCEN50W
>>567
そんなことは無い。いろんなメンバ関数があるからちゃんとドキュメント見て好きに使えばいい。

570 :デフォルトの名無しさん:2014/04/30(水) 10:54:40.91 ID:DEeR9Enb
>>567
v.resize(1001,false);
v[1000]=true;

571 :デフォルトの名無しさん:2014/04/30(水) 10:57:37.86 ID:Q2kmZuTL
std::fillはvector<bool>に最適化されてますか?

572 :デフォルトの名無しさん:2014/04/30(水) 10:59:21.14 ID:dDdWmtnK
いいえ

573 :デフォルトの名無しさん:2014/04/30(水) 11:00:28.63 ID:cWCEN50W
>>571
標準ではそんなことは規定されていない。実装によっては最適化されていることがあるかもしれない。
なんにせよ、速度は実測が基本。

574 :デフォルトの名無しさん:2014/04/30(水) 11:00:39.21 ID:Q2kmZuTL
>>570
ありがとうございます。

575 :デフォルトの名無しさん:2014/04/30(水) 16:38:42.27 ID:0+BDS9HE
2130706433を127.0.0.1の文字列に変換したいのですが、どのようにしたら良いでしょうか

よろしくお願いします。

576 :デフォルトの名無しさん:2014/04/30(水) 16:54:41.19 ID:d1Jpupa6
>>575
256との剰余を取ってから割ることを繰り返せばおk

577 :デフォルトの名無しさん:2014/04/30(水) 17:00:23.79 ID:a+D9ZyB5
>>575
puts(inet_ntoa((struct in_addr){.s_addr = inet_addr("2130706433")}));

578 :デフォルトの名無しさん:2014/04/30(水) 17:44:08.61 ID:0+BDS9HE
>>576-577
ありがとうございます

579 :デフォルトの名無しさん:2014/04/30(水) 22:52:24.52 ID:Aiz3G3Sd
テンプレート関数をintやdoubleのような特定の型に制限する方法はありますか
Javaでいうとextends、C#でいうとwhere T :みたいなもの

580 :デフォルトの名無しさん:2014/04/30(水) 23:00:32.39 ID:d1Jpupa6
>>579
C#のってこれ?
http://msdn.microsoft.com/ja-jp/library/bb384067.aspx
よく分からんが、テンプレートって型が違ってもOKなようにするものじゃねーの?

581 :デフォルトの名無しさん:2014/04/30(水) 23:05:35.65 ID:6FRdosdN
enable_if

582 :デフォルトの名無しさん:2014/05/01(木) 01:19:59.17 ID:f1m4ekfh
int i = 0; WCHAR num[2]={0}; LVITEM item = {0};
_itow_s(i,num,10,sizeof(num));
item.pszText = num;

583 :デフォルトの名無しさん:2014/05/01(木) 01:21:55.06 ID:f1m4ekfh

→_itow_s(i,num,sizeof(num), 10);
って誘導先のスレに質問が移動してくる前に書いちまったw

584 :デフォルトの名無しさん:2014/05/01(木) 04:21:23.22 ID:w9/KPUlo
はいはーい

struct st1 {
int a;
struct st2 *b;
};

struct st2 {
int a;
struct st1 *b;
};

のような参照の仕方は仕様的に問題ありませんか?
一応gccではできたっぽいんですが、ほかのコンパイラとかで使っても大丈夫ですか?
どーも自信持てなくて、、、

585 :デフォルトの名無しさん:2014/05/01(木) 04:42:44.04 ID:cjwRCMlg
おk

586 :デフォルトの名無しさん:2014/05/01(木) 06:24:01.30 ID:9zM4+Fav
st1の前に、st2を前方宣言したら?

587 :586:2014/05/01(木) 06:29:36.93 ID:9zM4+Fav
あ、ポインタは32, 64ビットのどちらかで、
型が決まっているから、前方宣言いらんのか

588 :デフォルトの名無しさん:2014/05/01(木) 07:13:14.25 ID:cjwRCMlg
ポインタでも宣言は必要

589 :デフォルトの名無しさん:2014/05/01(木) 16:24:23.71 ID:O61PxCRM
ではない

590 :デフォルトの名無しさん:2014/05/01(木) 17:50:45.92 ID:EbX4Dp2d
>>582-583さんありがとうございます。こちらで答えてくれていたとは思いませんでした。

このレスを参考に
int i = 0; WCHAR num[2]={0}; LVITEM item = {0};
for(i=0;i<20;i++){
_itow_s(i+1,num,10,sizeof(num));
item.pszText = num;
item.iItem = i;
ListView_InsertItem(hList , &item);
}
としたところプログラムが起動しなくなってしまいました。
iの中を確認したところ_itow_sの時にiが初期化してしまうために無限ループが起きてしまっていると思うのですが、
_itow_s()にint変数を初期化する仕様があるのでしょうか?
初期化するようならint変数をもう1個用意すれば動くのですが、初期化の伴わないintからWCHARへの変換を行う関数というものは無いのでしょうか?
どなたかよろしくお願いします

591 :デフォルトの名無しさん:2014/05/01(木) 17:59:56.59 ID:K+RzAtOV
ヌルターミネートまでいれると最低3文字は必要だろ

592 :デフォルトの名無しさん:2014/05/01(木) 18:00:07.87 ID:cjwRCMlg
std::wstring strnum = std::to_wstring(i + 1);
item.pszText = const_cast<LPWSTR>(strnum.c_str());

593 :デフォルトの名無しさん:2014/05/01(木) 18:49:41.25 ID:O61PxCRM
バッファあふれが原因

594 :デフォルトの名無しさん:2014/05/01(木) 19:09:33.09 ID:X9uChr+4
itow_sの引数の順序を間違っているのと文字数を渡すべきなのにバイト数を渡している

595 :デフォルトの名無しさん:2014/05/01(木) 19:18:08.61 ID:EbX4Dp2d
>>591-594
ありがとうございます。無事解決しました。

596 :デフォルトの名無しさん:2014/05/02(金) 15:34:11.98 ID:Y5rKh6pa
ウィンドウHWND hWnd;をDestroyWindow()を使って破棄した場合、
再びhWnd=CreateWindow()という風に新しいウィンドウを作る事は出来るのでしょうか?
それともhWndというハンドル自体が破棄されるのでしょうか?

スイッチによって子ウィンドウを切り替えるアプリを作ろうとしているのですが、
スイッチを押す度にウィンドウを破棄→生成とする設計にするべきなのか
最初に子ウィンドウを複数作ってスイッチによって見えるウィンドウを変える設計にすべきなのかが判断付かないので質問しました。

どなたかよろしくお願いします。

597 :デフォルトの名無しさん:2014/05/02(金) 15:42:03.73 ID:mphOrT6X
出来る

598 :デフォルトの名無しさん:2014/05/02(金) 15:45:23.76 ID:wOX1O7vl
コリエイトしたものを使い回しているのではなく新たに生成しているのに
出来ないと思ったのが不思議

599 :デフォルトの名無しさん:2014/05/02(金) 16:06:08.20 ID:WERRY4Df
C++で画像を表示する場合、どれを使ったらいいの?
DXライブラリを使わない場合で

600 :デフォルトの名無しさん:2014/05/02(金) 16:09:56.65 ID:IdTqtCyu
gdip

601 :デフォルトの名無しさん:2014/05/02(金) 16:20:18.97 ID:Y5rKh6pa
>>597-598
ありがとうございます。

602 :デフォルトの名無しさん:2014/05/02(金) 16:48:37.49 ID:KtmglHA9
>>601
最初に複数作成
→切り替えは表示非表示
→終了時に破棄
のがスマートと思う

603 :デフォルトの名無しさん:2014/05/02(金) 16:50:12.77 ID:WERRY4Df
directdrawって使わない方がいいの?
代わりに何使えばいいの?

604 :デフォルトの名無しさん:2014/05/02(金) 18:50:10.79 ID:Y5rKh6pa
文字列の幅を求める関数を調べたらGetTextExtentPoint32()ってのが出てきたのですが、
この関数の第一引数の「デバイスコンテキスト」って何を入れたらいいのでしょうか?

また、文字列の幅を調べたい理由はリストボックスの横スクロールを使いたいと思ったからなのですが、
リストボックスの文字サイズってどうやって取得したらいいのでしょうか?
デフォルトのフォントを調べたところ、高さと幅の数値に0が入っていて自動的にサイズを調整する方式みたいなので困っています。

一度に二つ質問してしまってすみませんがよろしくお願いします。

605 :デフォルトの名無しさん:2014/05/02(金) 19:03:24.92 ID:IdTqtCyu
>>604
GetWindowDCで取れる

606 :デフォルトの名無しさん:2014/05/03(土) 01:55:01.96 ID:ZVBod6nU
int hoge(const string& str){
hoge<char>(str);
}
int hoge(const wstring& str){
hoge<wchar_t>(str);
}

template<class T> int hoge(const basic_string<T>& str){
//処理
}

みたいな書き方はありですか

607 :デフォルトの名無しさん:2014/05/03(土) 01:58:49.19 ID:Q6/trxkK
>>606
コンパイルしてみればわかるんじゃないの?
そうじゃないなら、何がわからないのか書いてもらわないと。

608 :KUSO KOTE ◆unko./w.Osri :2014/05/03(土) 02:19:35.05 ID:tvP1y9zx
特に問題は思い当たりませぬ。
http://ideone.com/6ry1qG

609 :デフォルトの名無しさん:2014/05/03(土) 10:35:51.17 ID:4EIdW7HC
C++のオーバーロード解決は明示的に指定しない限り
テンプレートより普通の関数優先で合ってる?

610 :デフォルトの名無しさん:2014/05/03(土) 11:44:12.05 ID:NUO+XoEk
>>604
Windows プログラミングの「画面描画の基礎」を少し勉強したほうがいい
断片的な知識でやると地雷だらけのバグアプリになる

611 :デフォルトの名無しさん:2014/05/03(土) 20:10:03.15 ID:lJjp0zKR
>>610
>>596みたいな事聞いてるんだぞ・・・
ksのksからで
カスじゃなくて基礎な

612 :デフォルトの名無しさん:2014/05/04(日) 03:21:49.77 ID:StveqMJh
>>608
どーもです

613 :【重要】:2014/05/04(日) 15:17:55.72 ID:owW4rydZ
hogeは禁止されています、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。

614 :デフォルトの名無しさん:2014/05/04(日) 15:27:20.14 ID:0Lb8hh8H
嫌hogeをNGIDにするととても見やすいなーこのスレ

615 :デフォルトの名無しさん:2014/05/04(日) 16:16:35.49 ID:6pFdiYZZ
#include <pshpack2.h>

ってどういう意味あるの?

616 :超重要:2014/05/04(日) 16:37:15.78 ID:Av6aDk2F
hogeは禁止されていません。hogeを妬むチョーセン人がチョーセンルールを押し付けていますが、
日本人は従う必要はありません。

617 :デフォルトの名無しさん:2014/05/04(日) 16:37:35.03 ID:tByDu0vN
>>615
pshpack2.hをインクルードファイルサーチパスから探してインクルードする。

618 :デフォルトの名無しさん:2014/05/04(日) 19:18:25.75 ID:G4bkQ4r/
俺に向かってhageと言うなよ、わかったな

619 :超重要:2014/05/04(日) 20:19:26.89 ID:Av6aDk2F
このスレではハゲは尊称

620 :デフォルトの名無しさん:2014/05/04(日) 23:03:47.87 ID:vSRu9IqQ
>>618
ハゲ乙

621 :デフォルトの名無しさん:2014/05/05(月) 04:16:08.27 ID:xdFqa6AX
チョーンジン荒らしのくせにハゲとは生意気な
貴様が禿げるのは10年早い

622 :デフォルトの名無しさん:2014/05/05(月) 12:30:19.69 ID:Mu2ScZdD
nullptrをdeleteしてもdelete[]しても問題ないですよね?

623 :デフォルトの名無しさん:2014/05/05(月) 12:55:28.68 ID:CN0OEHd5
>>622
問題ない。
malloc()/free() で free(NULL); が「なにも起こらない」と定義されて以来の伝統だ。

624 :デフォルトの名無しさん:2014/05/05(月) 13:01:42.77 ID:r55hxj+Y
初心者が nullptr とか口にする時代がきていた

625 :デフォルトの名無しさん:2014/05/05(月) 15:54:09.89 ID:hsi4q6Ai
>>624
よう老害

626 :デフォルトの名無しさん:2014/05/05(月) 17:29:42.81 ID:ic/qAIV8
VC++ 2010 EEを使用してる環境で
#include <math.h>と記入しているのに
acosh()が未定義になります

使用したい場合はどうすればいいですか?

627 :デフォルトの名無しさん:2014/05/05(月) 17:39:11.07 ID:SYEvdBak
>>626
1.2013に替える

2.
#include <math.h>
namespace std{}//他との互換のため
using namespace std;
static double unko = acosh(1.0);

3.
#include <cmath>
static double unko = std::acosh(1.0);

628 :デフォルトの名無しさん:2014/05/05(月) 21:05:14.36 ID:ic/qAIV8
>>627
vistaなので1はできない
2,3も未定義と出たのでlog使った式に置き換えて対処しました
ありがとうございました

629 :デフォルトの名無しさん:2014/05/05(月) 23:06:39.14 ID:KNzAgd/2
>#include <math.h>と記入しているのに
>acosh()が未定義になります

そりゃmath.hヘッダーはおろか標準ライブラリに
acosh()なんて無いからな

630 :デフォルトの名無しさん:2014/05/05(月) 23:26:45.47 ID:EsHOP99t
>>629
いつの時代の人?

631 :デフォルトの名無しさん:2014/05/05(月) 23:42:58.99 ID:vDmHAviQ
>>630

> 626 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/05(月) 17:29:42.81 ID:ic/qAIV8 [1/2]
> VC++ 2010 EEを使用してる環境で

632 :デフォルトの名無しさん:2014/05/05(月) 23:44:27.04 ID:vDmHAviQ
この手のやつはバージョン見て
boostあたりとプリプロセスで切り替えるのが定番なんじゃないの

633 :デフォルトの名無しさん:2014/05/05(月) 23:49:12.71 ID:vDmHAviQ
> バージョン見て
ってのはちと適当すぎた
OS、コンパイラ、バージョン、スイッチ、envあたりも見なきゃならんね

634 :デフォルトの名無しさん:2014/05/06(火) 00:37:10.49 ID:eHTf3NEj
Visual C++でコンパイル出来ているのにCライブラリがリンク出来ないとなると
/NODEFAULTLIBオプションしか思い当たらない。

635 :デフォルトの名無しさん:2014/05/06(火) 06:45:35.64 ID:5E8fiGLl
VisualStudioでacoshが使えるようになるのは2012からなんですよ

636 :デフォルトの名無しさん:2014/05/06(火) 07:10:09.00 ID:i8DiB40Z
なるほど
ISO/IEC 14882:2011およびISO/IEC 9899:1999
で規定されたacoshが無いコンパイラは捨てるしかあるまい

637 :デフォルトの名無しさん:2014/05/06(火) 13:07:56.84 ID:z8IrcxQC
acosh(x) = log(x + sqrt(x2 - 1))

638 :デフォルトの名無しさん:2014/05/06(火) 13:18:15.94 ID:QzakODtK
まさかの>>637の頭の悪さ、コミュ障っぷりには脱帽するしかない

639 :デフォルトの名無しさん:2014/05/06(火) 13:36:05.40 ID:mfZzKbLo
まさかの>>638の頭の悪さ、コミュ障っぷりには脱帽するしかない

640 :デフォルトの名無しさん:2014/05/06(火) 20:35:42.00 ID:WjTWSVZo
>>637
細かいが
acosh(x) = log(x + sqrt(pow(x, 2) - 1))
だな

641 :デフォルトの名無しさん:2014/05/06(火) 21:04:32.72 ID:c8YNOPNu
VCで数値演算を気合を入れてするようなすごい奴いないから2012からサポートなんだろ
ついでにそんな奴がWin使いにいるのか?

642 :デフォルトの名無しさん:2014/05/06(火) 21:05:50.40 ID:0/z9kdsI
精度的にはsqrt()の引き数はx * x - 1にしておきたいところだな。

643 :デフォルトの名無しさん:2014/05/06(火) 21:23:54.54 ID:WjTWSVZo
興味本位で物理演算?
自由落下とか空気抵抗ありとか

644 :デフォルトの名無しさん:2014/05/07(水) 15:46:20.67 ID:XxSBZtfo
>>641
学生?職業プログラマで普通に居るよ 例えば俺とか
別に凄いことでもなんでもない

645 :デフォルトの名無しさん:2014/05/07(水) 15:54:16.56 ID:s5t2UWqJ
ミサワ風イラストつけて頼む

646 :デフォルトの名無しさん:2014/05/07(水) 18:21:44.52 ID:MZ01fZnX
2chの住民平均以下の生活水準の奴にはここが居心地良いのかと

647 :デフォルトの名無しさん:2014/05/07(水) 22:15:16.82 ID:DmN4H+C2
>>644
5年前までは数値演算ならintelかPGIコンパイラと決まっていたんだが、最近MSも追い付いたのか?

648 :デフォルトの名無しさん:2014/05/07(水) 23:04:31.89 ID:XxSBZtfo
>>647
まあスピードが必要なところは外部ライブラリ使うことになるけどな
それはVCだろうがICCだろうが同じ

649 :デフォルトの名無しさん:2014/05/07(水) 23:15:32.84 ID:QqPD6ddY
お世話になります。
ロベールのC++入門本を2週しました。
プログラムはすべて打ち込んで動作確認したり一部改変したりして
学習したのですが、どうしても自作プログラムが書けません。
C言語でしたらプロとして通用するレベル(PG歴9年です)なのですが、
C++でまとまった意味のあるプログラムが書けません。
どのような訓練をすればいいでしょうか?

650 :649:2014/05/07(水) 23:17:26.44 ID:QqPD6ddY
C++で書きたいのはH8のプログラムです。マイコンです。

651 :デフォルトの名無しさん:2014/05/07(水) 23:32:23.38 ID:HeYKw+Nm
>スピードが必要なところは外部ライブラリ使うことになるけどな
なんかワロタ

652 :デフォルトの名無しさん:2014/05/07(水) 23:44:17.26 ID:ZcddfNS5
GMPとか勝てんだろ

653 :デフォルトの名無しさん:2014/05/07(水) 23:46:14.07 ID:cMom8c9/
>>651
知ったかクンだろ、スルーしてやれよ

654 :デフォルトの名無しさん:2014/05/08(木) 00:33:35.82 ID:NSiHhXoS
パフォーマンスが必要なところは他任せで、自分がやるのはそうじゃないところ
ってゆとり開発なら当然だよね。 いまはゆとり開発が主流だしね

655 :デフォルトの名無しさん:2014/05/08(木) 00:39:55.71 ID:u1P/WjZg
表計算をしたいという要求に対して
オペレーティングシステムと表計算アプリケーションの開発を
提案するんだろうか。
大切な所を購入ソフトに頼るのはゆとりとか言って

656 :デフォルトの名無しさん:2014/05/08(木) 00:42:28.50 ID:WPnVChLN
誰がそんな事を言っているのだろうか

657 :デフォルトの名無しさん:2014/05/08(木) 00:49:58.56 ID:NSiHhXoS
>>656
だれが言っているんだろね

658 :デフォルトの名無しさん:2014/05/08(木) 00:55:15.63 ID:F90LFLZ7
よーしパパ、
FFTをループのアンローリングしゃうぞー

659 :デフォルトの名無しさん:2014/05/08(木) 01:19:39.17 ID:WasTJn9b
Haswellでループのアンロールやってみたけどあまり効果がなかった
Pentium4の時はすごく違ったのになあ

660 :デフォルトの名無しさん:2014/05/08(木) 01:41:22.05 ID:Ejp4CkYN
>>659
適当にWikipediaでアーキテクチャ見てみた限り、
分岐予測が改善されたのと、パイプライン段数が減ってるから
予測ミスのペナルティがpentium4ほど大きくないからかな

661 :デフォルトの名無しさん:2014/05/08(木) 01:41:26.59 ID:/bB+WIRU
>>650
Cでなら書けると言い張るなら、Cで書けばいいじゃん。
どうしてもC++にしたいなら、一度Cで書いてから次の点に留意して書き直してみるとか。
・グローバル変数やデバイスのような単一資源はクラス化する。
・ネームスペースを活用する。
・GPIOのような固定値で表現できる資源はテンプレート関数化する。
いま思いつくのはこんなところかな。

662 :デフォルトの名無しさん:2014/05/08(木) 01:42:39.49 ID:1wrEfjwT
実践で全く役立たずのゆとりにゆとり呼ばわりされちゃったよ(笑)

663 :デフォルトの名無しさん:2014/05/08(木) 01:43:20.85 ID:/bB+WIRU
>>659
コンパイラに任せれば済むことでは?w

664 :デフォルトの名無しさん:2014/05/08(木) 01:47:45.96 ID:1wrEfjwT
偉そうなことほざいてるゆとりはFFTWやIPPより高速なFFTコードをアップしてからにしてくれな

665 :デフォルトの名無しさん:2014/05/08(木) 01:52:08.61 ID:0ZjLmGKH
C言語で
int id=001;
のように変数に10進数を与えたいのですが、10進数ではなく8進数として判断されてしまいます。
この0から始まる値を10進数として与えるにはどうすればいいのでしょうか。

すみません。よろしくお願いします。

666 :デフォルトの名無しさん:2014/05/08(木) 01:53:31.41 ID:Oom5aWWV
00を消せばいい

667 :デフォルトの名無しさん:2014/05/08(木) 01:53:56.37 ID:H5CeDMPH
車輪の再発明して何になるん

668 :デフォルトの名無しさん:2014/05/08(木) 01:58:57.37 ID:WPnVChLN
パフォーマンス、サイズ、ライセンス諸々
用途次第でよくある話じゃない?

669 :デフォルトの名無しさん:2014/05/08(木) 02:12:06.73 ID:1wrEfjwT
今時マイコンだって数値計算用のライブラリはチップメーカが最適化されたものを用意してるのが普通
C/C++の標準関数を使わなければいけないことのほうが稀

670 :デフォルトの名無しさん:2014/05/08(木) 02:34:47.69 ID:wkkQdFik
>>669
だからこそ、ゆとりやドカタでもそこそこのパフォーマンスを出せるものが作れる

671 :デフォルトの名無しさん:2014/05/08(木) 02:36:12.22 ID:QWFUcZUM
非常に初歩的な質問で申し訳ないです
int st[10][10]という配列の一行目に、2014050810という値を代入したいのですが
書き方を教えていただけませんか

672 :デフォルトの名無しさん:2014/05/08(木) 02:38:43.30 ID:o358HCml
>>671
1行目とは何を指すのか。
配列を行列と見做すのならrow-majorなのかcolumn-majorなのか。

673 :デフォルトの名無しさん:2014/05/08(木) 03:39:06.24 ID:35TTXgql
>>671
・「2014050810」が配列の各要素の数字をまとめたものの場合→
 素直に1つづつfor文で回してコピーしろよ
・「2014050810」が20億1405万810の場合→
 10で割るのと剰余をとるのを繰り返して配列1個づつにコピーしろよ
 (注:20億1405万810はint型変数1個にギリギリ入るので、
   20億1405万810を配列の各要素に代入したい場合は
   for文を回して(ry)
・「2014050810」が文字列(C言語ならchar型の配列)の場合→
 '0'を引くとかstrtolとかで数字に変換しろよ


674 :デフォルトの名無しさん:2014/05/08(木) 05:43:59.23 ID:G9NaZtKr
>>661
おー具体的なアドバイスありがとう!!
そうやってくんだねぇ

675 :デフォルトの名無しさん:2014/05/08(木) 09:59:45.58 ID:Pn75zzX2
皮肉を書いたら感謝されたでござる。

676 :デフォルトの名無しさん:2014/05/08(木) 10:07:10.43 ID:JZCmTzL0
>>673
てっきり1セルに入れる値と思い込んでいた俺のエスパー力はまだまだ未熟

677 :デフォルトの名無しさん:2014/05/08(木) 10:08:34.96 ID:35TTXgql
>>676
charをintにキャストする場合を忘れてたんだぜ……

678 :デフォルトの名無しさん:2014/05/08(木) 11:52:39.17 ID:TYDayfT0
scanf関数が良く理解できないのですが、
何方かご教授いただけませんか
よろしくお願いします。

679 :デフォルトの名無しさん:2014/05/08(木) 12:22:32.29 ID:VQ+BCLxz
>>678
書式の通りに入力
以上終わり

680 :デフォルトの名無しさん:2014/05/08(木) 13:06:23.48 ID:ZRNNbMYn
scanfってなんで未だに言語仕様の中に残ってるんだろう

681 :デフォルトの名無しさん:2014/05/08(木) 13:17:03.32 ID:OtdKkzKB
少し前の入門書でscanfやgetsがかなり感情的に否定されてたから
洗脳されちゃった人かな

682 :デフォルトの名無しさん:2014/05/08(木) 13:26:02.31 ID:JZCmTzL0
熟練者が内内で使う分には優れているが
入門書なんかで扱うべき代物ではないな

683 :デフォルトの名無しさん:2014/05/08(木) 13:34:16.13 ID:SgcQR1UW
入力処理以外の部分にフォーカスされたトピックがあって
ちゃちゃーっと とりあえず入力するのに使うと

684 :デフォルトの名無しさん:2014/05/08(木) 14:13:33.82 ID:+RsurlEd
C++でゲームを作っているのですが
ゲーム本編のクラスに細かい機能のクラスを追加したかった場合
どのように追加したクラスを本編クラスにくっつけるものなのですか?
本編クラスのメンバーでその追加クラスを生成すれば良いですか?

685 :デフォルトの名無しさん:2014/05/08(木) 15:30:14.62 ID:muF0Pbbm
c言語で、入力された値が1桁〜3桁までの、整数以外なら弾くプログラムを作りたいのですがどうしたらよいですか?

なるべくstdio.hのライブラリのみで作りたいです。
入力をchar型に入れればいいのは分かるんですが…。

686 :デフォルトの名無しさん:2014/05/08(木) 15:32:23.21 ID:QETE0hyv
宿題は、宿題スレへ・・・

687 :片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/08(木) 16:30:35.39 ID:o5H0kOM9
>>684
本編との共通データと共通インターフェイスを分析せよ。所有、仮想関数、継承などを使う。

688 :デフォルトの名無しさん:2014/05/08(木) 16:34:02.02 ID:PCqjElIP
C言語をプログラミングを始めたばかりなんですが
ピラミッドをfor文で作る際にln が段数で
for(i = 1; i <= ln; i++){
for(j = ln - i; j > 0; j--)
{
printf(" ");
}

for(j = i * 2 - 1; j > 0; j--)
{
printf("*");
}
putchar('¥n');
}

のi * 2 -1とかっていうのはパッと見て思いつくものなのでしょうか?
慣れればすぐに思いつけるものなのでしょうか?

689 :片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/08(木) 17:04:48.57 ID:o5H0kOM9
>>688
数学の等差数列。

690 :デフォルトの名無しさん:2014/05/08(木) 17:15:40.82 ID:Z/VcgkBH
>>685
1文字ずつ、0-9の数字かどうか確かめる
そしてそれが、1-3個あればよい

文字列(ascii)から数値(int)へ変換する関数
int atoi( const char *string );

これで数値へ変換できたら、0-999であるか確かめる


>>688
i * 2 - 1 は、1, 3, 5, 7, 9個の、"*"を表示する
なぜ、1, 2, 3, 4, 5じゃダメなのか?
理由はその作者にしかわからない

691 :デフォルトの名無しさん:2014/05/08(木) 18:00:18.08 ID:97XJLzXo
>>690
1,2,3,4,5じゃ綺麗なピラミッドにならないだろう。
>>688のコードを実行してみたら分かる

692 :デフォルトの名無しさん:2014/05/08(木) 18:03:54.78 ID:97XJLzXo
>>688は自分でそのピラミッドを表示するコードを書いてみて
他の人に見てもらったら、多分何人かはなんでそういうコードを
思いついたか疑問に思うだろう。
問題解決の道筋は一つとは限らない(最適解はあるだろうが)。

693 :デフォルトの名無しさん:2014/05/08(木) 18:07:03.46 ID:WPnVChLN
*を全角にすればイケるわけだから
結局の所は作者の好みだって言ってるんじゃない?

694 :デフォルトの名無しさん:2014/05/08(木) 19:15:36.07 ID:m/3Cotp7
C++でzip/unzipのライブラリありますか?
DotNetZipみたいな便利なのがあればいいのですが。

695 :デフォルトの名無しさん:2014/05/08(木) 19:23:32.39 ID:jSvCbKd2
zlib

696 :デフォルトの名無しさん:2014/05/08(木) 20:08:55.25 ID:35TTXgql
>>682
それ言い出したらCの入出力なんて……
>>684
「細かい機能のクラス」ってなんなんだよ……
別にクラスは関数セットってわけじゃねーんだぞ
>>687も「設計しなおせ」(要約)って言ってるわけだし
>>690
atoiにはstdlib.hが要るんですがそれは……
つかstdlib.hにはstrtolがあるんだからそっちを薦めるべき
(宿題で利用できる関数が制限されてたら仕方がないが)

697 :デフォルトの名無しさん:2014/05/08(木) 20:19:22.48 ID:H5CeDMPH
>>671
int st[10][10] = { {2, 0, 1, 4, 0, 5, 0, 8, 1, 0} };
としたいんじゃないのか

698 :デフォルトの名無しさん:2014/05/08(木) 20:22:44.38 ID:iWHr/ksT
ハッシュは可逆とか言ってた子まだいるのかなこのスレ

699 :デフォルトの名無しさん:2014/05/08(木) 20:46:26.15 ID:WPnVChLN
>>698
【レス抽出】
対象スレ:【初心者歓迎】C/C++室 Ver.89【環境依存OK】
キーワード:ハッシュ
検索方法:マルチワード(OR)
抽出レス数:0


【レス抽出】
対象スレ:【初心者歓迎】C/C++室 Ver.90【環境依存OK】
キーワード:ハッシュ
検索方法:マルチワード(OR)
698 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/08(木) 20:22:44.38 ID:iWHr/ksT
ハッシュは可逆とか言ってた子まだいるのかなこのスレ
抽出レス数:1


誰がそんな事言ってるの?

700 :デフォルトの名無しさん:2014/05/08(木) 21:00:13.61 ID:H5CeDMPH
cryptの挙動見れば無理ってわかるのにな

701 :デフォルトの名無しさん:2014/05/08(木) 21:10:21.35 ID:m/3Cotp7
>>695
ありがとうございます。
zlibというのはDotNetZipみたいにmemory streamに対して
zip/unzip出来るでしょうか?

702 :デフォルトの名無しさん:2014/05/08(木) 21:12:31.87 ID:QETE0hyv
できるからググってドキュメント読んでこい

703 :デフォルトの名無しさん:2014/05/08(木) 21:15:19.41 ID:7Gl9qGxi
C++のMemoryStreamってなんだ

704 :デフォルトの名無しさん:2014/05/08(木) 21:27:39.97 ID:dPnVK8av
CHRNからおさらいした方が良さげだな

705 :デフォルトの名無しさん:2014/05/08(木) 21:27:50.66 ID:Oom5aWWV
IStreamとか?

706 :デフォルトの名無しさん:2014/05/08(木) 21:45:04.63 ID:WPnVChLN
>>700
それに使われているのはバリエーションの一部であって
hash(...) { return ... }
こんな受けたものをそのまま生で返すのも
立派なハッシュ関数ですよ

707 :デフォルトの名無しさん:2014/05/08(木) 21:51:48.56 ID:muBIMt4G
std::vectorをバッファーにしたistreamとかたまに使うな。

708 :デフォルトの名無しさん:2014/05/09(金) 00:44:50.53 ID:S4GfSN5p
派生と継承ってなにが違うの?
詳しく教えて

709 :デフォルトの名無しさん:2014/05/09(金) 00:48:46.05 ID:Z1SwkjRK
>>708
雰囲気が違う。

710 :708:2014/05/09(金) 00:59:28.44 ID:S4GfSN5p
>>709
まじめに教えてください

711 :デフォルトの名無しさん:2014/05/09(金) 01:00:38.29 ID:Z1SwkjRK
>>710
まじめに雰囲気が違うだけ。

712 :デフォルトの名無しさん:2014/05/09(金) 01:04:06.68 ID:bHTKjDjb
>>708
美文書の問題なだけなので、あまり気にしなくても良い気がする。

派生する・されるのはクラス
継承する・されるのはメンバ
ってだけの話。

713 :デフォルトの名無しさん:2014/05/09(金) 01:04:08.31 ID:ebCqqhjn
Aを基にして出来たが同じではないBはAの派生
Aと同じBはAの継承

適当だが

714 :デフォルトの名無しさん:2014/05/09(金) 02:44:19.51 ID:9FYhMONq
英語では派生も継承も derived とかのようだが‥‥なんで訳を分けたの?

715 :デフォルトの名無しさん:2014/05/09(金) 02:51:35.09 ID:Kz50EFWR
おまいは二つ前のレスも読めないのか
inherit(派生) と derived(継承した)
と言う用語が使い分けられている。
ついでに"derived"は規格中で特別な用語(10p2)

716 :デフォルトの名無しさん:2014/05/09(金) 02:57:51.81 ID:1HcIeJu0
UFC 128 - エリック・コク vs. ハファエル・アスンサオ
https://www.youtube.com/watch?v=n2CcU1A1i-0

UFC 134 - エリック・シウバ vs. ルイス・ラモス
https://www.youtube.com/watch?v=x25xIpNmhCo

UFC 140 - コスタ・フィリッポウ vs. ジャレッド・ハマン
https://www.youtube.com/watch?v=etC-LdvIe8A

UFC on Fox 5 - マット・ブラウン vs. マイク・スウィック
https://www.youtube.com/watch?v=HvWDkItV20s

717 :デフォルトの名無しさん:2014/05/09(金) 03:08:47.50 ID:9FYhMONq
>>715
逆じゃないの?
http://cpplover.blogspot.jp/2010/11/abstract-class.html

>>712 が正解のようだ

718 :デフォルトの名無しさん:2014/05/09(金) 03:15:04.52 ID:Kz50EFWR
>>717
逆だった。

ちなみにinherit(継承)/derive(派生)の使い分けはC++・Java・C#で共通。

719 :デフォルトの名無しさん:2014/05/09(金) 03:20:35.70 ID:ClmLL0Ax
UMLだとクラス間の関係にもにinheritanceを使用していたような

720 :デフォルトの名無しさん:2014/05/09(金) 08:25:24.13 ID:YiLzwXxL
クラス B はクラス A から派生しており、メンバー X を継承する

だろ?
雰囲気とか、大丈夫か?

721 :デフォルトの名無しさん:2014/05/09(金) 09:41:00.16 ID:1s+wO78F
"単継承"、"多重継承" の言葉が相手にしてるのはクラスだろうけど...
うーん?

722 :KUSO KOTE ◆unko./w.Osri :2014/05/09(金) 09:49:18.53 ID:tVqxelwX
10.1 Multiple base classes『Note:The use of more than one direct base class is often called multiple inheritance.』
※multiple inheritanceは斜体ではない

つまり多重継承はC++の規格の用語とは違う(たぶん)。

723 :デフォルトの名無しさん:2014/05/09(金) 10:53:03.38 ID:Mr0Sp7Ii
多重継承は
同じシグネチャを持つメンバをそれぞれの親から持ち込んで〜
っていう例の問題を指すんじゃないの?

724 :デフォルトの名無しさん:2014/05/09(金) 11:41:52.50 ID:MMJKVPjb
> inherit(継承)/derive(派生)

単にこれシノニムとして読んだんじゃいかんのか。

725 :デフォルトの名無しさん:2014/05/09(金) 17:02:14.17 ID:Mr0Sp7Ii
派生:プログラマの仕事
継承:コンパイラの仕事

726 :デフォルトの名無しさん:2014/05/09(金) 17:52:36.71 ID:/+k56nAg
了承。

727 :デフォルトの名無しさん:2014/05/09(金) 19:10:33.14 ID:PvmHWu+1
拝承。

728 :デフォルトの名無しさん:2014/05/09(金) 19:11:41.04 ID:qXBc1Ng9
>>723が何か言った

729 :デフォルトの名無しさん:2014/05/09(金) 20:40:18.07 ID:wsv1Pz2i
多重継承をやると頭が禿げると聞いたが

730 :デフォルトの名無しさん:2014/05/09(金) 22:10:43.56 ID:THyZXm1s
>>713の言い換えだがニュアンス的に
派生 なにかをもとにして新しいものを生み出す
継承 なにかをそのまま受け継ぐ
だからC++では>>712が妥当

731 :デフォルトの名無しさん:2014/05/09(金) 23:18:06.60 ID:UiWKW0mE
>>724
まあ、問題無いと思うよ。
C++機能としての意味で使うなら、90%以上の人が継承も派生も同じ扱いな感覚。

732 :デフォルトの名無しさん:2014/05/10(土) 14:17:50.12 ID:BTCa0fTB
アロケータのrebindの存在意義がよく分からんのですが
日本語で解説してるサイトはありませんでしょうか?

733 :デフォルトの名無しさん:2014/05/11(日) 09:08:56.30 ID:xlwSJ+ke
てす

734 :デフォルトの名無しさん:2014/05/11(日) 14:07:47.55 ID:C0JfFQ1r
_tsystem関数でコンソールプログラムを立ち上げようとすると
立ち上がったコンソールプログラムがすぐに閉じてしまいます。
コンソールプログラム側は「getchar()」or「_tsystem(_T("pause"))」で中断を試みています。
コンソールプログラムを直接立ち上げるとうまくいきます。

_tsystem関数でコンソールプログラムを立ち上げて、
これを開いたままにするにはどうすれば良いですか?

735 :デフォルトの名無しさん:2014/05/11(日) 14:24:07.15 ID:ttO2ycsK
>>734
起動するプログラムを開いたままにするように作ればいいだけ
それが嫌なら

1.
std::system(R"(終わったらpauseするバッチリ.bat)");

2.
std::system(R"(cmd.exe /k shine.exe)");

3.
std::system(R"(start shine.exe)");

736 :デフォルトの名無しさん:2014/05/11(日) 14:47:34.15 ID:wSEeMjm/
特殊文字も使用していないし特にリテラルである必要はないのではないか?

737 :デフォルトの名無しさん:2014/05/11(日) 14:52:50.14 ID:t4xw9R/W
そうすると次は
system("sub\test.exe") が動きません
とか言い出すんだろ?

738 :デフォルトの名無しさん:2014/05/11(日) 14:53:21.65 ID:C0JfFQ1r
>>735
ありがとうございます。
2の方法でうまくいきました。

739 :デフォルトの名無しさん:2014/05/11(日) 17:33:11.46 ID:ODutmrkY
すみません質問させてください。
複数列表示できるコンボボックスをDLLとして作成し、MFCアプリケーション等で使用したいのですが、
VC++で自作のコントロールを作成するにはどうしたらいいのでしょうか?
何か参考になるサイト等ありましたら教えてください。

740 :デフォルトの名無しさん:2014/05/11(日) 18:03:07.78 ID:3rgSCy+h
なんでもできる言語ならC++よりDのほうが優れてる

741 :デフォルトの名無しさん:2014/05/11(日) 18:05:01.02 ID:c0OeZBBH
どうして「自作」のコントロールの作成の方法を他人に聞くことができようか

742 :デフォルトの名無しさん:2014/05/11(日) 20:04:39.09 ID:5bM6wK/T
>>739
プロジェクト新規作成時に選べたと思うが
VS Express だと駄目かもしれない

743 :デフォルトの名無しさん:2014/05/11(日) 20:09:05.83 ID:ODutmrkY
>>741
すみません書き方が悪かったです
『コントロールを自作するにはどうしたらいいのでしょうか?』です。

>>742
見てみたのですが、どうやらC#にしかないようです。

744 :デフォルトの名無しさん:2014/05/11(日) 20:14:34.75 ID:ZWuwy5hl
COMとかOLEとか、そんな話になってくるんじゃないかな
めっちゃ複雑だった気がする

745 :デフォルトの名無しさん:2014/05/11(日) 20:29:57.94 ID:5s3TJsCS
>>743
RegisterClassExから説明しなきゃならない感じか?

746 :デフォルトの名無しさん:2014/05/11(日) 20:35:08.14 ID:4i0nWw5y
i unknown

747 :デフォルトの名無しさん:2014/05/11(日) 20:53:12.56 ID:ODutmrkY
>>475
すみませんパッと言われてみて、その辺もよく分かってないです。
ウインドウという概念、コントロールもウインドウだという事、
メッセージの送受信で処理をすること等はなんとなく理解はしているつもりです。
win32プロジェクトでいくつか簡単なプログラムを作成したことがある程度の知識です。
MFCの方はもう少し複雑な処理を書いたこともあり、そちらで複数列のコンボボックスが使用したいと思ったので、
今回なんとか作成できないかと思い、ここで質問させて頂きました。
RegisterClassExについても調べてみたいと思います。

748 :デフォルトの名無しさん:2014/05/12(月) 01:14:45.16 ID:ZtmTFQ/l
あれ、勘違いした・・・これはもしかして
MFCのコントロールクラスのはせいのしかた
からやるべきなのか?

749 :デフォルトの名無しさん:2014/05/12(月) 18:36:35.66 ID:KmN96Zov
>>748
遅くなってすみません。
MFCのコントロールの派生は大丈夫です。
MFCを使っているので派生して作るのも一つの手だと思ったのですが、
どうせならMFCじゃなくても使えるようにWindowsApiだけで作れたら汎用性があるのかなと思って質問させて頂きました。
とは言え、派生しても複数列ってのが難しくて悩んでいるのですが…。
OwnerDrawを駆使して作成するという認識であっていますでしょうか?

750 :デフォルトの名無しさん:2014/05/12(月) 19:05:39.74 ID:qQEXXTyX
>>749
http://bbs.wankuma.com/index.cgi?mode=al2&namber=12931&KLOG=28
ここにあるやり方が簡単だよ

751 :デフォルトの名無しさん:2014/05/12(月) 19:51:12.16 ID:KmN96Zov
>>750
レスありがとうございます。
見たところ.netでの方法だと思うのですが、
出来れば.netは使わずネイティブで作成したいと思っています。
イメージ的にはC#のコンボボックスでDatatableクラスをコントロールソースにした感じ?が理想です。
配列か何かで複数列のソースを指定するか、列を追加するメソッド等を実装できればと思っています。

752 :デフォルトの名無しさん:2014/05/12(月) 20:48:14.29 ID:sxPScMrF
>>751
複数行かと思ってレスしてたわ
複数列ならさらに簡単で
単なるListViewのレポートでイケるでしょ
全列挙して各colを更新し同期すればいいだけ

753 :デフォルトの名無しさん:2014/05/12(月) 21:10:09.09 ID:KmN96Zov
>>752
知識不足でおかしなことを言ってしまったらすみません。
コンボボックスの中にリストコントロールを作成するってことでしょうか?
コンボボックス自体は派生してイベント等で独自の処理をする事は経験があるのですが、
OwnerDraw等で独自の描画等の処理はしたことがないので、よく理解できていません…。

754 :デフォルトの名無しさん:2014/05/12(月) 21:19:22.64 ID:kKPqoo3Y
ドロップダウンなスタイルの時の話じゃね?

コントロールそのもののハンドルと、選択時ドロップダウン部分が別のウィンドウになってて、
うがーめんどくせー ってなった記憶がある

755 :デフォルトの名無しさん:2014/05/12(月) 21:27:22.56 ID:KmN96Zov
>>754
私が作りたいのもドロップダウンなスタイルなのです。
別のウィンドウなんですか…!?
なんだか難しそうですね…C#がとてつもなく簡単に使えるので、
そこまで難しくないのかと勝手に思っていたのですが、かなりややこしそうですね。
色々検索してはみるのですが、出てこないってことはそもそも需要がないのでしょうか?
それともみなさんUIは.Net等で作成されているってことなんでしょうか。

756 :デフォルトの名無しさん:2014/05/12(月) 21:35:23.96 ID:K6iM2Dlu
そこまでするならオーナードローじゃなくて自作する

757 :デフォルトの名無しさん:2014/05/13(火) 00:49:36.50 ID:P5bQGXnC
visual studioでプログラミングしてふと思ったんだけど依存関係とかってどこで処理してんの?
まったく気にしてなかったけどなんでmakefileとかないのに動いてんの?
教えてエロい人

758 :デフォルトの名無しさん:2014/05/13(火) 00:54:44.05 ID:fafhaNgG
パーサ動いてんだろ

759 :デフォルトの名無しさん:2014/05/13(火) 01:41:24.69 ID:kDNoyhrO
http://maguro.2ch.net/test/read.cgi/pc2nanmin/1372918692/145
  ↑ ↑ ↑ ↑ ↑ ↑

760 :デフォルトの名無しさん:2014/05/13(火) 02:18:53.08 ID:rd0Xfng7
>>755
http://www.codeguru.com/ にいい感じのがあったら
パクったり好みに合わせていじったりしてる

761 :デフォルトの名無しさん:2014/05/13(火) 07:02:10.03 ID:Smp1YCMo
ActiveXの話かな

762 :デフォルトの名無しさん:2014/05/13(火) 09:56:10.17 ID:I3YIR7QR
>>757
makefileより細かい精度でやってる
巨大な管理情報のファイル作ってるだろ

763 :デフォルトの名無しさん:2014/05/13(火) 15:20:21.47 ID:tyk0IHyp
すいません、winsock.hでソケットに関するプログラミングをしていて、

WSADATA やWSAStartupなどがコンパイル時にundefinedとなってしまいます

コンパイラはgccをつかっているんですが、これは型が古いせいでしょうか?

764 :デフォルトの名無しさん:2014/05/13(火) 15:34:22.46 ID:8dff/8hW
winsock2.hを使え

765 :デフォルトの名無しさん:2014/05/13(火) 15:36:53.08 ID:tyk0IHyp
入れ方が解りません どうしたらいいんでしょうか
ダウンロードしてくるのはできるとして、
どこのディレクトリに?

766 :デフォルトの名無しさん:2014/05/13(火) 15:39:26.36 ID:8dff/8hW
gcc --versionでgccのバージョン調べろ

767 :デフォルトの名無しさん:2014/05/13(火) 15:40:51.29 ID:tyk0IHyp
2.95です

768 :デフォルトの名無しさん:2014/05/13(火) 15:46:13.74 ID:8dff/8hW
古すぎ

古いのをアンインストールした後、最新のMinGW gcc + MSYSをインストールして使え

769 :デフォルトの名無しさん:2014/05/13(火) 15:47:24.36 ID:tyk0IHyp
わかりました トライしてみます! ありがとうございます!

770 :デフォルトの名無しさん:2014/05/13(火) 18:21:16.99 ID:+N5p/ipx
vectorの勉強中です。
VS2013でC++のコンソールプロジェクトで以下のように1次元配列のary[200]をnewで確保して、
要素を10個追加して、deleteしています。それを何回も繰り返しています。
これだと上手く行くのですが、コメント化しているcalloc/freeの方法でやると、
同じように動くことは確認したのですが、タスクマネージャで見ていると、
メモリの使用量がどんどん増えていきます。C++ではnew/deleteを使うべきで、calloc/freeは
使わないほうが良いのかもしれませんが、原因がわからないとスッキリしないので、原因教えてください。

#include <vector>
void main()
{
const int rows = 200;
for (int i = 0; i < 1000000; i++){
std::vector<int> *ary;
//ary = (std::vector<int> *)calloc(rows, sizeof(std::vector<int>));
ary = new std::vector<int>[rows];
for (int r = 0; r < rows; r++){
for (int j = 0; j < 10; j++){
ary[r].push_back(j);
}
}
//free(ary);
delete[] ary;
}
return;
}

771 :デフォルトの名無しさん:2014/05/13(火) 18:55:03.63 ID:w7t3FyZp
vectorのデストラクタ呼んでないからvectorの管理しているヒープが解放されてないんでそ

772 :デフォルトの名無しさん:2014/05/13(火) 19:29:16.81 ID:+N5p/ipx
>>771
ありがとうございました。デストラクタ呼び出したら解決しました。
ところで、もう一つ教えてください。
calloc(rows, sizeof(std::vector<int>))を
malloc(rows * sizeof(std::vector<int>))に変えると
ビルドできるのですが、実行時にエラーします。理由を教えてください。

773 :デフォルトの名無しさん:2014/05/13(火) 19:35:06.68 ID:uagFReCc
内部メンバが不定値になり有効状態と誤認される

774 :デフォルトの名無しさん:2014/05/13(火) 19:46:00.63 ID:8dff/8hW
コンストラクタ/デストラクタを呼んでいないから

775 :デフォルトの名無しさん:2014/05/13(火) 19:46:02.70 ID:E1rz5Jx8
>>773=バカ
それで説明しているつもりか

776 :デフォルトの名無しさん:2014/05/13(火) 19:50:28.75 ID:fafhaNgG
new メモリの確保を行い、コンストラクタを呼ぶ
malloc/calloc メモリの確保のみ

自分でなんちゃってvectorを実装してみればわかると思うよ

777 :デフォルトの名無しさん:2014/05/13(火) 19:50:33.59 ID:uJ550Ha4
vectorつかうならポインタ使わずvectorに統一しろよ

vector< vector<int>* >

でとんな不具合が。

778 :デフォルトの名無しさん:2014/05/13(火) 19:51:29.60 ID:fafhaNgG
callocメモリの確保のみって嘘やな(´・ω・`)
まあわかるよね

779 :デフォルトの名無しさん:2014/05/13(火) 19:52:56.76 ID:uJ550Ha4
と言いつつ、自分もポインタ使ってたわけだが。
2次元配列確保する部分では、vectorに統一はしている。

780 :デフォルトの名無しさん:2014/05/13(火) 20:07:54.53 ID:nCUevE/p
malloc,freeは配置new,配置deleteと併用する
newしたものはdelete[]せずにdeleteする

781 :デフォルトの名無しさん:2014/05/13(火) 21:24:22.23 ID:h2Azkgx1
vectorじゃなくてnew[] delete[]を使う利点ってどんなのがあるの?

782 :デフォルトの名無しさん:2014/05/13(火) 21:27:35.75 ID:p6Lokthw
>>781
ムーブコンストラクターがある今となっては
レーゾンデートルは皆無

783 :デフォルトの名無しさん:2014/05/13(火) 22:03:16.81 ID:P5bQGXnC
mingwとvsってどっちのが速いの?
コンパイル速度とか最適化的に

784 :デフォルトの名無しさん:2014/05/13(火) 22:08:57.24 ID:wFTxwZ90
>>783
どちらもVSだろうね

785 :デフォルトの名無しさん:2014/05/13(火) 22:23:30.72 ID:wE5efFNg
>>781
ベンチしてみなされ

786 :デフォルトの名無しさん:2014/05/13(火) 23:09:50.87 ID:I3YIR7QR
>>783
比較しようと考えることすらおかしい

787 :デフォルトの名無しさん:2014/05/13(火) 23:15:38.37 ID:dNR2qCU+
Treeviewの子ノードをダブルクリックで、子フォームを表示させたいのですが、
Form2Obj = gcnew Form2();
Form2Obj->ShowDialog();
の周りの条件文はどのように書けば良いでしょうか。

ノード1---ノード2
といったもので行っております。
visual studio 2010を使用しています。

788 :デフォルトの名無しさん:2014/05/13(火) 23:16:59.41 ID:RSJvu3WH
そんなこともわからないのになんでC++/CLIとか使ってんの?
C#かVB.NETでやれ

789 :787:2014/05/13(火) 23:22:39.78 ID:dNR2qCU+
C++始めて2日なので...
調べてみた結果、C#の方が目的は達成できそうですので、
そちらにしようと思いました。
C齧っただけでは、何とかなりませんでしたね。

790 :デフォルトの名無しさん:2014/05/13(火) 23:24:29.33 ID:wwrEnEuU
初心者はなぜC++/CLIに進んでしまうのか…
あんな見えてる地雷よく踏めるもんだ

791 :デフォルトの名無しさん:2014/05/13(火) 23:33:35.40 ID:h2Azkgx1
個人的にC++/CLIは
String^ ←この^ってなによ気に食わん
と思いました

792 :デフォルトの名無しさん:2014/05/13(火) 23:39:35.56 ID:RSJvu3WH
C++ではない、きみがやっているのはC++/CLIだ。
オーストラリアにいてオーストリアにいるというようなものだ

793 :デフォルトの名無しさん:2014/05/13(火) 23:51:20.57 ID:dNR2qCU+
すいません色々間違えてしまって...
C#で無事できました。ありがとうございました。

794 :デフォルトの名無しさん:2014/05/14(水) 00:17:32.28 ID:8mu135r/
だけどやっぱりc++/cliの魔改造っぷりは使いこなせたらかっこいいだろ

795 :デフォルトの名無しさん:2014/05/14(水) 00:24:43.85 ID:hD/bpS5R
あんなもん書き始めて数時間で投げたわw
サンプルコードもC#かVB.NETだけなこと多いし何より七面倒臭いだろアレ……

796 :デフォルトの名無しさん:2014/05/14(水) 00:56:28.52 ID:+eGAQ9pX
>>791
Pascal の真似じゃね?

>>794
2008 か 2010 かは忘れたけど、
C++/CLI だけインテリセンス効かないとか、MS からも継子扱いされてる言語に明日はないと思う。

797 :デフォルトの名無しさん:2014/05/14(水) 00:57:14.87 ID:emzrQeCt
インテリセンスは復活しただろ?

798 :デフォルトの名無しさん:2014/05/14(水) 00:57:16.92 ID:tdD3kh5P
インテリセンスと言語は関係なくないか。

799 :デフォルトの名無しさん:2014/05/14(水) 02:09:38.63 ID:+eGAQ9pX
>>797-798
そういう扱いだってこと。

800 :デフォルトの名無しさん:2014/05/14(水) 02:18:23.90 ID:emzrQeCt
C++とC#が存在する限りなくならんだろう
まぁメインで使う言語ではないが

801 :デフォルトの名無しさん:2014/05/14(水) 07:55:10.89 ID:HVjR+QBF
>>800
むしろそいつらあるから、存在価値がなくなってるだろ

802 :デフォルトの名無しさん:2014/05/14(水) 08:16:54.30 ID:/2MvpkXV
C++/CLIは必要に駆られた時にのみ使う言語だとは思うが
存在意義がどーのというほど役立たずじゃない

803 :デフォルトの名無しさん:2014/05/14(水) 08:43:30.89 ID:Y8CCGqOw
使い分けが出来ない雑魚なんだろ

804 :デフォルトの名無しさん:2014/05/14(水) 12:05:44.55 ID:HVjR+QBF
客の要望とか、上司の横暴以外で C++/CLI を使う状況が想像できないんだが w
ツールベンダーも軒並みシカトしてるしなぁ

805 :デフォルトの名無しさん:2014/05/14(水) 12:17:10.29 ID:AZmox6CM
おれはcとC++だな、汎用性あるし
C#とかMSだけじゃん、意味ねーしw

806 :デフォルトの名無しさん:2014/05/14(水) 17:47:07.40 ID:w8WpEYK4
じつはMSではなくてXamarinが牛耳っているのだよ

807 :デフォルトの名無しさん:2014/05/14(水) 22:32:10.07 ID:1ABMywST
>>804
客の要望ってw
わざわざC++/CLI指定する客なんてどこにいるんだよ。
普通はC#とC++の資産を併用しなきゃならんときにしぶしぶ使うもんだろ。

808 :デフォルトの名無しさん:2014/05/14(水) 22:51:01.75 ID:BwmP0C3S
>>807
ここにいるぞ!

809 :デフォルトの名無しさん:2014/05/14(水) 22:55:31.55 ID:+QpfAcdH
C++とC#の資産があっての話だろ?

810 :デフォルトの名無しさん:2014/05/14(水) 23:16:17.98 ID:/LCuFxtM
>>807
ここにもいるぞ!

811 :デフォルトの名無しさん:2014/05/14(水) 23:43:50.04 ID:HVjR+QBF
>>807
過去二回あったよ。

て言うかお客さんが

> 普通はC#とC++の資産を併用しなきゃならんとき

の状況になったんだろ。
ちょっと頭があればそれぐらい思い付きそうなもんだが (w

812 :デフォルトの名無しさん:2014/05/15(木) 08:57:57.73 ID:LD1u0cAx
久々にC言語つかったが、なんともいえぬ原始的な香りがいいな
偽はゼロで真はそれ以外! それでなくっちゃな
もろ科学や、科学やで
true and falseなんてのはな、使う奴がバカだとすぐに
「真なるものがあり、そうでないものは偽である」
なんて思っちまう
そりゃ科学じゃねえ、だだの形而上学、神学だ
久々に使ったら
bool flg = 1;
while flg {
....
if (!cont) flg = 0;
....}
は駄目なんだなあ
 while (flg)
にしないと。
Schemeの環境モデルで関数オブジェクトを作りフィールド変数を
設定することをC言語だとローカルstatic使えばいいわけだから楽だな。原始的だからわかりやすいし。たとえば
int foo-object (method value) {
static int field1 = 1000;
....}

(define foo
(lambda (fielsd1)
(lambda (method value)
.....)))
(define foo-object (foo 1000))
になるようだな

813 :デフォルトの名無しさん:2014/05/15(木) 09:28:28.42 ID:OyUuOS8e
おちつけ
そしてまず日本語として通る文章を書け

814 :デフォルトの名無しさん:2014/05/15(木) 09:47:20.71 ID:uoR1Pk2D
>>812
お薬増やしておきますね

815 :デフォルトの名無しさん:2014/05/15(木) 09:50:13.84 ID:xTU4tsuP
そもそも「true=1でfalse=0」は常識、というわけではないだろ……
(規格的に「trueは0以外」「false=0」は確定。
つーか真偽専用なんだから普通の数字なんか入れるものじゃない)
もっとも、定義上はfalseの方しか確定じゃないから、判定する論理式の中には
trueよりfalseの方を使った方が安定といえば安定

816 :デフォルトの名無しさん:2014/05/15(木) 10:21:24.58 ID:Dz76ACJj
まーた規格を読んでない奴が規格的にとか言ってるわ

817 :デフォルトの名無しさん:2014/05/15(木) 11:08:45.88 ID:OyUuOS8e
ISO/IEC 9899:2011 p7.18より
『true which expands to the integer constant 1,
false which expands to the integer constant 0』

p6.5.9 Equality Operators
『Each of the operators yields 1 if the specified relation is true and 0 if it is false』

printf("%d", (int)(bool)100)
 →1

818 :デフォルトの名無しさん:2014/05/15(木) 11:27:36.17 ID:zU62setb
君たち、科学哲学とか弱いんだな
どうもちんぷんかんぷんのようだ
ま、Cでプログラム作る分にはそれでもやれるしな
あはは
さってとじゃね

819 :デフォルトの名無しさん:2014/05/15(木) 12:09:03.38 ID:8MS98tJI
int の値が true と判断される (これは 0 以外) ことと、true を int にした値 (これは 1) の区別がついてない奴なんていないよね?

820 :デフォルトの名無しさん:2014/05/15(木) 12:38:56.20 ID:eNbFmNO2
真を整数に変換すると1になる事と
真が1であるというのは
全く異なる
ヌルポインタを評価した場合非ゼロが偽になり得る

821 :デフォルトの名無しさん:2014/05/15(木) 12:59:31.94 ID:8MS98tJI
>>820
> 真が1であるというのは

誰もそんなことは言ってないんだが、いきなりどうした?

822 :デフォルトの名無しさん:2014/05/15(木) 13:15:27.84 ID:B0macvVa
非ゼロはヌルポインタじゃないだろ

823 :デフォルトの名無しさん:2014/05/15(木) 13:18:22.40 ID:lkL/c86t
だよな・・・?
bool b = (bool)NULL;
bがtrueなる場合がある?

824 :デフォルトの名無しさん:2014/05/15(木) 13:22:26.92 ID:mVM4WfmV
ががが>>820>>822

825 :デフォルトの名無しさん:2014/05/15(木) 13:44:06.84 ID:eNbFmNO2
ヌルポインタはゼロと比較すると真になるがゼロではない
NULLマクロはまた別の話

826 :デフォルトの名無しさん:2014/05/15(木) 13:46:07.54 ID:k3igCpcm
じゃ数値として何が入ってるんだい?

827 :デフォルトの名無しさん:2014/05/15(木) 13:48:59.79 ID:lkL/c86t
ちょっとわからないから
>>820の主張を再現する具体的なコードをですね

828 :デフォルトの名無しさん:2014/05/15(木) 13:54:18.54 ID:eNbFmNO2
レジスタやメモリに何か入るかは実装依存だが無関係

829 :デフォルトの名無しさん:2014/05/15(木) 15:16:49.88 ID:jWapkBys
ムカデが出た。ストラウストラップは強かった

830 :デフォルトの名無しさん:2014/05/15(木) 15:33:59.10 ID:dcCiIuDJ
true=1 false=0 では無い。が、コンパイラによってはそれでOKなのも有る。
trueとfalse は boolen型だから数値では無い。

数値として扱ったら駄目 不具合が出る

831 :デフォルトの名無しさん:2014/05/15(木) 15:51:02.11 ID:NOa2hkwU
普通に 
bool bFlag;
0.5*bFlag とかするよね

832 :デフォルトの名無しさん:2014/05/15(木) 16:08:04.22 ID:fPGh8jFP
>>831
昔はしてたけど今はしなくなった。

833 :デフォルトの名無しさん:2014/05/15(木) 17:08:23.03 ID:VGaH25Rt
>>831
何の意味?

834 :デフォルトの名無しさん:2014/05/15(木) 17:12:27.88 ID:eNbFmNO2
頭の悪いやつ用にブーリャン型がてきてめんどいわ

835 :デフォルトの名無しさん:2014/05/15(木) 17:14:48.97 ID:+DAA7cFt
==TRUE とかバカ過ぎてワロエルw

836 :デフォルトの名無しさん:2014/05/15(木) 17:32:45.77 ID:5sMFAW9N
わらえねーよ 悪寒がするよ

837 :デフォルトの名無しさん:2014/05/15(木) 18:04:54.77 ID:aAeHLPhS
>>835
それ見たら「今すぐ書いた奴○せ」の目印だから、まあよい。
それを平然と書ける奴は知能の面でいろいろ危険。
オランウータンに刃物持たせるが如し。

838 :デフォルトの名無しさん:2014/05/15(木) 18:32:04.24 ID:UdRBY7VJ
プログラマの墓場だな

839 :デフォルトの名無しさん:2014/05/15(木) 18:41:31.33 ID:BKKi1ys9
>>823
それはないが
bool b = (bool)(void *)NULL;
ならあるな

840 :デフォルトの名無しさん:2014/05/15(木) 18:47:31.92 ID:4Th7kZ7E
trueの等価か否かはC/C++言語ローカル問題だから使う上で知ってて当然だがあげつらって騒ぐほどの事ではない
false や 0 や nil が同じ意味で使われかつ利用するライブラリやインタプリタの種類によって使い分けなきゃならん言語も有るし。

841 :デフォルトの名無しさん:2014/05/15(木) 19:07:36.74 ID:3a5kleH6
それより昔
bool b = false;
b++;
って無かったか?
何がしたいのかさっぱりわからなかった

842 :デフォルトの名無しさん:2014/05/15(木) 19:12:17.42 ID:1iZpvHMh
何それ初めて見た

843 :デフォルトの名無しさん:2014/05/15(木) 19:54:46.02 ID:KjqXcag5
b++;

b = true;

上の方が早い希ガス

844 :デフォルトの名無しさん:2014/05/15(木) 19:59:14.56 ID:UdRBY7VJ
incとmovの違いだな

845 :デフォルトの名無しさん:2014/05/15(木) 20:12:31.70 ID:NOFxC8X3
ちなみに、否定するには、!b より 1-b の方が命令少ないが、
x86だとバイト数変わらん。
RISC系だと性能差出るかも。

846 :デフォルトの名無しさん:2014/05/15(木) 20:13:27.00 ID:0ut8wgYA
プロセスAにある構造体aをプロセスB上でも弄れるようにするにはどうすれば良いでしょうか?
プロセスB上でプロセスAから取得した構造体aのポインタからメンバを読もうとすると
アクセス違反で終了してまいます。

847 :デフォルトの名無しさん:2014/05/15(木) 20:23:38.01 ID:Uxynwd2i
プロセス間通信だな
共有メモリとか名前付きパイプとかメールスロットとか

848 : ◆QZaw55cn4c :2014/05/15(木) 20:24:42.17 ID:EXuN6WUq
>>846
環境にもよるが,shared memory で調べてほしい
「プロセス」ごとに独自のメモリ空間をもっているのが普通

849 : ◆QZaw55cn4c :2014/05/15(木) 20:26:22.34 ID:EXuN6WUq
>>840
c# スレで話題になったね,C/C++ 流がボコボコにされていました,アハハ

850 :デフォルトの名無しさん:2014/05/15(木) 21:44:24.14 ID:nx9ZCNV+
空配列とかは言語によって真偽が違うんだよね

851 :デフォルトの名無しさん:2014/05/15(木) 22:39:00.54 ID:em21x65l
vectorの要素をforループする場合、iteratorでbegin,endをループするのと、
配列みたいに i=0からvector.size()まで vector[i]でループするのと、
何か違いがありますか?

852 :デフォルトの名無しさん:2014/05/15(木) 22:43:34.33 ID:1iZpvHMh
ありません

853 :デフォルトの名無しさん:2014/05/15(木) 22:43:56.77 ID:BJANWS4P
>>844
どうしてそう、息を吸って吐くように嘘が出てくるのか

854 :デフォルトの名無しさん:2014/05/15(木) 22:52:00.19 ID:KjqXcag5
ループ内部でvectorのサイズが変化する場合があるな

855 :デフォルトの名無しさん:2014/05/15(木) 23:19:19.73 ID:qq5GNXVQ
それはどちらのケースでもあるじゃん

856 :デフォルトの名無しさん:2014/05/15(木) 23:31:24.43 ID:gSHCwore
>>839
それもない
ポインタを真偽値に変換したらnullポインタは必ずfalse になる。
Cスタイルキャストじゃなくてreinterpret_castを使ったら意図通りにnullポインタが0でない処理系を判別できる。
bool b=(uintptr_t)((void*)0);
こうでもいい。

まあ、nullポインタが0でない処理系なんて使ったことありませんけど。

857 :デフォルトの名無しさん:2014/05/15(木) 23:34:03.27 ID:gSHCwore
>>851
ループの最中に要素の追加などをした場合イテレータは無効になる場合がある。

858 :デフォルトの名無しさん:2014/05/15(木) 23:48:47.76 ID:H8RGlgHK
>>856
つ OS/9
実記憶なOSはまだあるのよ

859 :デフォルトの名無しさん:2014/05/16(金) 00:09:52.38 ID:cZLVKnpq
>>858
???実記憶であることとnullの値は関係ないだろ
OS/9って本当にnull≠0なの?

860 :デフォルトの名無しさん:2014/05/16(金) 00:14:52.82 ID:fgvpMRFf
http://d.hatena.ne.jp/eel3/20120909/1347196154

861 :デフォルトの名無しさん:2014/05/16(金) 01:15:58.75 ID:QoHSVP+W
>>856
> Cスタイルキャストじゃなくてreinterpret_castを使ったら意図通りにnullポインタが0でない処理系を判別できる。
> bool b=(uintptr_t)((void*)0);
そんな保証もないよ。

862 :デフォルトの名無しさん:2014/05/16(金) 01:31:09.41 ID:poypvy+o
>>853
朝鮮人だからさ

863 : ◆QZaw55cn4c :2014/05/16(金) 02:49:01.28 ID:DN7u20iG
>>860
いにしえから,そう,まだ void がなかったころは,execl() の類の可変長引数の最終引数は (char *)NULL と書くのが儀式だった‥

864 :デフォルトの名無しさん:2014/05/16(金) 05:16:27.43 ID:5aDVfyXg
>>861
なにが言いたいのか

865 :デフォルトの名無しさん:2014/05/16(金) 20:26:00.99 ID:+KheQSD1
class MyClass{
...
};
を定義して、使う時に
MyClass *p = new MyClass();
MyClass mc = MyClass();
のように、どちらの方法でも使えると思いますが、何か違いはありますか?

866 :デフォルトの名無しさん:2014/05/16(金) 20:32:22.36 ID:4xC78i9I
deleteするまでアドレス有効
ブロック抜けたら無効

867 :デフォルトの名無しさん:2014/05/16(金) 20:40:08.50 ID:igo/DCLE
他の言語から来た人だろうか
とりあえずもう言われてるけど寿命が全然違う

868 :デフォルトの名無しさん:2014/05/16(金) 22:18:12.13 ID:+KheQSD1
>>866,867
ありがとうございました。

869 :デフォルトの名無しさん:2014/05/17(土) 01:38:37.64 ID:J6oJMsTV
>>865
>MyClass mc = MyClass();
>のように、どちらの方法でも使える
コムパイルが通る可能性は無くはないが
一時オブジェクトを作ってそれをもとにもう一つ作るなど無駄。
比較すべきは
MyClass mc;

870 :デフォルトの名無しさん:2014/05/17(土) 02:34:46.79 ID:CIZJhZT4
MyClass *Hoge(){
MyClass *p = new MyClass();
(略)
return p;
}

MyClass &Hoge(){
MyClass &mc = MyClass();
(略)
return mc;
}

どっちが良いですか?

871 :デフォルトの名無しさん:2014/05/17(土) 02:38:26.29 ID:C8xivB5g
良し悪し以前の問題かと

872 :デフォルトの名無しさん:2014/05/17(土) 02:54:38.71 ID:LcRmehIv
>>870
下は動かないので上の方がいい

MyClass Hoge(){
 MyClass mc;
 (略)
 return mc;
}

873 :デフォルトの名無しさん:2014/05/17(土) 03:29:06.20 ID:QenhlCSV
本日のNG推奨IDはこちら

ID:LcRmehIv
ID:CIZJhZT4

874 :デフォルトの名無しさん:2014/05/17(土) 06:38:58.51 ID:lmWxNHfJ
>>869
それ一時オブジェクト作られるんだっけ?

875 :デフォルトの名無しさん:2014/05/17(土) 06:46:46.31 ID:kpm9Xhi5
>>870
上のやり方は戻り値を自前で破棄しないといけないことに気付いているのか?
どっちがいいと聞いてくる時点で同等に思っているっぽいけど

876 :デフォルトの名無しさん:2014/05/17(土) 07:05:55.68 ID:ywqXIraQ
インスタンスを返すなら
これでいいのかな

MyClass* Hoge(){
 MyClass mc;
 (略)
 return &mc;
}

877 :デフォルトの名無しさん:2014/05/17(土) 07:11:09.67 ID:kpm9Xhi5
>>876
それ、なにもかえってこないぞ多分

878 :デフォルトの名無しさん:2014/05/17(土) 07:13:44.44 ID:L07S2pKr
>>876
>>872に正しいコードが書いてあるのにどうして読まないの?

MyClass Hage(){
 MyClass mc;
 return mc;
}
または
MyClass * Hage(){
 MyClass * pmc = new MyClass();
 return pmc;
}
または
std::unique_ptr<MyClass> Hage(){
 std::unique_ptr<MyClass> sumapo(new MyClass());
 return sumapo;
}

879 :デフォルトの名無しさん:2014/05/17(土) 07:18:29.49 ID:ywqXIraQ
マジかすまん
勘違いしてた
そっかHogeがオワタ時点でmcは破棄されるのか
俺アホすぎワロスwww

880 :デフォルトの名無しさん:2014/05/17(土) 09:07:39.51 ID:bRcULvwX
>>866で言ってるのにな

881 :デフォルトの名無しさん:2014/05/17(土) 10:52:45.13 ID:v/pj/1aT
ワシにはわからん

882 :デフォルトの名無しさん:2014/05/17(土) 11:42:39.80 ID:+rGJT6dM
やれやれだぜ

883 :デフォルトの名無しさん:2014/05/17(土) 11:48:10.75 ID:nwVOk95Q
よくからんからチンコこする

884 :デフォルトの名無しさん:2014/05/17(土) 12:11:11.90 ID:Ut3rni4+
factoryみたいなことやりたいのかしら

885 :デフォルトの名無しさん:2014/05/17(土) 12:30:18.64 ID:YgdJ98+v
ポインタの勉強中に気になったんで質問

NumA×NumBの配列のポインタを用意する記述として
b=malloc(sizeof(int*)*NumA);
for(int i=0;i<5;i++){
b[i]=malloc(sizeof(int*)*NumB);
}
みたいな記述を見つけたんだけど、これってやろうと思えば
b=malloc(sizeof(int*)*NumA);
for(int i=0;i<5;i++){
b[i]=malloc(sizeof(int*)*(i+1));
}
みたいにb[i]に割り当てる配列のサイズをバラバラにしたりとかできんの?
誰かよろ

886 :デフォルトの名無しさん:2014/05/17(土) 12:32:14.52 ID:pDUyUp0N
ジャグ配列ってやつだな

887 :デフォルトの名無しさん:2014/05/17(土) 12:36:33.17 ID:R4olBPWV
>>885
もちろんオーケー
と言うか*argv[]とかモロその発想だろ

888 :デフォルトの名無しさん:2014/05/17(土) 12:57:40.26 ID:v/pj/1aT
これならワシにもわかる

889 :デフォルトの名無しさん:2014/05/17(土) 14:01:43.36 ID:YgdJ98+v
>>886-888
サンクス

890 :デフォルトの名無しさん:2014/05/17(土) 14:18:12.91 ID:YgdJ98+v
初歩的な質問だけど
struct a{
int b;
char c[10];
};
struct a d[8];
ってなってる時に
e=sizeof(d);
ってした場合、e=8になる?それともdの中の変数bや配列cもカウントされて別の数値になる?

891 :片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/17(土) 14:24:18.57 ID:n6eabQOq
e == sizeof(struct a) * 8
になるね。

892 :デフォルトの名無しさん:2014/05/17(土) 14:41:29.86 ID:R4olBPWV
>>890
http://codepad.org/LSMsmSGR

893 :デフォルトの名無しさん:2014/05/17(土) 14:42:57.45 ID:YgdJ98+v
>>891
sizeof(struct a)によって数値が変化するのか

ってーことはもし
struct a{
int b;
char *c;
};
struct a *d;
っていう構造体でdをNumA個の配列、b=0、cをNumB個の配列にしたい時は
d=malloc(sizeof(a*)*NumA);
for(i=0;i<sizeof(d)/sizeof(struct a);i++){
d[i].b=0;
d[i].c=malloc(sizeof(char*)*NumB);
}
ってすればおk?

894 :デフォルトの名無しさん:2014/05/17(土) 14:47:29.21 ID:d2QcpThl
effective C++を読みました。
そこには内部のデータへのアクセスは最小限にするべきと書いてありました。
例えば分数クラスがあるとするじゃないですか。分数クラスに足し算メソッドを入れるのは
間違ってますか?分母と分子を取り出して計算してまた入れれはいいのですから。
この考え方についてどう思いますか?

895 :デフォルトの名無しさん:2014/05/17(土) 14:55:03.35 ID:R4olBPWV
>>893
sizeof演算子は、ポインタ相手に使うとポインタのサイズを返す。
つまり、mallocでどれだけ確保したかはsizeofでは分からない。
http://www.kis-lab.com/serikashiki/C/C03.html

書き直すとしたらこんな感じ?
http://codepad.org/6bSDZA3q

896 :デフォルトの名無しさん:2014/05/17(土) 15:00:25.69 ID:R4olBPWV
>>894
間違ってるとは言わないけど、その書き方だと例えば
 fraction a(1, 3), b(1, 2); //コンストラクタで代入。仮に「1/3」「1/2」の意味とする
 a.plus(b); //「a = a + b」の意味
みたいな書き方になるよ?
でも分数なんだから、普通に演算子のオーバーロードを使って
 a += b; //「a = a + b」の意味
みたいに書ける方が楽じゃない?

897 :デフォルトの名無しさん:2014/05/17(土) 15:02:27.20 ID:d2QcpThl
いやいや、a.puls(b)じゃなくて
puls(a,b)です。
aにa+bが入ります。

898 :デフォルトの名無しさん:2014/05/17(土) 15:02:56.87 ID:bRcULvwX
_msize()ってのがあるな

899 :デフォルトの名無しさん:2014/05/17(土) 15:05:10.17 ID:d2QcpThl
あるいは
void operator+=(fraction a, fraction b);
のような関数を定義します。

900 :デフォルトの名無しさん:2014/05/17(土) 15:12:24.48 ID:R4olBPWV
>>897
それメソッド(メンバ関数)じゃなくてただの関数だろ……
大体>>899で「operator+=」って書けるってことはさては知ってて聞いたか?

「内部のデータへのアクセスは最小限に」はそりゃそうだけど、
分数クラスで分子・分母に(メンバ関数などを通じて)アクセスするのは普通じゃん
分かりやすい例で行けば<complex>とかがそうだ

901 :デフォルトの名無しさん:2014/05/17(土) 15:36:28.47 ID:d2QcpThl
例えば、複素数の場合内部表現が実部、虚部の場合と
偏角と絶対値の場合があるじゃないですか?
もしメソッドにしてしまうと、内部表現を変えたら
すべてのメソッドも書き換える必要がありますよね。
でも関数なら書き換える必要がない。
というのが内部のデータのアクセスを最小限にする理由ですよね。

902 :デフォルトの名無しさん:2014/05/17(土) 16:08:20.96 ID:TQ+XKlgi
>>901
>でも関数なら書き換える必要がない。
それ、どんな魔法?

903 :デフォルトの名無しさん:2014/05/17(土) 16:29:01.04 ID:AqxEZVXM
メンバ変数のアクセスを最小限にする云々は巨大なクラスのメンバ変数は
グローバル変数と同じ問題を抱えることになるから気をつけましょうみたい
な極々単純な話なんじゃねーの?

904 :デフォルトの名無しさん:2014/05/17(土) 19:53:40.98 ID:viiN1KUU
分数をどうやって内部にアクセスせずに計算するのかは興味ある

905 :デフォルトの名無しさん:2014/05/17(土) 20:27:30.97 ID:te2IP1pO
メソッドですらも非公開プロパティを触れないのか?

906 :デフォルトの名無しさん:2014/05/17(土) 20:36:51.33 ID:uX7tOWvA
>>894
> そこには
(クラスの外から)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
> 内部のデータへのアクセスは最小限にするべきと書いてありました。

なので、>>897 とかはよろしくない。

907 :デフォルトの名無しさん:2014/05/17(土) 21:34:39.66 ID:te2IP1pO
フレンド関数の出番かと‥

908 :デフォルトの名無しさん:2014/05/17(土) 22:20:05.29 ID:v/pj/1aT
フレンドは最後の切り札と聞きましたが、結構使うもんなんですか。

909 :デフォルトの名無しさん:2014/05/17(土) 22:40:44.35 ID:kpm9Xhi5
お友達結構便利ダゼ☆

910 :デフォルトの名無しさん:2014/05/18(日) 00:36:49.59 ID:BExb4OPW
どうにも強く依存しちゃうような関係がクラス間にある場合
無理にpublicでやろうとすると、かえって内部が丸出しになっちゃって
いっそfriendにしたほうが、結果的に公開する情報を減らせることはあるね
まあ、それでも最後の手段にしたいのは事実だが…

911 :デフォルトの名無しさん:2014/05/18(日) 00:39:37.00 ID:eV8xCOTG
片想いだし

912 :デフォルトの名無しさん:2014/05/18(日) 00:41:20.73 ID:c000QlqK
namespace限定でpublicにする機能が欲しいよな

913 :デフォルトの名無しさん:2014/05/18(日) 01:29:18.46 ID:l5ZUM/Mk
ともだちんこー!!

914 :デフォルトの名無しさん:2014/05/18(日) 11:34:57.00 ID:IQqucOU+
>>913は昭和時代のヒキヲタ妖精アスペニート

915 :デフォルトの名無しさん:2014/05/18(日) 11:48:06.02 ID:uF8ItM3e
ポインタについて勉強中だけど質問
ポインタってどこかに用意した変数やら配列やらへのワープゾーンみたいなもんだと認識してるけど
int *a;;
a=(int*)malloc(sizeof(int*)*10;
って感じにaに10個の配列を用意した時に
int *b;
b=a;
ってやったらaに入ってたワープゾーンだけがbに入るの?それともaのワープゾーンにリンクしてた配列までコピーされるの?
せんせー教えてください

916 :デフォルトの名無しさん:2014/05/18(日) 11:49:57.38 ID:BRQ2ZbHh
前者

917 :デフォルトの名無しさん:2014/05/18(日) 11:50:50.44 ID:l5ZUM/Mk
ワ、ワープゾーン??

918 :デフォルトの名無しさん:2014/05/18(日) 11:51:16.38 ID:uF8ItM3e
センキュー

919 :デフォルトの名無しさん:2014/05/18(日) 11:53:39.52 ID:jESs8rMM
>>915
まず、ワープゾーンじゃないから訂正して学ぶように。

> リンクしてた配列までコピーされるの?

それがどこにコピーされると思う?

どこに?

あと、printf("%p", a)してみたり、
sizeof演算子でいろいろサイズみてみたりすると、
ポインタなるものが何なのかすぐ分かると思うよ。

920 :デフォルトの名無しさん:2014/05/18(日) 12:09:53.18 ID:eV8xCOTG
gcc ならsave-temps つけてasmのソース確認すれば
すぐ判ると思うのだが?

921 :デフォルトの名無しさん:2014/05/18(日) 12:33:24.21 ID:B6nRembq
喩えるなら学籍番号とかの方がいいと思うぞ

922 :デフォルトの名無しさん:2014/05/18(日) 13:19:55.42 ID:vXasxGe8
> int *a;;
> a=(int*)malloc(sizeof(int*)*10;

仮免もやれんレベル
死ね

923 :デフォルトの名無しさん:2014/05/18(日) 14:40:57.61 ID:e7YN7e31
>>920
アセンブラソース読める奴がこんな質問するわけねーだろw

924 :デフォルトの名無しさん:2014/05/18(日) 14:48:52.30 ID:BMv+P6U/
ワープゾーンだから場違いな奴が出てくるのも仕方ない

925 :デフォルトの名無しさん:2014/05/18(日) 15:11:36.79 ID:l5ZUM/Mk
やれやれだぜ

926 :デフォルトの名無しさん:2014/05/18(日) 15:21:56.40 ID:739gnFQ4
CreateProcess関数の第5引数をTRUEにして「プロセス継承」した筈の子プロセスを生成したのですが、
生成された子プロセス側から親プロセスの「プロセス継承」であるのを知るにはどうすれば良いでしょうか?

927 :デフォルトの名無しさん:2014/05/18(日) 15:31:32.83 ID:oE4mJBDf
>>926
ここで訊け
Win32API質問箱 Build117
http://toro.2ch.net/test/read.cgi/tech/1394156278/

928 :デフォルトの名無しさん:2014/05/18(日) 15:34:19.72 ID:BMv+P6U/
もちっと具体的に、それがわからないとどう困るのかを書くべき
ちなみに、親が開いた「各オブジェクトのハンドル」の継承やがな

929 :デフォルトの名無しさん:2014/05/18(日) 22:26:47.45 ID:ryRL0MNj
http://seclan.dll.jp/c99d/c99d04.htm
にある

//(2)プロトタイプ宣言
void sumup(int m, int n, int data[m][n]);
void sumup(int m, int n, int data[*][*]);
void sumup(int m, int n, int data[ ][*]);
void sumup(int m, int n, int data[ ][n]);

これって正しいですか?
関数の引数が2次元配列の場合、こういうふうにプロトタイプ宣言出来るんですか?

930 :デフォルトの名無しさん:2014/05/18(日) 22:44:59.09 ID:BRQ2ZbHh
はい

931 :デフォルトの名無しさん:2014/05/18(日) 23:24:37.39 ID:oxq+ikAO
>>929
あら
f(int m, int n, int a[m][n]) ならC99からは宣言も定義も可能なんだね
前回の質問にalloca()を使えとか、間違えて答えてしまった‥ごめんね
https://ideone.com/4Kq0MQ

932 :デフォルトの名無しさん:2014/05/18(日) 23:31:42.19 ID:untGUeAU
>>931
ググってもよく分からなかったんだが、[*][*]っていつからできるようになったの?

933 : ◆QZaw55cn4c :2014/05/18(日) 23:51:08.10 ID:oxq+ikAO
>>932
C99から

934 :デフォルトの名無しさん:2014/05/19(月) 00:08:12.45 ID:/174+P6q
そりゃ可変長が入った99からだろ

935 :デフォルトの名無しさん:2014/05/19(月) 00:22:56.96 ID:mLyDgbnZ
>>931
サンプルありがとうございます。
VS2013ではコンパイル出来ないのですが、C99対応していないのでしょうか?

936 :デフォルトの名無しさん:2014/05/19(月) 00:25:01.41 ID:pLiUIlla
ちょっとずつ対応してきてる
上のやつはまだ

937 :デフォルトの名無しさん:2014/05/19(月) 00:28:32.28 ID:jgU9zwCb
半分見捨てられてるよな。何年前の規格だよと。
需要もないんだろうけど。

938 :デフォルトの名無しさん:2014/05/19(月) 00:31:30.14 ID:jgU9zwCb
と書いたけど製品名Visual C++だしC言語は対応する気ないんじゃね?と思った。

939 :デフォルトの名無しさん:2014/05/19(月) 00:42:03.18 ID:pLiUIlla
VCといえばC++11の対応具合は

940 :デフォルトの名無しさん:2014/05/19(月) 01:08:22.63 ID:UDyOnYKb
>>938
俺もそう思う。
CはC++のCで十分って感じだろう。

941 :デフォルトの名無しさん:2014/05/19(月) 07:59:49.29 ID:k5xxXzF6
>>940
「C++のC」って何?

942 :デフォルトの名無しさん:2014/05/19(月) 08:03:37.20 ID:zHXgCe3L
>>938
それなりに対応してきてるけど C++ の方が優先度高いだろうし、その C++ からしていまいちだし...

943 :デフォルトの名無しさん:2014/05/19(月) 08:24:37.69 ID:YdMb7M2Q
それなりにC++11対応されてて普通に使う分には問題ないレベルだと俺は思うんだけど

944 :デフォルトの名無しさん:2014/05/19(月) 08:39:30.94 ID:JapMjw/D
>>941
拡張子 .c のファイルのコンパイルとか?

945 :デフォルトの名無しさん:2014/05/19(月) 08:44:09.77 ID:ajnPgsUX
VSっていちおうMSのプラットフォームのための開発環境なわけで、Cのみで開発できるのは
Win32くらいだからいまさら新しい規格に対応する必要性など感じていないんだろう。

946 :デフォルトの名無しさん:2014/05/19(月) 09:04:09.90 ID:mxK7K6eG
>>944
それコンパイラがC用に切り替えること多くね?
まあ厳密にはC言語⊂C++ではないが

947 :デフォルトの名無しさん:2014/05/19(月) 10:47:28.53 ID:yPaRcm/E
テンプレートマジック使うと名前解決が標準に合致しないからグダグダになるのがC++

948 :デフォルトの名無しさん:2014/05/19(月) 10:58:20.13 ID:72vGXIcK
>>947
kwsk

949 :デフォルトの名無しさん:2014/05/19(月) 11:26:22.43 ID:tHtfoV9l
Cに対応しますといったらバックエンド(組み込みとかの移植性)の方が求められる気がする
MS的にはうまみがない

950 :デフォルトの名無しさん:2014/05/19(月) 13:57:08.03 ID:xXRUxTPj
VC++のC99対応はFFmpegの為
割とマジで

951 :デフォルトの名無しさん:2014/05/19(月) 14:01:24.69 ID:/174+P6q
VC++ではコンパイルできないだろ
FAQに書いてあるし

952 :デフォルトの名無しさん:2014/05/19(月) 19:48:22.58 ID:00Yp1Qbf
>>945
正直いって逐次指定な配列を言語仕様に取り込むとか C99 は狂っているとしか
C89 でもう十分

953 :デフォルトの名無しさん:2014/05/19(月) 20:09:26.01 ID:6L2g2kAx
仕様策定グループのメンバーに破壊工作の刺客が送り込まれてるとしか

954 :デフォルトの名無しさん:2014/05/19(月) 20:41:37.56 ID:u0kYoYP8
new で生成したら必ず delete するって覚えとけば良い?
new で生成したわけじゃないのに delete が必要だったり
new で生成したのに delete が必要なかったり
なんてことはある?

955 :デフォルトの名無しさん:2014/05/19(月) 20:45:35.65 ID:pLiUIlla
スマートポインタというのがあってですね

956 :デフォルトの名無しさん:2014/05/19(月) 20:48:07.32 ID:Tviwz+y5
newされたものはdeleteするべし
ただし必ずしも自分でdeleteを書かなければいけないわけではない
スマートポインタに自動的に解放してもらうとかできる

957 :デフォルトの名無しさん:2014/05/19(月) 21:00:02.55 ID:tHtfoV9l
>>954
原則はそうだけど
new は僕がやるけどdeleteは君がやってねとかいうライブラリの関数はザラにあるし
範囲を抜けたら暗黙にdeleteを呼ぶ偽ポインタもある

958 :デフォルトの名無しさん:2014/05/19(月) 21:08:36.75 ID:6L2g2kAx
delete じゃなくて delete[] しないといけないものもあるから注意な

959 :デフォルトの名無しさん:2014/05/19(月) 21:25:23.22 ID:OdEJnfIS
factoryやfacadeで生成も隠蔽すればいいん?

960 :デフォルトの名無しさん:2014/05/19(月) 21:43:06.04 ID:9fJb4fn7
>facadeで生成も隠蔽

何故ここでファサードが関係?

961 :デフォルトの名無しさん:2014/05/19(月) 23:05:59.04 ID:HIpocQh2
テンプレートに詳しい人教えてください
https://ideone.com/rYzSkg [1]
二つのクラスがそっくりなので一緒にしたいと考えています.
https://ideone.com/uvxS69 [2]
このようにしたいのですが,宣言されてないよ!のエラーが出てしまいます
[1]はどうすれば統一できるでしょうか

962 :デフォルトの名無しさん:2014/05/19(月) 23:25:07.62 ID:/174+P6q
ttps://ideone.com/Q6PXEY

963 :デフォルトの名無しさん:2014/05/19(月) 23:38:03.44 ID:HIpocQh2
なるほど。typenameを使わないといけないのですね,ありがとうございました

964 :デフォルトの名無しさん:2014/05/20(火) 01:57:58.65 ID:lOxlpScD
質問するならゴミみたいなソースをダラダラと貼るな
問題が再現する最小のコードを貼れ

965 :デフォルトの名無しさん:2014/05/20(火) 07:41:27.49 ID:2b9b8/29
現実のストレスを発散するためにとりあえず叩けそうなのは叩いてみました

966 :デフォルトの名無しさん:2014/05/20(火) 07:57:00.60 ID:LPSd8BiO
>>961,962
テンプレート初心者なのですが、このクラスを使うときには
どんな風に記述するのでしょうか?

967 :デフォルトの名無しさん:2014/05/20(火) 08:16:14.35 ID:Lchk77nY
using SysClock = Clock;
とか
using NTimer = Timer<std::chrono::sys_clock>;
ってどういう意味?初めて見るんだけど…
俺の持ってるオライリーランゲージクイックリファレンスにも載ってないし(´・ω・`)

968 :デフォルトの名無しさん:2014/05/20(火) 08:44:37.30 ID:F/Uvd5NG
Template Aliases
11からの機能だからな

969 :デフォルトの名無しさん:2014/05/20(火) 09:32:45.61 ID:ZFteYQ7B
template typedef 存在していたのか

970 :デフォルトの名無しさん:2014/05/20(火) 20:40:05.67 ID:gnNGvPv6
細かいことだが>>967はAlias templatesじゃねーだろ
ただのalias-declaration

971 :デフォルトの名無しさん:2014/05/20(火) 21:00:50.26 ID:eMXV5lE3
スマートポインタって
どうやって、いらなくなったデータをいらないって判断してるの?
あと解放するタイミングはいつ?

972 :デフォルトの名無しさん:2014/05/20(火) 21:02:20.04 ID:+6kjiTDf
どこからも参照されなくなった時とか

973 :デフォルトの名無しさん:2014/05/20(火) 21:14:45.43 ID:XZ8PbsoH
>>971
ふつうは参照カウント

>>972
それはガペコレでもないと無理

974 :デフォルトの名無しさん:2014/05/20(火) 21:20:27.36 ID:JuF8aFg1
>>971
スマートポインターがスコープを抜けることで解放

975 :デフォルトの名無しさん:2014/05/20(火) 21:24:01.05 ID:fbMM1sIr
参照カウンタつきのスマポがあるらしい

976 :デフォルトの名無しさん:2014/05/20(火) 22:48:56.71 ID:nd0ZvrXw
classA->create()とかでオブジェクトのポインタ返してるメンバ関数をよく見かけるけどあれって勝手にdeleteされたり不安にならないの?

977 :デフォルトの名無しさん:2014/05/20(火) 22:49:36.19 ID:nd0ZvrXw
↑ユーザー側ではdeleteしなくてもいいようなやつね

978 :デフォルトの名無しさん:2014/05/20(火) 22:55:47.91 ID:fbMM1sIr
モノによってはそういうこともある
普通はすぐに処理して速やかに手放す
つかみっぱなしにする場合はきちんと仕様を確認する
ライブラリなんかだとそういう制約はドキュメントに書いてあるはず

979 :デフォルトの名無しさん:2014/05/20(火) 22:59:01.69 ID:nd0ZvrXw
言語レベルで制約は出来ないの?

980 :デフォルトの名無しさん:2014/05/20(火) 23:01:55.95 ID:LPSd8BiO
#include <iostream>
using namespace std;

class myBase{
public:
virtual void method(){
cout << "myBaseMethod" << endl;
};
};
class myClass:public myBase{
public:
virtual void method() override{
cout << "myClassMethod" << endl;
};
};

void main(){
myBase *pmb = new myClass();
pmb->method();

myBase mb = myClass();
mb.method();
}
これ実行すると
myClassMethod
myBaseMethod
と出るんですが、どうして二番目の方法ではoverrideできないのでしょうか?
数時間悩んだのですが分りません。ポインタを使わないとoverrideできない
のでしょうか?

981 :デフォルトの名無しさん:2014/05/20(火) 23:03:10.25 ID:fbMM1sIr
飽きたらポイされてもいいのよ☆ というときは weak_ptr とかいうのを使えるらしいが俺はやったことない

982 :デフォルトの名無しさん:2014/05/20(火) 23:03:31.52 ID:nd0ZvrXw
c#とはちがうんやで

983 :デフォルトの名無しさん:2014/05/20(火) 23:05:09.20 ID:BF5AHSio
>>980
myClass mc;
myBase &mb = mc;

984 :デフォルトの名無しさん:2014/05/20(火) 23:10:53.39 ID:nd0ZvrXw
>>980
myBase mb(myClass());
でコピーコンストラクタが呼ばれるから

985 :デフォルトの名無しさん:2014/05/20(火) 23:18:17.77 ID:Dt1y8Hrx
myBase mb;
これだけでmyBaseの実体ができる
これに何を代入してもmbはmyBaseのまま
構造体としてのデータのコピーが起こるだけ
参照じゃないところがJAVAやC#と違うところだよね

986 :デフォルトの名無しさん:2014/05/20(火) 23:30:46.78 ID:uQLrwk2U
>>973
> それはガペコレでもないと無理

意味がわからん、なんのための参照カウンタなんだ?

987 :デフォルトの名無しさん:2014/05/20(火) 23:38:06.92 ID:jIyo6zRD
>>986
参照カウント方式てのは
いくつかあるGC実装のなかの一つだよ

988 :デフォルトの名無しさん:2014/05/20(火) 23:44:23.11 ID:j4b0wmFL
ガベージコレクションって言われると
自然とマークアンドスイープが浮かぶ

989 :デフォルトの名無しさん:2014/05/20(火) 23:50:20.20 ID:LPSd8BiO
みなさんありがとうございます。
myBase &mbr = myClass();
mbr.method();
と書き換えたらoverrideできました。
でもまだよく分らないのですが、
> myBase mb;
> これだけでmyBaseの実体ができる
> これに何を代入してもmbはmyBaseのまま
> 構造体としてのデータのコピーが起こるだけ
データのコピーが起こったらmbの実体がmyClassに変わるのではないですか?
その結果、myClassのMethod()が呼び出されると思ったのですが。

990 :デフォルトの名無しさん:2014/05/21(水) 00:02:46.66 ID:U29LvGvw
コピーされるのはmyClassの中のmyBaseの部分だけだから

991 :デフォルトの名無しさん:2014/05/21(水) 00:03:18.97 ID:nM6Mwf45
myBase mb;のmbにはmyBaseの分のデータしかない(sizeofで比較すると分かる)ので、myClass型の値を代入するときにmyBaseの部分だけをコピーし、myClassの部分は消えてしまう
これをスライシングという

後myBase &mbr = myClass();だとmbrの実体が破棄されてしまうのでいけない
別に実体を確保しておくかconst参照を使うべき

992 :デフォルトの名無しさん:2014/05/21(水) 00:07:39.63 ID:zBFBEF37
>>987
std::shared_ptr も GC って言っちゃうの?

993 :デフォルトの名無しさん:2014/05/21(水) 00:08:04.36 ID:g8mAFBUR
>>988
俺はGCと言われると参照カウント・マーク&スイープ両方備えてるイメージを持つなー

994 :デフォルトの名無しさん:2014/05/21(水) 00:08:37.39 ID:U29LvGvw
右辺値だからそもそもコンパイル通らんがな

995 :デフォルトの名無しさん:2014/05/21(水) 00:16:24.91 ID:1n+UZynx
変なところで躓いたなw
クラスを継承使用って思ったら、*扱うって思っとけばいいのに。
クラスインスタンスを関数間で渡したかったら*で渡すって思ってたらいいのによお。

俺はうまく説明できんが、
c++ スライシングでggればわかる、とは思えないが一応キーワードだけ教えとく。
あとは、コピーコンストラクタだな。

http://amuraba.blog.fc2.com/blog-entry-113.html
http://www.xlsoft.com/jp/products/intel/compilers/ccw/12/pt_reference/pt_reference/references/sc_cpp_slicing_name.htm

996 :デフォルトの名無しさん:2014/05/21(水) 00:24:19.41 ID:JxdWfYNy
ムーブコンストラクタってなんなんですか?

997 :デフォルトの名無しさん:2014/05/21(水) 00:25:18.56 ID:U29LvGvw
右辺値を受け取るコンストラクタ

998 :デフォルトの名無しさん:2014/05/21(水) 00:35:16.35 ID:WX3/dXSq
>>992
言っちゃうよ
O(1)の配列だってhashのバリエーションだしな

999 :デフォルトの名無しさん:2014/05/21(水) 00:38:39.18 ID:W2g5L2xs
>>998
はあ、そうですか

1000 :デフォルトの名無しさん:2014/05/21(水) 00:47:46.18 ID:7hPk5/6F
右辺値とか左辺値とかはもうc++の魔境

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

220 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)