トップページ⇒tech
1001コメント276KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/03/25(火) 00:45:54.57ID: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ワードに追加しておくことが強く推奨されています。
0002デフォルトの名無しさん2014/03/25(火) 00:46:37.60ID:VoemgV7u
----テンプレここまで-----
0003デフォルトの名無しさん2014/03/25(火) 00:49:06.88ID:bvFcvrs8
このスレで質問することを禁ずる
0004デフォルトの名無しさん2014/03/25(火) 00:49:55.79ID:VoemgV7u
↑ いつものボット
0005デフォルトの名無しさん2014/03/25(火) 00:56:06.42ID:bvFcvrs8
このスレで質問するってことは無能である何よりの証拠
0006デフォルトの名無しさん2014/03/25(火) 08:45:20.17ID:b1DcnFZ1
>>1乙
0007デフォルトの名無しさん2014/03/25(火) 18:57:42.36ID:mtUgnBBf
新スレhoge記念
0008デフォルトの名無しさん2014/03/25(火) 21:01:46.39ID:A1lqZyhT
hogeは禁止されていません
自由に使って構いません
0009デフォルトの名無しさん2014/03/26(水) 00:51:02.53ID:oexEF2Zl
ここはhogeスレニダ。ウリのスレニダ
0010デフォルトの名無しさん2014/03/27(木) 21:24:22.59ID:bJmMH0bS
私はBorland C++を使ってプログラミングしているのですが、
makefileの使い方が分かりません。
どなたか教えてくれませんか?
0011片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/03/27(木) 21:55:02.97ID:pkdNwHUQ
>>10
Makefileがあるコマンドラインでmakeまたはmake -f Makefileを実行すると、ビルドが開始される。
make cleanでコンパイル後のオブジェクトをきれいさっぱり消す。
make (ルール名)でMakefileに書かれたルールを実行する。ルールは次のように記述する:

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

詳しくは附属のヘルプを見ろ
0012デフォルトの名無しさん2014/03/27(木) 21:55:09.35ID:iFr+67KQ
make
と入力してEnterをおします
0013デフォルトの名無しさん2014/03/27(木) 21:58:54.48ID:pkdNwHUQ
(誤)Makefileがあるコマンドライン
(正)Makefileがあるフォルダのコマンドプロンプト
0014デフォルトの名無しさん2014/03/27(木) 22:02:28.05ID:hIRwfa74
>Makefileがあるフォルダのコマンドプロンプト

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

古くないWindowsならShift+フォルダ右クリックでコマンドプロンプトが開ける
0016デフォルトの名無しさん2014/03/27(木) 22:10:06.86ID: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
0017デフォルトの名無しさん2014/03/27(木) 22:14:20.02ID:pkdNwHUQ
Borlandが古すぎる。BccInstでBCC55をインストールして使え
0018デフォルトの名無しさん2014/03/27(木) 22:18:41.99ID:pkdNwHUQ
コマンドプロンプトは、コマンドが入力できる黒い画面。古いWindowsならDOSプロンプト
0019デフォルトの名無しさん2014/03/27(木) 22:23:05.34ID:pkdNwHUQ
何でそんな古いコンパイラ使ってるの? 馬鹿にされるよ
0020デフォルトの名無しさん2014/03/27(木) 22:23:47.82ID:bJmMH0bS
ドライブ指定してmakefileに移動しようとしたら
「ディレクトリ名が無効です」になります。
0021デフォルトの名無しさん2014/03/27(木) 22:24:52.62ID:lIcuNLQ3
もうvisualstudio入れろよ
今更そんな古い環境使うとか苦行だろ
0022デフォルトの名無しさん2014/03/27(木) 22:25:13.90ID:pkdNwHUQ
「makefileに移動」じゃなくて「makefileのあるフォルダに移動」だよ
0023デフォルトの名無しさん2014/03/27(木) 22:28:10.86ID:bJmMH0bS
makeを入力すると、
'make'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたバッチファイルとして認識されません
とでます。
0024デフォルトの名無しさん2014/03/27(木) 22:28:38.98ID:pkdNwHUQ
別のドライブに移動したいときは「D:」のように入力してEnter
0025デフォルトの名無しさん2014/03/27(木) 22:31:28.19ID:ErFGKncP
パス通ってないだろ
0026デフォルトの名無しさん2014/03/27(木) 22:32:03.27ID:pkdNwHUQ
>>23
bccのインストールができてない。
まずは環境変数PATHを設定する。
「SET PATH=%PATH%;bccのあるフォルダへのパス」
0027デフォルトの名無しさん2014/03/27(木) 22:33:02.94ID:V0dGQBZu
>>23
プログラムの前にDOSの勉強をしろ
0028デフォルトの名無しさん2014/03/27(木) 22:41:07.96ID:pkdNwHUQ
古い!! ふるすぎる。。。(藁)
お前はそれでも地球人か!!!
0029デフォルトの名無しさん2014/03/27(木) 22:44:32.34ID:bJmMH0bS
インストールしました。
makeを押しても何の反応もありませんが。
0030デフォルトの名無しさん2014/03/27(木) 22:46:00.71ID:lIcuNLQ3
ダメだこいつ…
0031デフォルトの名無しさん2014/03/27(木) 22:47:11.61ID:pkdNwHUQ
エラーメッセージがなく、EXEが作成されてれば成功。
0032デフォルトの名無しさん2014/03/27(木) 22:47:17.82ID:bJmMH0bS
Copyrightが出てくるだけです。
0033デフォルトの名無しさん2014/03/27(木) 22:50:45.73ID:pkdNwHUQ
タブ文字って知ってる?
0034デフォルトの名無しさん2014/03/27(木) 22:51:15.73ID:bJmMH0bS
.exeは対象のプログラム名で出てくるのでしょうか?
それとも、makefile.exeのように出てくるのでしょうか?
0035デフォルトの名無しさん2014/03/27(木) 22:53:22.32ID:bJmMH0bS
タブ文字・・・分かりません。
makefileに書く書式でしょうか?
0036デフォルトの名無しさん2014/03/27(木) 22:58:18.30ID:bJmMH0bS
タブ文字調べました。
プログラムのスペース文字のことですね。
0037デフォルトの名無しさん2014/03/27(木) 23:04:46.62ID:pkdNwHUQ
キーボードの左側にあるTabというキーを打つと入力できる。
Makefile中のコマンドの前にはTab文字を入力しないといけない。
「CD」で現在のフォルダの場所(パス)を確認しろ。calc1.cを右クリックプロパティで場所を確認しろ。
0038デフォルトの名無しさん2014/03/27(木) 23:15:12.68ID:iFr+67KQ
Tabをおしてもタブ文字がはいらなかった場合は…
たとえば、4個の半角空白を\tに置換します
しかしそれができるエディタなら、タブ文字がはいるだろう
0039デフォルトの名無しさん2014/03/27(木) 23:19:21.00ID:bJmMH0bS
Tabで打ってませんでした。
パスとcalc1.cの場所は同じです。
0040デフォルトの名無しさん2014/03/27(木) 23:22:14.63ID:pkdNwHUQ
「DIR /W」した結果をここに貼れや

MakefileがMakefile.txtになってる可能性があるな
0041デフォルトの名無しさん2014/03/27(木) 23:27:47.79ID:bJmMH0bS
拡張子はつけてません
0042デフォルトの名無しさん2014/03/27(木) 23:30:50.82ID:pkdNwHUQ
Makefileは同じ場所にある?
念のために「DIR」して確認してくれ。
0043デフォルトの名無しさん2014/03/27(木) 23:36:59.26ID:TRNtuGkP
uuエンコードしてup
0044デフォルトの名無しさん2014/03/27(木) 23:39:08.03ID:bJmMH0bS
同じ場所にあります。
0045デフォルトの名無しさん2014/03/27(木) 23:39:22.57ID:LrW8OE+k
俺、子供の頃地球に住んでたことあるよ。
0046デフォルトの名無しさん2014/03/27(木) 23:40:29.85ID:fqEnNET5
>>24
変なこと教えるなよ。
ドライブごとのカレントフォルダーは
今となっては誰も欲してない機能なんだから
cd /d 移動先のパス
にしとけ。
0047デフォルトの名無しさん2014/03/27(木) 23:45:04.99ID:pkdNwHUQ
フォルダをZIP圧縮してアップローダーにアップロードしろ
0048デフォルトの名無しさん2014/03/27(木) 23:55:18.99ID:pkdNwHUQ
古過ぎるコンパイラは馬鹿には無理。
0049デフォルトの名無しさん2014/03/27(木) 23:58:38.08ID:pkdNwHUQ
It is impossible for fools to use too old compilers.
0050デフォルトの名無しさん2014/03/28(金) 00:02:57.04ID:CsDGXoI3
BorlandっていまやWin最強のコンパイラーだろ?
Clangになって一番すごいWinのコンパイラーに進化したらしいよな
0051デフォルトの名無しさん2014/03/28(金) 00:41:16.94ID:yDdY0uS3
VC++ EEじゃあかんのか
0052デフォルトの名無しさん2014/03/28(金) 00:52:34.68ID:vM8zXvpO
次のように表示されます。

bcc -N -v -w -ml -ecalc1 calc1.c
'bcc'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
** error 1 ** deleting calc1.exe
0053デフォルトの名無しさん2014/03/28(金) 01:08:29.53ID:a5++l4GP
>>52
じゃあパスが通ってないんだろう、環境変数のpathnの項を弄れ
やり方? bccの使い方を説明するサイトとか本にはだいたい載ってるだろと
0054デフォルトの名無しさん2014/03/28(金) 01:09:57.34ID:CsDGXoI3
>>52
違う,いまのBorlandは
clang -o calc1.exe calc1.c
0055デフォルトの名無しさん2014/03/28(金) 01:12:20.51ID:CsDGXoI3
>>53
Borlandにはbccなんてのはないから、当然>>52になる
0056デフォルトの名無しさん2014/03/28(金) 01:15:11.69ID:CsDGXoI3
おそらく、bccってやってるぐらいだからコンパイラ・リンカーのcfg設定すら出来てないだろうな
0057デフォルトの名無しさん2014/03/28(金) 01:21:27.24ID:ZLrJM0xQ
とりあえずフルパスでやってみろよ
0058デフォルトの名無しさん2014/03/28(金) 01:27:34.35ID:vM8zXvpO
cfg設定はしてます。
makeを入力すると52のように表示されます。
0059デフォルトの名無しさん2014/03/28(金) 01:29:03.46ID:vM8zXvpO
makefileは>>16のように記述したのですが間違っていますか?
0060デフォルトの名無しさん2014/03/28(金) 02:01:11.81ID:vM8zXvpO
CC=bcc32
に書き換えたら行けました。
そしたら今度は
コマンドオプションの間違い -ml
というエラーが出ました。
-mlをとってmakeをしたら上手くいきました。ラージモデル-mlは認識されていないのでしょうか?
教科書通りにしてるのにおかしいですね。
0061デフォルトの名無しさん2014/03/28(金) 02:34:35.65ID:Bi202b4z
>>60
俺Winの知識ないって自慢し過ぎ
bcc32に限らずwinのコマンドのオプションリスト表示すら出したことないだろ
winの経験が少しあれば普通はオプションリスト表示オプションを付けて起動して、
どんなオプション付けられ、それが何をするのか調べることぐらい出来ると思うが
winの場合のオプションリスト表示は /? ってのが普通(常識)
0062デフォルトの名無しさん2014/03/28(金) 02:42:52.86ID:oiG2WFSt
スモールモデル、ラージモデルは、16ビットの時代
0063デフォルトの名無しさん2014/03/28(金) 02:51:20.42ID:Bi202b4z
>>62
16bitとはおいおいすぎ><
16bitのプログラムを開発したいから、わざわざBorlandを選んだのかな
0064デフォルトの名無しさん2014/03/28(金) 05:13:02.52ID:FWVtOBdw
つーか、おまえらバカにして遊んでるだけだろ
0065デフォルトの名無しさん2014/03/28(金) 10:06:39.77ID:6uoLiniK
とんでもない。
馬鹿になんてしてないよ。
遊んでいることは否定しないけど。
0066デフォルトの名無しさん2014/03/28(金) 11:40:09.31ID:dRXuKu/3
>>64
そりゃsizeofをプリプロセッサが処理するような処理系を好んで使うような奴だもの
0067デフォルトの名無しさん2014/03/28(金) 11:52:19.86ID:WLy6H0qs
やっぱりねw
0068デフォルトの名無しさん2014/03/28(金) 12:29:41.58ID:dy0OpFC/
>>64
bccに-mlでバージョン出さない時点で普通に古いコンパイラを前提にするだろ
0069デフォルトの名無しさん2014/03/28(金) 13:04:27.64ID:RWL6RT/i
明示するだろ、JK
0070デフォルトの名無しさん2014/03/28(金) 17:42:32.13ID:vM8zXvpO
>>61
オプションリスト表示はどのように開くのでしょうか?
コマンドプロンプトに/?を入力しても反映されません。
0071デフォルトの名無しさん2014/03/28(金) 18:40:43.95ID:YNdMan3y
単に
bcc32
と入力してEnterをおします

むかしBorland C++Builder バージョン5か6のおまけとして
コマンドラインコンパイラのオプションの表が付属していました。
それと異なります。たぶん全部を表示しないと思われます
0072デフォルトの名無しさん2014/03/28(金) 18:47:27.10ID:YNdMan3y
>>19
いいコンパイラだよ
0073デフォルトの名無しさん2014/03/28(金) 18:50:58.97ID:YNdMan3y
calc1.cってなに?
0074デフォルトの名無しさん2014/03/28(金) 21:02:05.81ID:vM8zXvpO
>>71
表示されました。ありがとうございます。

>>73
今、オライリーのC実践プログラミングという教科書を使用しているのですが、
その中に例として出ているプログラムです。
0075 ◆QZaw55cn4c 2014/03/28(金) 21:16:01.34ID:oXAQt7Rw
>>72
そうそう、コードガードはわりと便利、評価版をダウンロードすればいいし
0076デフォルトの名無しさん2014/03/29(土) 12:43:43.99ID:OMABeBxL
本が古いなら、それに環境をあわせないと。
煽られているように、とりまそれ最新じゃないよ

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

2つ目
VisualStudioで作成したソースを、フリーで落とせる、C++の勉強に使っていたようなC++コンパイラでコンパイルすることはできるのでしょうか?
複数のファイルに分かれたようなプログラムを書いたことがないのでmakefileとかもよくわかってはいないし、目的があって他のコンパイラを使いたいわけでもないのですが、
VisualStudioで作成したソースはVisualStudioを使わないとコンパイルできない特殊な仕様なのか、
(ファイル間の関係を理解して正しくmakefileを書けば)あくまで普通のC++の仕様に従った、一般的なコンパイラが理解できるソースを作成しているのか知りたいと思っています。
0079片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/04/01(火) 19:06:36.07ID:28c8XDsv
1つめ。WinMain関数は自動リンクされるライブラリに含まれている。
有料VC++がインストールされているフォルダのどこかにMFCのソースがある。
初心者には膨大なのでgrepを使いこなさないと読めない。
WinMainとCWinAppを読めば動作がわかる。
2つめ。ソースプログラムやコンパイラによる。ソースがC++11なら
C++11に準拠したコンパイラでなければ使えない。
0080デフォルトの名無しさん2014/04/01(火) 19:14:53.77ID:KWNjZyFY
1つめはステップインで開始すればいい
0081デフォルトの名無しさん2014/04/01(火) 19:45:25.44ID:28c8XDsv
ヒント:C:\Program Files
0082デフォルトの名無しさん2014/04/01(火) 19:53:07.99ID:CqvqfScs
>>78
とりあえずVC++ExpressEdition触ってみたらいいと思う
0083デフォルトの名無しさん2014/04/01(火) 20:06:30.50ID:hppE64Hw
rc とか mc が無いとguiは難しいでしょうね
0084デフォルトの名無しさん2014/04/01(火) 20:27:34.83ID:PR3x9no5
>>82
素で言っているのか
0085デフォルトの名無しさん2014/04/01(火) 20:34:07.93ID:CqvqfScs
>>84
初期プロジェクトで既にウィンドウ生成までできてるから
流れ見るのならいけるんじゃね?
関数はもちろん調べながら
0086デフォルトの名無しさん2014/04/01(火) 20:53:33.69ID:eefQLiAy
>>82
VCでGUIソフトとなるとMFC使えないExpressは苦行だろ
MFCじゃなくてQtなら良いが
0087デフォルトの名無しさん2014/04/01(火) 20:58:12.28ID:eyBPHv5q
今時MFCとかMやな
0088デフォルトの名無しさん2014/04/01(火) 21:00:40.54ID:zkzJISd4
レスありがとうございます。
ステップインで見てみると、appmodul.cppというファイルに_tWinMain()があり、そこからさらに
winmain.cppというファイル内のAfxWinMain()が呼ばれているようでした。
いきなり理解するのは難しそうですが、おいおい見ていこうかと思います。

ところで>>82でVC++ExpressEditionを薦めていただきましたが、製品版とは何か違うのでしょうか?
今使っているのはDreamSparkで手に入れたVisualStudio2013を使っていますが、旧版やExpressEditionのダウンロードも可能です。
VisualStudio2013の情報はぐぐった限りまだ少ないので旧版を使った方がいいような気もしてます。
0089デフォルトの名無しさん2014/04/01(火) 21:02:18.77ID:28c8XDsv
製品版あるなら製品版だけでいいよ
0090デフォルトの名無しさん2014/04/01(火) 21:03:43.90ID:28c8XDsv
expressは製品版に比べ機能が少ない
0091デフォルトの名無しさん2014/04/01(火) 21:47:13.30ID:BTv6StGE
製品版よりちょっと動作が軽い
0092デフォルトの名無しさん2014/04/01(火) 22:13:30.10ID:q8+ciQV2
MFCが付いてない
0093デフォルトの名無しさん2014/04/01(火) 22:27:29.90ID:CqvqfScs
>>87
VS2013触った事ないからわからんけど
フォームアプリケーションじゃなくてwin32アプリケーションがあればそれでソース見れるんじゃない?

> なんとなくでも全体の流れを把握したいのでmain()にあたる部分を見たい
こういう事かな ttp://msdn.microsoft.com/ja-jp/library/bb384843.aspx
0094デフォルトの名無しさん2014/04/01(火) 23:04:38.46ID:JvY411Bp
Expressに無料版MFCでいいじゃん。
ATLの方が簡単だけどな。
0095デフォルトの名無しさん2014/04/01(火) 23:46:31.78ID:q8+ciQV2
無料MFCて何の事だよ
0096デフォルトの名無しさん2014/04/02(水) 17:38:29.47ID:SfgYmxWg
それっぽい単語を並べただけなのでマジレスしないでください
0097デフォルトの名無しさん2014/04/02(水) 19:39:44.52ID:aNx9C+Mf
>>95はモグリ
0098片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/04/03(木) 12:52:10.02ID:lJqirrU9
http://www.geocities.jp/home_page22/C/dmc.html
0099デフォルトの名無しさん2014/04/03(木) 15:33:05.57ID:BFyxuILc
てっきりMZCが出てくる流れかと思ったがそうじゃなかったw
0100デフォルトの名無しさん2014/04/04(金) 15:36:27.65ID:QN8rMztS
マルチコアへの対応って、AfxBeginThreadでマルチスレッドにしたらOSが勝手にコアごとに振り分けてくれるという認識であってる?
ググるとParallelクラスがあるけど、ネイティブでは使えないっぽい。
0101デフォルトの名無しさん2014/04/04(金) 16:48:02.82ID:nM83ZP3Z
AfxBeginThreadはある関数を新しいスレッドで開始するだけだから、
parallel forみたいなことをしたい場合は、
自分で各スレッドのforの範囲を決めたり、
スレッドが終了するのを自分で待ったりする必要がある。

ネイティブで使えるパラレルライブラリはちゃんと入っているから探すべし。
0102デフォルトの名無しさん2014/04/04(金) 19:59:43.18ID:ZtsQOPBg
マルチコアまともに扱いたいならMFCなんか使わんやろ
0103デフォルトの名無しさん2014/04/04(金) 20:06:44.55ID:2QttofMo
OpenMPは楽して並列化させたい場合に威力を発揮するな
……OpenACCが使えるCompilerってフリーに無かったっけ?
0104デフォルトの名無しさん2014/04/04(金) 20:41:28.03ID:DD5EG69p
マルチコアを真面目に使いたいときに
GUIフレームワークをわざわざ変える奴は
マトモな設計が出来ない奴
0105デフォルトの名無しさん2014/04/04(金) 20:43:23.33ID:eu/rYsXw
MFC関係ないよね
0106デフォルトの名無しさん2014/04/04(金) 20:59:32.67ID:UDPO/kAP
儂もそう思う。が、未だに世に知られていない新理論を
構築済みなのかも知れないのでもう少し語らせてみたいです。
0107デフォルトの名無しさん2014/04/04(金) 23:36:48.04ID:QN8rMztS
>>101
OpenMPとかPPLとかBoostとかいろいろあるんだな
調べてみるよありがとう
0108デフォルトの名無しさん2014/04/05(土) 00:52:05.63ID:Z9uNYFZQ
char なら printf
w_char なら wprintf
TCHAR なら _tprintf
だと思うのですが、どうして三番目のやつは先頭に _ が付くのでしょうか?
0109デフォルトの名無しさん2014/04/05(土) 00:56:55.10ID:JxLvhIna
マクロって_MAX_PATHとか付くやん
0110デフォルトの名無しさん2014/04/05(土) 01:50:54.62ID:EG+AV0eK
標準規格にはないWindows用の独自拡張だから
0111デフォルトの名無しさん2014/04/05(土) 02:16:53.63ID:goifYp5b
コンパイラメーカーや、ライブラリの作者は、_を多用します
プログラマは、先頭に、_をつかわないようにします(おれは、そういわれた)
0112デフォルトの名無しさん2014/04/05(土) 02:21:01.16ID:zHyV6h3a
>>111
俺もC言語辞典(古い)でそれ見た
0113デフォルトの名無しさん2014/04/05(土) 02:47:32.13ID:oiRFlfhh
>>100だけど、とりあえず何もしないループ回してCPU使用率見たら、特にマルチスレッド処理してないのに複数コアが仕事してるみたいだった。
マルチスレッドを意識してプログラムしなくてもwindows8は賢いからある程度勝手に対応してくれるのか?
かといって全コアが100%に張り付くというわけでもなく、60%弱くらいでよくわからん。

これを回しただけなんだけど
for (int j = 0; j < 100000; j++){
for (int i = 0; i < 100000; i++){}
}
0114デフォルトの名無しさん2014/04/05(土) 03:30:05.84ID:zHyV6h3a
>>113
空ループって最適化したら消えるんじゃねーの?
それ以前に裏で別のプロセス走ってるとか
コンパイラの自動並列化が効いちゃったとかのオチな気がする
0115デフォルトの名無しさん2014/04/05(土) 03:59:45.28ID:JxLvhIna
>>113
1コアの100% =
2コアの50% =
4コアの25%
0116デフォルトの名無しさん2014/04/05(土) 04:09:44.16ID:4p3tjfYN
よくわからないがシングルスレッド高負荷処理で
同一コアと思われるハイパースレッディングの
論理CPUペアが50%ずつ(たまに60+40の非対称)
になるのはWindowsでよくあること。
表示が間違ってるのではないかと思ってるけど
0117デフォルトの名無しさん2014/04/05(土) 11:56:14.14ID:oiRFlfhh
コンパイラの自動並列化がそれっぽい、便利なんだな
もっと詳しくならないとマルチコアとか考えるだけ無駄ってことか……
0118デフォルトの名無しさん2014/04/05(土) 12:06:18.53ID:Vwyio/wC
マルチコアとマルチスレッドはべつ。
シングルスレッド・プログラムでも、OSがマルチコア使うかもしれないし
マルチスレッド・プログラムでも、OSが1コアしか使わないかもしれない。
プログラマが出来るのは主にスレッド管理だけ。
0119デフォルトの名無しさん2014/04/05(土) 12:07:27.06ID:zHyV6h3a
>>117
http://msdn.microsoft.com/ja-jp/library/hh872235.aspx
0120デフォルトの名無しさん2014/04/05(土) 12:10:33.92ID:Vra9QIvI
にほんごでおk
0121デフォルトの名無しさん2014/04/05(土) 12:59:48.48ID:zqI4wR1v
>>113
「マルチスレッドにすると勝手にコアごとに割り付けてくれる」ってのは正しい
正確には割り付けるんじゃなく、並列に実行される。

CPU使用率は、ツールやコマンドによって計算方法が違っている場合がある。
例えば4コアの場合、全CPUをフルで使った場合100%と表示するか、400%と表示するかはツール次第。
0122デフォルトの名無しさん2014/04/05(土) 13:32:33.53ID:Gtcr4gqx
構造体を動的に生成したいのですが、このやりかたでよろしいでしょうか?
http://ideone.com/Yr4XRf
0123片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/04/05(土) 13:35:36.03ID:pKk9GxNe
>>122
型名の始めは大文字にしたほうがいいね。
0124デフォルトの名無しさん2014/04/05(土) 13:38:16.05ID:Gtcr4gqx
>>123
そうですね^^

型名以外には何か問題点とかありますか?
0125デフォルトの名無しさん2014/04/05(土) 13:38:47.30ID:NnouwwX7
はい
0126デフォルトの名無しさん2014/04/05(土) 13:39:59.09ID:Gtcr4gqx
>>125
具体的にはどのような?
0127デフォルトの名無しさん2014/04/05(土) 13:42:36.52ID:30x58bFF
このやりかたでよろしいでしょうか?
はい
後何が必要なのか?
0128デフォルトの名無しさん2014/04/05(土) 13:44:42.90ID:Gtcr4gqx
>>127
ポインタの扱いが苦手でして
一応コンパイラもエラー吐かなかったので大丈夫みたいですがなにぶん心配性なもんで・・・
0129デフォルトの名無しさん2014/04/05(土) 13:50:24.60ID:/rC4NDRr
>>128
で?
0130片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/04/05(土) 14:03:30.11ID:pKk9GxNe
>>129
次のコード書いてみて。
0131デフォルトの名無しさん2014/04/05(土) 15:18:00.60ID:N2+78ftB
>>108
願望
0132デフォルトの名無しさん2014/04/05(土) 15:21:03.39ID:zHyV6h3a
>>122
そもそも構造体のメンバ変数が1つだけって……
動的確保してるのにその個数が定数値って……

例:http://codepad.org/l9spLfkF
0133デフォルトの名無しさん2014/04/05(土) 15:22:25.93ID:zHyV6h3a
おっとfreeを忘れてた……
http://codepad.org/3ZiOa4oN
0134デフォルトの名無しさん2014/04/05(土) 15:23:25.39ID:JxLvhIna
>>132
例だから別にいいだろ
0135デフォルトの名無しさん2014/04/05(土) 15:53:12.52ID:Vra9QIvI
ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない

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

何よりまず、obj001からobj002にコピーしている意味がわからない
この後 obj002を使おうとしていますというオチじゃないかと非常に気持ち悪い
0136デフォルトの名無しさん2014/04/05(土) 15:55:30.71ID:Vra9QIvI
×ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない
0137デフォルトの名無しさん2014/04/05(土) 15:55:38.93ID:PXTTIzjC
> 何よりまず、obj001からobj002にコピーしている意味がわからない

いや、その点はどうでもいだろw
ポインタの勉強するときそういう代入してみるのってよくあることだろ。
0138デフォルトの名無しさん2014/04/05(土) 16:15:50.31ID:JxLvhIna
本題以外にケチつける奴はただ優越感に浸りたいだけ
浸れてないけど
0139デフォルトの名無しさん2014/04/05(土) 16:21:18.84ID:LokGB3M7
×ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない、というのが持論です
0140デフォルトの名無しさん2014/04/05(土) 17:03:41.01ID:Vra9QIvI
改めて見直してみたらいろいろな慣習とか規約があるみたいだな
よし、今日のところは引き分けにしておいてやる
0141デフォルトの名無しさん2014/04/05(土) 17:55:33.89ID:YrLzJmoN
sprt使わずにdistance名乗るか
0142デフォルトの名無しさん2014/04/05(土) 18:38:06.46ID:zqI4wR1v
>>123
え?なんで型名を大文字で始めるの
定数と間違えてない?
0143デフォルトの名無しさん2014/04/05(土) 19:04:31.24ID:zHyV6h3a
>>141
実用上はいちいちsqrtしないだろ?

……ごめんなさい忘れてただけです
0144片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/04/05(土) 19:22:03.80ID:kCbCwa1D
>>142
例えばDogという型名とdogという変数名が衝突しないから、分かりやすいコードが書ける。
0145デフォルトの名無しさん2014/04/05(土) 19:35:59.53ID:zqI4wR1v
>>144
うん。そうです。自分が勘違いしていました・・・
0146デフォルトの名無しさん2014/04/05(土) 22:27:29.57ID:pxBAHja5
型名と変数名が衝突しないルールなどこの世に無数にあるのに、
自分の使ってるルールがさも普遍的に良いものであるかのような
ミスリードをする奴の言うことなど真に受けてはいけない
0147デフォルトの名無しさん2014/04/05(土) 22:45:29.81ID:JxLvhIna
char cszBuff
TCHAR tszBuff
int nCount
UINT unCount

typedef struct tagStructName{
} T_STRUCTNAME;

いろいろやってみて自分が納得行くの使ったらいいんや
0148デフォルトの名無しさん2014/04/05(土) 23:56:57.72ID:d+kzfy0R
>>147
システムハンガリアンさんちーす
まだ絶滅してなかったんすね!
頑張ってくださいね!
0149デフォルトの名無しさん2014/04/06(日) 03:16:28.05ID:PoyortF4
> 型名と変数名が衝突しないルールなどこの世に無数にあるのに、

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

あと、typedefされた型名って_tってサフィックスつけるのが一般的だと思うんだけど
これもローカルなルールなんやろか
0150デフォルトの名無しさん2014/04/06(日) 03:33:10.66ID: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 名と変数は異なる名前空間だね
0151デフォルトの名無しさん2014/04/06(日) 03:39:44.68ID:lcQBK2Mz
>>149
http://en.wikipedia.org/wiki/Typedef
によると、POSIXでは _t サフィックスは typedef の名前にリザーブされていて、それゆえ
名前が衝突しないようにユーザが定義する typedef には _t を使わないほうがいいらしい
0152デフォルトの名無しさん2014/04/06(日) 03:53:44.87ID:PoyortF4
>>150
規約での確認、�dです

>>151
> Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.
…マジっすか orz
0153デフォルトの名無しさん2014/04/06(日) 04:43:31.25ID:7TI60JXf
衝突ってのはコンパイルエラーではなくて
人が目で見て区別がつきやすいよう
同じ綴りを避けるって話だろうに
アスペなおまいらは
0154デフォルトの名無しさん2014/04/06(日) 07:44:06.37ID:AUPUS+0I
>>153
人の目で区別する必要があるシチュエーションってどんなの?
0155デフォルトの名無しさん2014/04/06(日) 11:01:21.41ID:Gd53X1PX
>>153
よほど糞な開発環境なんだなお前
0156デフォルトの名無しさん2014/04/06(日) 11:52:04.47ID:gdJCg3c2
あえて言おう
処理系指定で組めばおk
初心者なんだろ、何か組みあがった快感って大事だぞ
0157デフォルトの名無しさん2014/04/06(日) 12:09:44.18ID:BmjYK//+
別のものには違う名前を使うもので
名前を使い回すなって当たり前のことだろ
どんだけ馬鹿なんだおまえら
0158デフォルトの名無しさん2014/04/06(日) 12:18:02.39ID:PoyortF4
流れぶったぎりでスマソ
_tサフィックスのことは、下にも書かれてたよorz
ttp://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02
0159デフォルトの名無しさん2014/04/06(日) 13:36:30.63ID:9b0FkJFr
>Such type names are reserved by POSIX

本当にWikiは嘘だらけだな
byだと適用範囲がPOSIXでなくC全般と読めてしまう
0160デフォルトの名無しさん2014/04/06(日) 15:47:59.42ID:PoyortF4
byよりinの方が良いかもね…スレチだけど
0161デフォルトの名無しさん2014/04/06(日) 16:35:16.36ID:5rOAt6qX
>>159-160
Wikiなんだから編集できるんじゃねーの?
0162デフォルトの名無しさん2014/04/06(日) 16:39:48.19ID:Pw+vYT2x
A「こんな説明みつけたよ!
B「間違ってるねそれ。
 やっぱりWikipediaはこらだから
A「直せるんだから直せよ
B「えっ、何で俺が?
A「えっ?
0163デフォルトの名無しさん2014/04/06(日) 16:46:07.08ID:YqB/fCSo
byの方がいいだろ
0164デフォルトの名無しさん2014/04/06(日) 16:56:24.24ID:k991ba7o
A「byだとPOSIX以外にもルールが適用されると読める
B「byの方がいいだろ

せめて意見するときは
そう考える根拠ぐらい書きたいものだ
0165デフォルトの名無しさん2014/04/06(日) 16:57:56.33ID:PoyortF4
byの方が良いのかorz
Wiki編集するところだったよorz
0166デフォルトの名無しさん2014/04/06(日) 19:15:29.97ID:X8q2hYwd
そもそもその後の for 以下を読めば C 全般に適用とかの変な解釈するわけないと思うんだが...
0167デフォルトの名無しさん2014/04/06(日) 19:22:56.79ID:714kpsax
>Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.
→
POSIXによって予約されているため
ユーザー定義型での使用は避けるべきである

POSIX準拠システムでのアプリケーションプログラムを超えて
POSIXと関係ないオペレーティングシステムのアプリケーションにまで言及しとりますがな
0168デフォルトの名無しさん2014/04/06(日) 19:41:42.06ID:YqB/fCSo
避けるべきということに変わりはないだろ
お前は移植性の事全く考えないの?
POSIXでないシステムの方が圧倒的に少ないというのに
0169デフォルトの名無しさん2014/04/06(日) 19:47:23.97ID:X8q2hYwd
で、どこに C 全般とか書いてあるんだ?
0170デフォルトの名無しさん2014/04/06(日) 19:54:26.32ID:PoyortF4
>>167
"by ISO/IEC"でなく"by POSIX"という時点でお察し(ry
0171デフォルトの名無しさん2014/04/06(日) 19:56:17.95ID:k991ba7o
なんでこんなに揉めるんだ?
Cのtypedefの説明に「_tはPOSIXで予約済」
って書いてあったら
POSIX系以外も従う必用性がある
ように読めるだろ。

>避けるべきということに変わりはないだろ
それは書いた人の主観であって
百科事典の説明に書くべきじゃないぞ。
技術文書書いたこと無いの?
0172デフォルトの名無しさん2014/04/06(日) 19:58:14.20ID:k991ba7o
「POSIXではオペレーティングシステムの為に予約」
という表現にすれば問題なくなると思うのだが
0173デフォルトの名無しさん2014/04/06(日) 19:59:31.29ID:14wt57ia
>>158
いっぱいあるんだな……
0174デフォルトの名無しさん2014/04/06(日) 20:13:54.33ID:IsEOtgMD
_t はタグのtなのかtypedefのtなのかどっちですか?
0175デフォルトの名無しさん2014/04/06(日) 20:16:44.81ID:YqB/fCSo
>>171
読めないよ
俺C言語で新しいOS書いたわー
そのOSでは大文字で始まる型名予約してるから使うなよ!って書いて、誰がC言語全般に影響あると思うんだ?
0176デフォルトの名無しさん2014/04/06(日) 20:22:32.03ID:YqB/fCSo
POSIXが何かわかってるやつはC言語全般に影響が〜なんて誤解しない。
POSIXが何かわかってない奴は(圧倒的多数であるPOSIXシステムで動かされる可能性を考慮して)無条件に従っておいた方がいい

なんの問題もない。
0177デフォルトの名無しさん2014/04/06(日) 20:22:37.76ID:ZIQhn8PO
Wikipediaの内容についての議論はWikipediaのTalkページでやれよ
0178デフォルトの名無しさん2014/04/06(日) 20:24:58.76ID:X8q2hYwd
>>171
> なんでこんなに揉めるんだ?

単なるしきたりを

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

なんて言うアホがいるからだろ。
0179デフォルトの名無しさん2014/04/06(日) 20:29:09.78ID:k991ba7o
>>178
説明の文面が妥当かどうかの話をするときに
どうしてシキタリが出てくるんだよアホですか?
0180デフォルトの名無しさん2014/04/06(日) 20:30:38.36ID:8z3KlCR7
もうここで議論するべき内容ではないどっか行け
0181デフォルトの名無しさん2014/04/06(日) 20:34:13.86ID:X8q2hYwd
convention も読めないアホは口挟むなよ (w
0182デフォルトの名無しさん2014/04/06(日) 20:36:21.69ID:PoyortF4
なかなか面白かった

>>174
型名(type name)のtらしい…俺はtypedefのtって思い込んでたけど
ttp://stackoverflow.com/questions/231760/what-does-a-type-followed-by-t-underscore-t-represent
0183デフォルトの名無しさん2014/04/06(日) 20:44:57.82ID:k991ba7o
>>181
「Cのsize_t(しきたりでtypedefには_tを付けたもの)は
 POSIXによって予約されている」
などと言っている出鱈目なWikipediaの説明が
妥当だと思うアホはすっこんでろ
0184デフォルトの名無しさん2014/04/06(日) 20:57:23.37ID:6fUxN2Jx
All rights are reserved by POSIX.
0185デフォルトの名無しさん2014/04/06(日) 20:57:26.93ID:X8q2hYwd
>>183
誰が妥当って言ってるんだ?
俺は単にそう書いてると言ってるだけだぞ。

まあ、しきたりで自爆したからごまかしたいんだろうけど (w
0186デフォルトの名無しさん2014/04/06(日) 21:05:47.20ID:frwmbROr
NG推奨ワード:
Qz
STL
ヘッダ
POSIX ←new
片山
hoge
0187デフォルトの名無しさん2014/04/06(日) 21:23:14.93ID:YqB/fCSo
CがNGワードになる日も近いな
0188デフォルトの名無しさん2014/04/06(日) 21:28:22.80ID:5rOAt6qX
>>186
え、いつの間にかSTLとヘッダもアウトになってたのかw
ここは酷いインターネッツですね
0189デフォルトの名無しさん2014/04/06(日) 21:39:32.30ID:uqLF0x8H
>>186
ついでに
スレが荒れるのでCやC++に関することはすべて厳禁
0190デフォルトの名無しさん2014/04/06(日) 21:52:35.54ID:EzHv0eI8
まどろっこしいな
ようは2ちゃんねるの禁止が落としどころだよね
0191デフォルトの名無しさん2014/04/06(日) 22:19:16.09ID:2m7iHXEE
p2使えないから2ch廃止でいいよもう
出先で書き込めなくてもどかしいったらありゃしない
0192デフォルトの名無しさん2014/04/06(日) 22:35:34.44ID:yUhKfMaZ
●は使えるだろ
●が無いとスレ立てできない
0193デフォルトの名無しさん2014/04/06(日) 23:14:43.66ID:2m7iHXEE
浪人ってやつ?
買う気ないからひろゆきの新しい方に期待するわ
0194デフォルトの名無しさん2014/04/07(月) 01:28:14.02ID: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' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)

と出るのですが、解決方法がわかりません。どうしたらよいでしょうか?
0195デフォルトの名無しさん2014/04/07(月) 02:54:37.57ID:LXdO3Noc
>>194
teのアドレス - tsのアドレスをtdifに入れるというおかしな事してる
0196デフォルトの名無しさん2014/04/07(月) 04:02:36.25ID:Yfheg34z
>>194
operator-()の定義かプロトタイプ宣言を
WinMain()だかtmain()だかの前でやれば解決する、と予想
0197デフォルトの名無しさん2014/04/07(月) 04:21:05.28ID: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秒
の差ということでしょうか?どういうことでしょうか?
0198デフォルトの名無しさん2014/04/07(月) 04:29:51.17ID:Yfheg34z
>>197
ttp://msdn.microsoft.com/ja-jp/library/x3399a54.aspx
0199デフォルトの名無しさん2014/04/07(月) 06:08:42.83ID:NjqqbTFI
>>197
SYSTEMTIME ってカレンダーの年月日時間みたいなもの。
それらの引き算をカレンダーの年月日時間にするってへんだろ。
結果のカレンダー年月日時間は0年0月0日0時0分1.515秒ですって、カレンダーではありえないだろ
期待する結果は年月日時間で表せる差じゃないか(1年2ヶ月3時間4分5秒違うとか)
0200デフォルトの名無しさん2014/04/07(月) 11:35:54.05ID:uM+gajuN
>>197
SYSTEMTIMEの起点は1601年1月1日0時0分0秒
つまり、ゼロをSYSTEMTIMEとして解釈すると「1601/01/01 0:00:00」になる
0201デフォルトの名無しさん2014/04/07(月) 13:13:30.33ID:8ZhLD5KA
どうでもいいけど、>199は説明が下手だな。
0202片山博文MZジェバンニ ◆T6xkBnTXz7B0 2014/04/07(月) 14:25:12.80ID:nfj7Xkns
SystemTimeToFileTimeを使ってSYSTEMTIMEをFILETIMEに変換して、
ULARGE_INTEGERを使って64ビット整数に変換して、引き算をする。
0203デフォルトの名無しさん2014/04/07(月) 15:40:44.16ID:4PSeJxmH
時刻と時間の違いが分かってないタイプ?
0204デフォルトの名無しさん2014/04/07(月) 18:59:37.11ID:iQnUI2e5
>>202
194がやっているのがまさにそれなんだけど、問題は戻り値の型が時間間隔ではなく
時刻を表す型になっていることだから、
>>194 の operator-() の戻り値を __int64 にして v_res=v_right-v_left; 以下を
return v_res; に変えれば100ナノ秒単位の経過時間が得られるようになる。
100ナノ秒じゃ細かすぎるというなら、戻り値を double にして return v_res / 10000.0;
に変えるとか工夫しろ。
0205デフォルトの名無しさん2014/04/07(月) 19:23:33.56ID:BajMmze5
>>202
時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたいから、
SYSTEMTIMEを戻り型にしているんじゃないのか

Winで経過時間を求めるのにSYSYEMTIMEを使うって普通なのか?
違うなら何を使うのが多い?
0206デフォルトの名無しさん2014/04/07(月) 19:29:45.40ID:4vTqmZSq
よく分からんがC++なら<chrono>使えばいいんじゃね?
Win依存でいいならtimeGetTimeとかQueryPerformanceCounterとかがあるし
0207デフォルトの名無しさん2014/04/07(月) 20:26:10.88ID:Y4utMABq
「時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたい」
という要求下で "年" の計算にうるう年の考慮は必要だろうか?
0208デフォルトの名無しさん2014/04/07(月) 20:35:46.78ID:4vTqmZSq
>>207
その辺難しいよね
365日とするか365.2425日とするか365.2422日とするか……
表示を日までに済ませておくのが無難かと
0209デフォルトの名無しさん2014/04/07(月) 21:01:58.18ID:iQnUI2e5
>>208
.NETのTimeSpanクラスはそうなってるね。
内部表現は100ナノ秒刻みの整数値で、ミリ秒、秒、分、時間、日への変換はするが
月、年への変換はしない。
0210デフォルトの名無しさん2014/04/07(月) 21:27:01.61ID:dmj0DO96
>>207
それ以前に月が 30日でいいのかと...
0211デフォルトの名無しさん2014/04/07(月) 21:32:53.82ID:Y4utMABq
>>210
あああああーーーーー
考えるほどマンドクサイっすな
0212デフォルトの名無しさん2014/04/07(月) 21:49:28.54ID:wQYu7k63
>>186
なんでQZが筆頭なんだ?
0213デフォルトの名無しさん2014/04/07(月) 21:52:25.42ID:pviM0T4Q
どう考えても一番の荒らしです
0214デフォルトの名無しさん2014/04/07(月) 22:31:32.85ID:tNhu6rzw
片山やhogeよりPOSIXが上なのかw
0215デフォルトの名無しさん2014/04/07(月) 22:33:46.15ID:4vTqmZSq
質問いい?
switch構文のcase内で変数宣言したら、それについて
「'変数' の初期化が 'case' ラベルによって行われませんでした。」
って言われたんだけどどういうことなの……?
ついでにswitch部分に赤波線が付いて、「制御の転送は次の初期化をバイパスします」
って言われたんだけど何故エラーになるのか意味が分からない。誰か分かる人教えて下さい
(VS2013でコンパイルしている時に発生)
0216デフォルトの名無しさん2014/04/07(月) 22:35:47.03ID:2mFu56Lz
caseだけだとスコープが同じになる
ブロックをつければいい
0217デフォルトの名無しさん2014/04/07(月) 22:40:02.07ID:Y4utMABq
switch () {
case A:
 { // ローカルスコープにしちまう
  int a;
 } break;
case B:
 …
default:
 …
}
0218デフォルトの名無しさん2014/04/07(月) 22:41:30.01ID:4vTqmZSq
>>216
ブロックを付けるって、要するに
case test:
 〜
 break;
を
case test:{
 〜
 break;
}
にするってことでいいの?
0219デフォルトの名無しさん2014/04/07(月) 22:47:22.50ID:2mFu56Lz
Yes
0220デフォルトの名無しさん2014/04/07(月) 23:30:25.89ID:H5+AU72d
個人的にはbreakは外に出したいな
0221デフォルトの名無しさん2014/04/08(火) 00:20:22.54ID:lvT6VRY6
case test:としたときに
testにおけるのは何?
int a,b,c;
...
switch()
case (b=a+1, c++, C): なんてのでもOK(試してないけど)?
0222デフォルトの名無しさん2014/04/08(火) 00:23:17.09ID:lXmRpq/E
>>221
試せ
0223デフォルトの名無しさん2014/04/08(火) 00:32:19.53ID:zX8m8ach
>>221
ラベルだけだよ
0224デフォルトの名無しさん2014/04/08(火) 00:32:44.67ID:4GqgTU2E
>>221
定数の整数式とscoped enumの値だけ
switch (a) case std::integral_constant<int, 6>::value:;
0225デフォルトの名無しさん2014/04/08(火) 13:44:22.59ID:J+Ne3rG0
最近、よその板で、"「"だけで右を閉じてないのが流行ってるのか
すんげーむずむずするんだが
0226デフォルトの名無しさん2014/04/08(火) 14:02:26.18ID:M2I5N33k
>>225
在日のおまえは知らないだろうが、明治時代からある用法だぞ。
0227デフォルトの名無しさん2014/04/08(火) 16:39:02.94ID:9nnVwB+Q
>>226
(正直鬼物語で見たのが最初だなんて言えない)
0228デフォルトの名無しさん2014/04/08(火) 17:27:19.75ID:DhHmBmSp
エロゲーでは普通じゃないのか?
0229デフォルトの名無しさん2014/04/08(火) 18:01:46.09ID:Agmut9XT
どんな使い方なんだ?
(ry なんかはときどき見るな
閉じていない括弧に違和感を持つのはある意味プログラマらしいか
0230デフォルトの名無しさん2014/04/08(火) 18:31:11.83ID:Bi2RyCEo
カッコつけてんじゃね〜よ
0231デフォルトの名無しさん2014/04/08(火) 18:50:35.55ID:C0aY6nOj
つけてねーよ
0232デフォルトの名無しさん2014/04/08(火) 19:05:43.04ID:Ge61TJlR
case 1+1;
goto 2;
goto 1+1;
goto 2*1;
各環境でナニがドコまで許されるのか興味はあるな
0233デフォルトの名無しさん2014/04/08(火) 22:58:16.49ID:5xZMJR+X
>>229
プログラマは、半開区間が大好きさ!
[0, 4)
0234デフォルトの名無しさん2014/04/08(火) 23:04:52.46ID:9wIzdaaz
>>233
ワロタ
0235デフォルトの名無しさん2014/04/09(水) 00:10:02.38ID:dDyddEcZ
もう全て半角にして英語圏顔文字でも使っとけよ:D
0236デフォルトの名無しさん2014/04/09(水) 04:45:08.14ID:GDCkrjSs
roffとか気持ち悪いよな
0237デフォルトの名無しさん2014/04/09(水) 13:15:17.74ID:/wyRfLaC
>>236
UN*XやるまえにDOSでTeXやってたからあれは意外になんとも
かつては汗でパーサ書いてたっていうから、まあそういうことなら。
0238デフォルトの名無しさん2014/04/13(日) 08:17:37.43ID:7/oWURrR
time関数は1970年からの秒数らしいですが
long型で格納するとなると、68年くらいで限界が来ませんか?
2038年くらいにいろんなプログラムやばいっすか?
0239デフォルトの名無しさん2014/04/13(日) 08:24:54.58ID:2iqAA/H6
2000年問題の時に話題にあがりました 「2038年問題」でぐぐれぇ
0240デフォルトの名無しさん2014/04/13(日) 08:30:51.23ID:7/oWURrR
おーやべえ
でも今からプログラムつくろうとするとtime_tは64bitで定義されてるっぽいですね
3000億年まで安心か
0241デフォルトの名無しさん2014/04/13(日) 09:06:00.54ID:olete8aZ
炎上学習法は要りません
0242デフォルトの名無しさん2014/04/13(日) 09:33:49.42ID:m7xM1FWF
どこが炎上してんだよ
0243デフォルトの名無しさん2014/04/13(日) 15:21:37.00ID:qnyX9I3J
2000年の頃は見えないほど先の話だと思っていたが
既に3分の1消化してるんだな
0244デフォルトの名無しさん2014/04/13(日) 18:18:53.37ID:CtgsENNt
1000年以上先の問題ならまだしも、38年だと分野によっては平気で使われ続けるからな
0245デフォルトの名無しさん2014/04/13(日) 18:50:58.03ID:Am7dEU9n
言わんとしてることはわかるからいいんだけど、64bitでコンパイルしてlongが32bitなのMSのコンパイラぐらいだぞ
0246デフォルトの名無しさん2014/04/13(日) 18:52:32.07ID:P3Ox4abS
互換性を優先したんだろうね
0247デフォルトの名無しさん2014/04/13(日) 18:55:12.72ID:N2UMgO6H
time_tは64bitになってるから許してやれ
0248デフォルトの名無しさん2014/04/14(月) 07:18:41.20ID:CAt5QB21
ttp://ja.wikipedia.org/wiki/%E6%95%B4%E6%95%B0%E5%9E%8B
同じソースでlongが32bitになったり64bitになったりする方が混乱するわ
昔intが16bitになったり32bitになったりで難儀した
0249デフォルトの名無しさん2014/04/14(月) 08:17:35.70ID:XwQYiHbH
typedefせずソースに直接intとかlongとか書いてるの?
0250デフォルトの名無しさん2014/04/14(月) 08:28:42.62ID:iMQET/ga
>>248
つstdint.h(cstdint)
規格仕様上複数マシンで動作できることを重視したから型ごとの制約が緩いのよね
と言うか既出の話題だったわw
http://toro.2ch.net/test/read.cgi/tech/1393539884/61-69
0251デフォルトの名無しさん2014/04/14(月) 11:00:15.74ID: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);でしょうか?
0252デフォルトの名無しさん2014/04/14(月) 11:15:14.08ID:Kn6UHMuG
よろしいです
しいて言えば
vec.push_back(temp);
より
vec.emplace_back();
の方がよろしいかと思われます
0253デフォルトの名無しさん2014/04/14(月) 11:22:23.22ID:fXV0vjOD
>>252
ありがとうございます
もしよろしければemplace_back()について解説お願いします
リファレンスを見てもよくわからなかったので
0254デフォルトの名無しさん2014/04/14(月) 11:23:47.56ID:Kn6UHMuG
コンストラクタを直接呼び出してくれるpush_backでございます
コピーが発生しないので多少効率的になります
0255デフォルトの名無しさん2014/04/14(月) 11:25:50.80ID:fXV0vjOD
>>254
なるほど
0256KUSO KOTE ◆unko./w.Osri 2014/04/14(月) 12:36:29.24ID:8ev4IZFy
>>253
もしc_myclassにc_myclass(bool,double)みたいなコンストラクターがあったら、
emplace_back(true,1.23)とすることが出来て
かつvectorの中の格納領域上に直接c_myclassを作成できる。
と思う(想像)。
0257デフォルトの名無しさん2014/04/14(月) 15:28:45.80ID:MAoTOR9V
emplace*()はいいね。巨大なクラスを連想配列に放り込む時に重宝だよ。
0258デフォルトの名無しさん2014/04/14(月) 16:17:06.14ID:/qNJTuFi
open(2)したディレクトリを直接read(2)する方法ってあります?
0259デフォルトの名無しさん2014/04/14(月) 16:37:16.17ID:oIWmwaCC
日本語でおk
0260デフォルトの名無しさん2014/04/14(月) 17:29:53.33ID: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できるかな?マカフィーでも無理なんじゃないかな()

不特定多数を舐めるなってこと()
0261デフォルトの名無しさん2014/04/14(月) 18:01:44.00ID:0/p4fR0J
いちいち持ってくるお前も臭い
0262デフォルトの名無しさん2014/04/14(月) 19:15:32.34ID:yacO1o/C
>>258
できるでしょ?readdir(3C)とかは内部ではreadを呼んでる
0263デフォルトの名無しさん2014/04/14(月) 20:02:57.67ID: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

とある
0264デフォルトの名無しさん2014/04/14(月) 20:41:55.55ID:DVvt3Ia1
最近C++勉強始めたんですが、質問があります。(Cは良く分っているつもりです)。
C++には参照渡しという記述方法があることを知ったのですが、Cのポインタ渡しに
慣れている私としては、参照渡しを使わずにすべてポインタ渡しでコードを記述する
ほうが見易いので、そうしようかと思うのですが、何かデメリットありますか?
参照渡しを使うほうがよい点などありましたら教えてください。
0265デフォルトの名無しさん2014/04/14(月) 20:51:36.33ID:UPYb5gKr
(個人的に思う)一般的に
ポインタで渡す=ヌルが渡ってくる可能性がある、つまり、常にヌルチェックが必要
ポインタで渡す=ヌルが渡せる、この引数はオプション的である

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

あと一時変数オブジェクトの寿命の関係とかあった気がするが忘れたw
0266デフォルトの名無しさん2014/04/14(月) 21:14:47.05ID:iMQET/ga
>>264
ポインタ渡しと違い、参照渡しの場合、
・絶対に実体があるので、適当なアドレスが渡って
 不正なメモリアクセスを行うことがない
 また、参照する中身は変更できないので紛れがない
・普通の変数と同じように記述できる。構造体のメンバ関数にも
 アロー演算子ではなくドット演算子でアクセスできる
 また、関数の引数に使った際、呼び出す側としてはいちいち
 アドレスを渡すということを意識せず使用できる
・ポインタと違い参照自体にはメモリ消費がない
こんなところか
0267デフォルトの名無しさん2014/04/14(月) 21:17:29.88ID:lcY87dee
返り値の話ではないとして。
参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
0268デフォルトの名無しさん2014/04/14(月) 21:21:57.27ID:lEZQ3TFl
メモリ消費がないというのは不適切だろ
インラインで消えたりするが
0269デフォルトの名無しさん2014/04/14(月) 21:46:00.21ID:iMQET/ga
>>268
いや、俺の持ってる本では
「ポインタと違って独自にメモリ領域が割り当てられない」
的なことが書いてあるんだが……違うの?
0270デフォルトの名無しさん2014/04/14(月) 21:49:58.13ID:7APDnn3f
(お前が)(malloc/new等で)と読めなくもないが大丈夫か
0271デフォルトの名無しさん2014/04/14(月) 21:55:35.64ID:buURFUek
初期のC++はC言語へのコンバータで実現してたろ。
参照も内部的にはポインタ動作と変わらないかと。
0272デフォルトの名無しさん2014/04/14(月) 22:00:06.15ID:iMQET/ga
>>271
それって「参照がポインタで実装されてる(ことが多い)」って話じゃなかった?
02732642014/04/14(月) 22:02:44.39ID:DVvt3Ia1
みなさん解説ありがとうございます。
大変参考になります。
>参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
もう少し詳しく解説お願いします。
0274デフォルトの名無しさん2014/04/14(月) 22:04:37.96ID:iMQET/ga
あとこんなページも見つけた
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958
http://www.osak.jp/program/arg_ref_val.html
0275デフォルトの名無しさん2014/04/14(月) 22:18:22.93ID:msrdBAHC
>>269
通常の実装では、呼び出し側ではスタックにアドレスを積むという点で全く同じだし、
呼ばれる側でもそこを参照するのに違いはないよ。
まぁ、インライン展開で消えれば話は別だけど。
一番のメリットは、(参照先ではなく)参照自体を書きかえられないことだね。
それもまた、ポインタでもconstにすればできるわけだけど。
0276デフォルトの名無しさん2014/04/14(月) 22:54:29.26ID:CAt5QB21
ttp://codepad.org/Qo0ErNs1
この例ではポインタで渡す気が起きない
0277デフォルトの名無しさん2014/04/14(月) 23:06:35.99ID:lcY87dee
>>276
const付けような。
02782642014/04/14(月) 23:14:28.51ID:DVvt3Ia1
>276
サンプルコードありがとうございます。
>この例ではポインタで渡す気が起きない
すみません、まだよく分らないのですが、ポインタで
void WriteLine(const string *pstr)
{
printf("%s\n", pstr->c_str());
}
のようにすると何か問題があるのでしょうか?
0279デフォルトの名無しさん2014/04/14(月) 23:17:14.74ID:lcY87dee
http://codepad.org/UUMHZZxJ

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

引数でもポインタだと引数で渡されたポインタを内部で保持しておくから呼び出し側でdeleteや中身の変更をしてはだめになるのかとかわからない。
0282デフォルトの名無しさん2014/04/14(月) 23:41:59.74ID:CAt5QB21
>>278
ttp://codepad.org/uAzCCBJQ
ポインタでも書けるしこの例では問題はない
が、やっぱり人に見せると「何で参照使わないの?」と言われそう
0283デフォルトの名無しさん2014/04/14(月) 23:54:52.78ID:73GA0vhp
string *str = new string("hello");
....
delte str;
....
WriteLine(str); //deleteしてるけど、、、ポインタ値は生きてるから アッー

結局、コンテナをうまく使って生ポ(生new)は極力排除しようぜって流れ
0284デフォルトの名無しさん2014/04/14(月) 23:59:10.65ID:lcY87dee
>>282
なんで「何で参照使わないの?」と言われるのかその理由を書かないと意味ないだろ。

たとえば
http://codepad.org/wCMxFlfO
文字列を返す関数と文字列を引数にとる関数があるとする。
参照だったら文字列を返す関数を文字列を引数にとる関数の引数に直接書ける
ポインタだったら一度ローカル変数で受け取ってそのポインタを書かないとだめ
0285デフォルトの名無しさん2014/04/15(火) 00:13:55.46ID:MOmoi8a1
int& a = *(int*)0;
a = 0;
0286デフォルトの名無しさん2014/04/15(火) 00:17:57.06ID:lShoPitp
ポインター操作が目的でなく
null許可を表現させたいわけでもなく
読み取り用途限定の時に
わざわざポインターを使う方が不自然
0287デフォルトの名無しさん2014/04/15(火) 00:21:36.20ID:jMxUSFKT
>>285
一行目がダメコードって一目瞭然じゃないか。
ポインタだったらnullを渡すのが悪いのか?nullチェックせずに代入するほうが悪いのか?になる

>>286
ポインタしかない世界から来た人には多分通じないよ。
0288デフォルトの名無しさん2014/04/15(火) 00:25:16.54ID:hh7KqCRP
生ポ引数/戻り値なんて特別理由がある場合以外は使うなってこった
02892642014/04/15(火) 00:28:56.87ID:7FIahpja
私なりに結論を出してみたのですが、
参照渡しをするのは、
void WriteLine(const string &str);
みたいに、その関数に値を読み取り限定で渡す場合に主に使う。
ただし、必ずconstを付けておく。

上記以外はポインタ渡しを使う。
で良いでしょうか?
0290デフォルトの名無しさん2014/04/15(火) 00:35:43.12ID:8L+RgIaL
参照はポインタの初心者版みたいなもの。
使い方が分からないのがあえて使わなくていい。
0291デフォルトの名無しさん2014/04/15(火) 00:36:31.44ID:c0zlhsuS
>上記以外はポインタ渡しを使う

いいえ。
その他にもムーブセマンティクスを達成
したいときにも参照を使います。
0292デフォルトの名無しさん2014/04/15(火) 00:45:18.87ID:jMxUSFKT
>>290 っていうC++初心者が書くコードはひどく読みづらいので真に受けたらだめ
0293デフォルトの名無しさん2014/04/15(火) 01:27:44.04ID:PjplhgrG
ageる奴は碌なこと喋んねーな
0294デフォルトの名無しさん2014/04/15(火) 03:06:53.30ID:2JpOUwgl
>>289
漏れも俺様ルールで、const参照は読み取り用、
ポインタは値を変更する時と、使い分けている
0295デフォルトの名無しさん2014/04/15(火) 06:05:04.19ID:sGkhMKKa
>>289
ttp://ideone.com/SIOYc5
なかなかいい例が思い浮かばないが
この例ではconstを付けられないが参照が相応しいと思う

全てに当てはまる使い分けの条件は提示できないので
個人やチームの判断で使い分けするしか
0296デフォルトの名無しさん2014/04/15(火) 07:52:53.60ID:AA0ZYDWw
格納場所という意味で>289が作った関数仕様を実装する場合も、自衛はするべき。
void readSome(Type * const result)
{
// ++result; // これがエラーになってくれる。
}
0297デフォルトの名無しさん2014/04/15(火) 08:09:35.12ID:6lm4j3zL
俺はしないな。
意味的にはそうなのだけれど
C++のconstは真面目に付けると可読性を著しく損なう
0298デフォルトの名無しさん2014/04/15(火) 08:59:58.71ID:Byz6doxp
>>263
うん。262は間違いでした。
調べたらreaddirはgetdents(2)を呼んでた
そりゃそうか。ファイルシステムで構造違うしな
0299デフォルトの名無しさん2014/04/15(火) 10:42:12.48ID:ZiuccpsX
>>296
そのレベルは冗長
0300デフォルトの名無しさん2014/04/15(火) 12:47:22.14ID:tCJ2yelK
参照なら要らないのにね。
0301デフォルトの名無しさん2014/04/15(火) 12:54:41.51ID:dDf7e/l1
値渡しの引数にconstをつけるのはやりすぎな気がする
void f(const int x) なんてしないでしょ
0302デフォルトの名無しさん2014/04/15(火) 13:09:58.76ID:tCJ2yelK
する奴いるよ。きっと>296も同じタイプ。
0303KAC2014/04/15(火) 13:26:56.79ID:OYr23JgA
>>296
なんか違う事書いてるぞ。>289の仕様満たすならconstは*の左。

>>297
どんな所で可読性が落ちるって?
お前がまともに使えないだけじゃないの?
0304デフォルトの名無しさん2014/04/15(火) 14:19:33.38ID:SFbbbO6x
流れぶった切って悪いんですが
>>251の
c_myclassがインターフェースクラスを継承している場合は
継承元メンバ(インターフェースクラス)に仮想デストラクタを書いておけば良いのですか?
0305デフォルトの名無しさん2014/04/15(火) 14:41:39.21ID:tCJ2yelK
>>303
>296が言いたいことは、>289の仕様ならconst * string const strだろ。
0306デフォルトの名無しさん2014/04/15(火) 14:42:44.92ID:tCJ2yelK
いけね、Typo。
string const * const strね。
0307デフォルトの名無しさん2014/04/15(火) 14:59:38.52ID:JmWJ8ekL
>>304
違いが分かればよいのだが…
http://ideone.com/w9UqT0
0308デフォルトの名無しさん2014/04/15(火) 15:09:29.49ID:SFbbbO6x
>>307
さらっと確認したので怪しいのですがたぶん
クラスAには仮想デストラクタが無い為に
newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、
クラスBは仮想デストラクタがメンバにあるので
deleteされる際に継承元のデストラクタが呼び出される訳ですよね

そこで、ベクターにオブジェクトを格納する話につながる訳ですが
>>251のc_myclassがインターフェースクラスを継承しているときには
やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?
0309デフォルトの名無しさん2014/04/15(火) 15:27:23.32ID:JmWJ8ekL
だーね
0310デフォルトの名無しさん2014/04/15(火) 15:32:30.40ID:SFbbbO6x
確認しつこくてすいませんが
まとめると>>307のdlvBを
dlvB temp
std::vector<dlvB> obj;
obj.push_back(temp);
みたいにしちゃっておkってことですよね
0311デフォルトの名無しさん2014/04/15(火) 18:05:27.38ID:ef3kTbvB
>>310
そうしたいなら仮想デストラクタとか仮想関数とか関係ない。
コピーコンストラクタを作ればいいだけ。
0312デフォルトの名無しさん2014/04/15(火) 18:37:17.89ID:u428dFct
std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように
多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい
0313デフォルトの名無しさん2014/04/15(火) 20:01:11.81ID:Nbqron3B
仮想デストラクタが必須なのは当然として
vectorに突っ込むケースを考えると
難易度としては
vetcor<Base>
vetcor<Base*>
vetcor<shared_ptr<Base>>
ptr_vector<Base>
こんな感じじゃね?
それぞれ注意点はあるが
一見簡単そうに見える
vetcor<Base>
が一番きつい
0314デフォルトの名無しさん2014/04/15(火) 20:12:18.40ID:MU2KfTCa
>vetcor<Base>
そもそも派生クラスを突っ込めない。
>vetcor<Base*>
所有権がどこにあるのか分からないので論外。
>vetcor<shared_ptr<Base>>
virtualデストラクタ不要で便利。
>ptr_vector<Base>
今更ptr_vector?unique_ptrでいい。
0315デフォルトの名無しさん2014/04/15(火) 20:33:50.00ID:O7xBtcGx
make_uniqueが標準に入らないと、記述量がちょっと面倒
0316デフォルトの名無しさん2014/04/15(火) 20:42:49.07ID:Nbqron3B
>>314
たしかに
デザパタで
知らんかった
流行り廃りとかあるの?デザパタで
0317デフォルトの名無しさん2014/04/15(火) 20:49:25.61ID:aOtL598m
std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?
0318デフォルトの名無しさん2014/04/15(火) 20:54:50.82ID:tBkVUf7m
moveできないから
0319デフォルトの名無しさん2014/04/15(火) 23:53:29.68ID:hh7KqCRP
noncopyableだからだろ
0320デフォルトの名無しさん2014/04/15(火) 23:56:04.64ID:of9IS0B8
ユニポもそうだけど
0321デフォルトの名無しさん2014/04/16(水) 00:00:41.11ID:cUKcFdx2
>>320
すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで
0322デフォルトの名無しさん2014/04/16(水) 00:40:07.75ID:UZj3cAYP
なるほど、unique_ptrの機能はC++11が前提なんですね
0323デフォルトの名無しさん2014/04/16(水) 01:04:51.10ID:RlYL1+PT
>>321
>copyかmoveが出来ないとコンテナには入れられない

ソースは?
vectorについてはその通りだとは思うが
0324デフォルトの名無しさん2014/04/16(水) 01:55:04.23ID:cUKcFdx2
>>323
悪いけど、規格の該当箇所探すのメンドいから↓読んでみて
http://faithandbrave.hateblo.jp/entry/20120418/1334731512
03253232014/04/16(水) 06:52:53.53ID:gRD8q33D
>>324
23.3.5p2でstd::listは23.2の仕様に従うとなっていて
そこで説明されるemplace_frontはEmplaceConstructibleであることが要求されていて
26.2.1p13のEmplaceConstructibleの定義は
コピー/ムーブを要求していないと読んだのだけれど
0326デフォルトの名無しさん2014/04/16(水) 08:18:00.83ID:ySVTxJz4
古い仕様からアップデートしてない人なんじゃね?
0327デフォルトの名無しさん2014/04/16(水) 09:04:15.08ID:AatfYxHX
>>262
ジジイがしょうわ
0328デフォルトの名無しさん2014/04/16(水) 09:05:40.16ID:AatfYxHX
>>262
ジジイが昭和の知識でレスすんな
つーか、いい加減に死ねよ
0329デフォルトの名無しさん2014/04/19(土) 15:31:58.78ID:9tEZQcT3
順列を列挙しようと思ったのですが、うまく行きません。どこが間違っているのでしょうか
http://codepad.org/WCpyEKL1
0330デフォルトの名無しさん2014/04/19(土) 16:05:56.26ID:j1F3U2CR
>>329
ここ
// for(i=0;i<D && used[i]==0;i++){
for(i=0;i<D;i++){
if(used[i] != 0) continue;
0331デフォルトの名無しさん2014/04/19(土) 16:17:09.98ID:9tEZQcT3
>>330
あw
うっかりでした。ありがとうございます!
0332デフォルトの名無しさん2014/04/21(月) 02:08:03.43ID:myPATJ+I
CYKのプログラム書きたいんだけどいまいちわからんわ
0333デフォルトの名無しさん2014/04/21(月) 20:25:21.57ID:aqBwlWRf
自作のプログラムにboostのregexのlibboost_regex-vc120-mt-sgd-1_55.libを
スタティックリンクして使いたいのですが、あるもうひとつ別のライブラリも
リンクしていてその中にparseという関数があり、.DEFファイルでexportして
います。そうすると、parseという関数が二か所にあるのでエラーするようで、
error LNK2001: 外部シンボル "parse" は未解決です。
となります。良い解決方法ありますか?VS2013です。
0334デフォルトの名無しさん2014/04/21(月) 20:28:06.08ID:FhRn8cH8
もう一つのライブラリはLoadLibraryでロードする
0335デフォルトの名無しさん2014/04/21(月) 20:45:39.61ID:sEf+QBU0
namespaceがあるのに競合するの?
パネーな
0336デフォルトの名無しさん2014/04/21(月) 21:03:16.16ID:nKQE7Rc+
自作の方をLoadLibraryした方が融通利く気がする
0337デフォルトの名無しさん2014/04/21(月) 21:33:12.78ID:GRQWVWO3
衝突の時は別のエラーになると思う
0338デフォルトの名無しさん2014/04/21(月) 21:37:25.48ID:Ugb12/p0
衝突ではなく未解決のシンボルってことは
呼び出し規約の間違いとかかね?
0339デフォルトの名無しさん2014/04/21(月) 21:39:13.49ID:lfASPZAR
定義が見つからないんだろう
0340デフォルトの名無しさん2014/04/21(月) 21:49:42.60ID:bZ7teAnE
extern "C"していないとか
アンダーラインが付いているとか
0341デフォルトの名無しさん2014/04/21(月) 21:51:36.46ID:k3MeFw2G
dumpbin /EXPORTS
0342デフォルトの名無しさん2014/04/21(月) 23:02:41.37ID: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 は初めてなのでいま調査中です。
0343デフォルトの名無しさん2014/04/21(月) 23:24:39.75ID:sEf+QBU0
>>342
MT,MD,Unicode,SJIS,debug,release,32,64...
うひゃー
0344デフォルトの名無しさん2014/04/21(月) 23:26:41.35ID:p/5mORia
>>342
.defの書き方が間違ってんだろ
ちゃんと=でマングリ名指定してるか?
そもそもLoadLibraryを使ってないのに.defなんて要るのか疑問
0345デフォルトの名無しさん2014/04/21(月) 23:44:38.09ID:bP/zsOii
マングリって卑猥な響きだから「ング」まで書こうなw
0346デフォルトの名無しさん2014/04/21(月) 23:46:37.00ID:lfASPZAR
C++だし名前が被ったからって問題になるとは思えんが
0347デフォルトの名無しさん2014/04/22(火) 00:32:10.03ID:XZpvcXn8
さっぱり分からんけど、boostのlib関数がextern "C"扱いになっているのか
0348デフォルトの名無しさん2014/04/22(火) 02:56:45.37ID:z792onaE
>>342
ビシッと
using namespace boost::filesystem;
using namespace boost::regex;
ってしているか?
0349デフォルトの名無しさん2014/04/22(火) 13:53:46.62ID:z8WHMXPV
boost云々は関係なくてDLLとか装飾名のルールがわかってない
そしてその次は呼び出し規約の罠に嵌るだろう
0350デフォルトの名無しさん2014/04/23(水) 08:47:13.64ID:Fk2AHs0t
マクロをグローバル変数に置き換えたいんですけど、
インクルードガードを使ったヘッダーにグローバル変数を定義すれば使えばexternを使う必要ないし
どこかでグローバル変数の定義を必要もないんじゃないですか?
どうやるのが普通ですか?
0351デフォルトの名無しさん2014/04/23(水) 10:08:33.15ID:PVKzZAxe
状況がよくわからんが、どうやるのが普通かと聞かれればマクロもグローバル変数も使わないのが普通。
0352デフォルトの名無しさん2014/04/23(水) 10:32:56.00ID:Fk2AHs0t
#define ASPECT_RATIO 1.653
でも
const double AspectRatio = 1.653;
でもないとしたら
なにが正解ですか?
0353デフォルトの名無しさん2014/04/23(水) 10:37:08.06ID:jGDL0Z25
もしかしてstaticを知らん人かな
0354デフォルトの名無しさん2014/04/23(水) 11:24:29.54ID:+dMP+eIV
Asperger_ratio
0355デフォルトの名無しさん2014/04/23(水) 11:25:41.35ID:PVKzZAxe
>>352
それらの定義で何が不満なの?
0356デフォルトの名無しさん2014/04/23(水) 11:38:28.27ID:uO48px5M
何がしたいのかわからん
てにをはちゃんと使って
0357デフォルトの名無しさん2014/04/23(水) 12:13:19.90ID:rM84JtQI
.hにはexternつけて宣言
どれかの.cで定義
0358デフォルトの名無しさん2014/04/23(水) 18:08:37.36ID:6DXUFUqF
元がマクロなら実体がいらないはず
C++なら constで問題ない

それとも"変数"にするのが目的なのか
0359デフォルトの名無しさん2014/04/23(水) 18:31:38.51ID:rpCr7euc
ここで__declspec(selectany)で動作保証を得たQが
extern要らない珍説のために降臨です
0360デフォルトの名無しさん2014/04/23(水) 20:19:24.40ID: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;
}
0361デフォルトの名無しさん2014/04/23(水) 20:36:19.28ID:FOWeiF78
>>360
0.8×6+0.8=5.6 何ら問題ない。
商7、あまり0.0を期待したなら
誤差があるdoubleを使うことが誤り。

http://ideone.com/0NyTzT
0362KUSO KOTE ◆unko./w.Osri 2014/04/23(水) 21:07:45.02ID:awWEnTYH
doubleはこういう落とし穴があるので注意されたし。
http://ideone.com/xhrAFz
0363デフォルトの名無しさん2014/04/23(水) 21:47:01.45ID:Md9gKFL1
動的確保について質問です
動的確保をした関数からは確保した配列を他関数に渡せますが
他の関数からは渡せません(Segmentation fault)
なぜでしょうか
また、回避策はありますか

http://codepad/ssrgksbZ
0364デフォルトの名無しさん2014/04/23(水) 21:48:24.84ID:Md9gKFL1
切り貼りしててorg抜け
すみません
http://codepad.org/ssrgksbZ
0365デフォルトの名無しさん2014/04/23(水) 21:54:08.65ID:FOWeiF78
>回避策はありますか
なめてんのか。馬鹿に付けるクスリは無いわボケ

>void initMatrix(int **matrix,
 ↓
int **initMatrix(int **matrix,
matrix = initMatrix(…)
0366デフォルトの名無しさん2014/04/23(水) 21:56:11.85ID:FOWeiF78
まちがえた
>void initMatrix(int **matrix,int m,int
n)
 ↓
int **initMatrix(int m,int n){…}
matrix = initMatrix(m, n);
0367デフォルトの名無しさん2014/04/23(水) 22:03:51.85ID:WNesHxZT
>>366
なるほど
修正したところうまく動きました
ありがとうございます

初心者でよくわからないのですがなぜセグフォになるのでしょうか
関数が終わってしまうと自動的に開放されてしまうのですか?
0368デフォルトの名無しさん2014/04/23(水) 22:05:34.00ID:K3ATFzcJ
>>361-362
そういう仕様(?)なんですね。
回答していただきありがとうございます。
0369デフォルトの名無しさん2014/04/23(水) 22:05:58.79ID:FOWeiF78
>>367
関数呼び出し側と呼ばれた先でそれぞれ
printf("%p\n", matrix);
して出直せ
0370デフォルトの名無しさん2014/04/23(水) 22:07:22.97ID:FOWeiF78
誤: printf("%p\n", matrix);
正: printf("%p\n", &matrix);
俺が出直してくるわボケ
0371デフォルトの名無しさん2014/04/23(水) 22:17:03.67ID:WNesHxZT
in initMatrix: [matrix] == 0x1f70010
in main: [matrix] == (nil)

開放されたという認識であっていますか
0372デフォルトの名無しさん2014/04/23(水) 22:39:21.12ID:D69Yihbi
Asperger_ratio = 100%
0373デフォルトの名無しさん2014/04/23(水) 22:54:49.37ID:SZamVfz1
>>370
あ,なるほど
そういうことでしたか
これだと値渡しと一緒ということですね
理解しました
ありがとうございました
0374デフォルトの名無しさん2014/04/23(水) 22:58:31.24ID:6UzUL/o1
>ID:FOWeiF78
口調何とかしろ、それ以前にまずは落ち着け
>ID:Md9gKFL1=ID:WNesHxZT
>>366のように、ポインタを引数にするのではなく返り値をポインタにするのが常道
0375デフォルトの名無しさん2014/04/23(水) 23:06:33.34ID:h/mD0R6k
結果反映を 引数側への作用 として実装しなければならないのなら
やり取りしたい型の {C++ なら 参照} {Cなら ポインタ}

やり取りしたい型 TYPE

呼び出し元変数
TYPE a;

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

C
関数 func_c(TYPE* arg);
呼び出し func_c(&a);
0376デフォルトの名無しさん2014/04/23(水) 23:20:22.44ID:ThiOTjLk
そういうのはC++向けにラッパー書くものじゃね
0377デフォルトの名無しさん2014/04/23(水) 23:42:39.30ID:6UzUL/o1
>>376
そもそもC++ならvectorあるけどな……
0378デフォルトの名無しさん2014/04/24(木) 00:40:47.85ID:duqxO9nN
>>367
セグフォあーだこーだの前に、超シンプルにして
int a = 1;
関数change_aでこの変数aを100に書き換えたい。
void change_a(???){???}
?のところどうしたら良いと思う
0379デフォルトの名無しさん2014/04/24(木) 02:25:11.42ID: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;
}
0380デフォルトの名無しさん2014/04/24(木) 02:54:34.67ID:AklGWvZ+
int **matrix;

initMatrix(&matrix, ・・・)
showMatrix(sxmatrix)
・・・
って動作をしたかったんだろな
0381デフォルトの名無しさん2014/04/24(木) 02:55:20.80ID:AklGWvZ+
sxはゴミだ忘れてくれ
0382デフォルトの名無しさん2014/04/24(木) 04:56:14.66ID:zfDiDIb5
>>364
無意味なcastすんな

メモリ管理できねえならC++でかけ
http://codepad.org/BuDsQKHX
0383デフォルトの名無しさん2014/04/24(木) 08:43:35.64ID:urYv0y/c
MatrixT initMatrix(size_t m,size_t n) {  MatrixT matrix;
 return matrix;
}
これってNRVOを期待してるけど
最適化されなかったら大ダメージ?
03843832014/04/24(木) 08:47:09.71ID:urYv0y/c
ああ、ムーブコンストラクターがあれば
大した問題ではないな。失礼
0385デフォルトの名無しさん2014/04/24(木) 13:07:39.50ID:f/UtlFnw
多次元配列が絡んだ場合がよくわかっていないようです
勉強してきます

>>378
void change_a(int *a){ *a = 100; }
>>379
1
値渡し
vの値をf()のargにコピーしているだけ
0386デフォルトの名無しさん2014/04/24(木) 13:11:34.00ID:Z31Ilie8
× vの値をf()のargにコピーしているだけ
○ 変更しているf のargはvとは別の変数(値は呼び出し時のvのコピー)であるため
0387デフォルトの名無しさん2014/04/24(木) 13:17:20.61ID:AklGWvZ+
void f(int arg)なのに呼び出しはf()かよ
ってのはおいといて

f(v)であったとしても
int arg = v;
arg = 2;
return;
と同義だからな
0388デフォルトの名無しさん2014/04/24(木) 18:51:35.45ID:UcaZdIF2
>>387
>呼び出しはf()かよ

f()が呼び出しだなんて誰か言ったっけ。
Cでの宣言(引数は言及しない関数の宣言)を使って
特定の関数のことを指しているのではないの?
0389デフォルトの名無しさん2014/04/24(木) 19:07:27.89ID:2icztRE+
文意は >>379 中のコードの話だと思われる
0390デフォルトの名無しさん2014/04/24(木) 20:26:13.24ID:oR64+xqp
>>385
じゃ
int* pa;
のpaを関数内で書き換えときは?
そして int** ppa;
のppaを関数内で書き換えるときは?
0391デフォルトの名無しさん2014/04/24(木) 20:30:38.78ID:AklGWvZ+
>>390
お前は宣言する時にわざわざ
int a, b;
int* c, *d;
とやっているのか

int a, b, *c, *d;じゃないのか
0392デフォルトの名無しさん2014/04/24(木) 22:15:41.81ID:oR64+xqp
宣言....
0393デフォルトの名無しさん2014/04/24(木) 22:25:22.75ID:tXCIarBm
この場合は定義だね、おっと、 extern は‥‥とかいう信者が湧いてくる
0394デフォルトの名無しさん2014/04/24(木) 23:38:14.25ID:V/BmNssB
>>387
すまんコンパイル通さずにレスした俺が悪かった、修正ありがとう…

要するに、>>364 ではポインタで分かりにくくなってるだけで
起きてるのはそれと同じことなんよね
0395デフォルトの名無しさん2014/04/25(金) 00:05:21.23ID:fXiUYsOQ
>>391
> int a, b, *c, *d;じゃないのか

こんな書き方する奴、まだいるのか
0396デフォルトの名無しさん2014/04/25(金) 00:30:55.96ID:VLxq923M
>>391は普通にそうしているんだろ
0397デフォルトの名無しさん2014/04/25(金) 01:12:44.63ID:k40O+kcb
どっちもでいいよ。
使用するintを1行で書きたいんでしょ。
0398デフォルトの名無しさん2014/04/25(金) 01:52:47.62ID:KcORG+H/
そもそも関数の先頭で未初期化変数定義するみたいな奴なんてまだいるのか
0399デフォルトの名無しさん2014/04/25(金) 01:54:09.50ID:m07o/u+5
そりゃいるでしょうね
コンパイラを選びますし
0400デフォルトの名無しさん2014/04/25(金) 02:08:33.86ID:KcORG+H/
>>399
コンパイラのせいにして思考停止しているのか?
古い仕様のCで書くにしてもスコープ切ればよいだけで
未初期化変数、変数の使いまわしなんてバグの温床だからやっちゃダメ
0401デフォルトの名無しさん2014/04/25(金) 02:39:15.54ID:m07o/u+5
> 古い仕様のCで書くにしてもスコープ切ればよいだけで
Cで書かれたメジャーどころでそんなイディオム使ってるのって存在するの?
そんな規約に出会った事はないし見たこともないのだが。
0402デフォルトの名無しさん2014/04/25(金) 02:52:23.74ID:IKT5NePF
そんな古いコンパイラ使わされるとか苦行ですね。
どんな業界で残ってるんですか?
その業界には絶対に近づかないでおこうと思うので後学のために教えていただけると有り難いです。
0403デフォルトの名無しさん2014/04/25(金) 03:53:59.11ID:VL+oWFa1
必要無いのに初期化とか工程増えるだけやん
0404デフォルトの名無しさん2014/04/25(金) 04:53:32.31ID:DUkBiaE/
gcc に 未だに -pedantic オプションが存在していることを考えるんだ!
0405デフォルトの名無しさん2014/04/25(金) 07:38:35.04ID:IKT5NePF
>>403
初期化の必要がないってどんなとき?
0406デフォルトの名無しさん2014/04/25(金) 07:54:41.16ID:VHgb1LJP
int a;
(分岐して分岐先でそれぞれ代入)
0407デフォルトの名無しさん2014/04/25(金) 07:56:53.20ID:jPmvuOB6
そんなところではろくなエディタやツールもないだろうし
空スコープの濫用でうっかり予期せぬ行連結かましたりする方がこわい
0408デフォルトの名無しさん2014/04/25(金) 08:02:41.14ID:5CU5NLZq
また随分な珍説が出てきたな。
0409デフォルトの名無しさん2014/04/25(金) 08:20:24.78ID:4HugTnIc
>>402
教えてやろう。
お前の周りの家電のマイコンファームウェアだ。
ifやforと同じくらいスコープのネストが深くなるのが基本。
0410デフォルトの名無しさん2014/04/25(金) 12:07:55.03ID:/pxP7/DV
自動変数の領域をスコープ外れた時点で回収するコンパイラ少ないでしょ
少なくともオレは見たことない
組み込みこそスタック領域は貧弱だろ
0411デフォルトの名無しさん2014/04/25(金) 12:45:07.65ID:4HugTnIc
回収っていうか、スコープはずれたら別のスコープの
変数に割り当てられるだけ。
例えばaとbは同じアドレスになる。
デストラクタとかないから、bの時点でaの値が
そのまま残ってる。
{ int a = 100; }
{ int b; }
0412デフォルトの名無しさん2014/04/25(金) 12:51:13.14ID:jPmvuOB6
>>410
最適化で省略してるだけじゃね
0413デフォルトの名無しさん2014/04/25(金) 13:14:30.62ID:TvmR/CLK
規格できまっている挙動ではないし不毛だな
0414デフォルトの名無しさん2014/04/25(金) 13:42:24.28ID:IMABWYJa
だな、>>411 なんてアドレス同じ以前になにもしない可能性が高いし。
0415デフォルトの名無しさん2014/04/25(金) 13:43:29.17ID:B1sFbtmb
>>410
回収ってメモリのことだと思うが
そもそもスコープに入るときに確保されたものじゃないから
スコープ抜けるときに回収しないのは当然
0416デフォルトの名無しさん2014/04/25(金) 14:47:59.37ID:VL+oWFa1
>>414
例えなんだから他は省いてるだろ
0417デフォルトの名無しさん2014/04/25(金) 15:27:09.22ID:KcORG+H/
下等で奇怪、見慣れたコードとはまるで違うとおぼしきモノ達。
それら異形の一群を、ヒトは古くから畏れを含み、いつしか総じて“バグ”と呼んだ。
0418デフォルトの名無しさん2014/04/25(金) 19:07:14.27ID:DUkBiaE/
単にスタックポインタが動くだけなのに回収とか‥‥
0419デフォルトの名無しさん2014/04/25(金) 19:08:46.41ID:ldQxBRm0
そもそも回収という言葉は何を意味するのか
0420デフォルトの名無しさん2014/04/25(金) 22:24:27.23ID:NLMkqq4l
.cppの拡張子でc言語を使いたいのですが(関数のオーバーロードが出来る等 便利な機能があるので)
c++で拡張された部分を使わなければmallocを用いても平気でしょうか?
0421デフォルトの名無しさん2014/04/25(金) 22:36:21.02ID:ldQxBRm0
拡張が見極められるならいいんじゃね
0422デフォルトの名無しさん2014/04/25(金) 22:36:57.12ID:mwVDX3LY
ボクは平気です
0423デフォルトの名無しさん2014/04/25(金) 22:37:35.91ID:jPmvuOB6
言ってることがハチャメチャ
0424デフォルトの名無しさん2014/04/25(金) 22:41:48.11ID:NLMkqq4l
>>423
自分でも言ってて ん?って感じなんですが
for(int i; ; ++i)
みたいなものだとか
結構限定的に使うって感じなんですが
大まかには std空間とクラスを使わない

もっと言うと.cのものを.cppにかえちゃっても大丈夫でしょうかみたいな感じですかね...
0425デフォルトの名無しさん2014/04/25(金) 22:44:37.36ID:I0yUpS7C
C++ で、新たに予約語になったものが、
たまたまCで使われてると、書き換えが必要になる (new とか delete とか)
0426デフォルトの名無しさん2014/04/25(金) 22:44:57.28ID:XFGUZTlf
C経験者ですが例外・テンプレート・クラスを除く
C++の便利な機能を使いたいです。
C++コンパイラーを使ってCのスタイルでmallocを用いてもよかですか?
0427デフォルトの名無しさん2014/04/25(金) 22:45:39.98ID:NLMkqq4l
bool型があったりとか(intで代用すれば問題ないのですが)
//でコメントがサポートされてないのもあるし
cppのおいしい部分だけ使いたいんですよね...
0428デフォルトの名無しさん2014/04/25(金) 22:46:59.12ID:vKWRVcWD
>>426
宜しいんじゃござんせんか?
0429デフォルトの名無しさん2014/04/25(金) 22:49:02.72ID:vKWRVcWD
>>427
>bool型があったりとか(intで代用すれば問題ないのですが)
C99にもそうでない環境でも、大抵stdbool.hが使えると思いますが。

>//でコメントがサポートされてないのもあるし
今時、そんな例外殆どないでしょう。そもそも、普通C99
0430デフォルトの名無しさん2014/04/25(金) 22:50:46.85ID:NLMkqq4l
>>429
すんません
ちょっと極端に言いたかっただけです
0431デフォルトの名無しさん2014/04/25(金) 22:53:19.80ID:LtcOoigK
>>426
いわゆるbetter Cか……別に良いんじゃない?
ただ、mallocじゃなくてnew使おうな
それに、例外・テンプレート・クラスはC++の旨味の大部分だったりするけど大丈夫?
(STLは例外・テンプレート・クラスによる産物なので使わないって意味でOK?)
0432デフォルトの名無しさん2014/04/25(金) 23:15:36.79ID:JcA2jKFr
>>426
むしろ便利なC関数を使えるのがC++の利点だと思う
printfの代わりにcoutしかなかったら間違いなくハゲるし、
mallocの代わりにchar配列をnewするとか、やってられんよ
0433デフォルトの名無しさん2014/04/25(金) 23:18:06.68ID:ldQxBRm0
coutはそうだけどmallocじゃなくnewしようよ
後でオーバーロードしたくなったりするじゃんね
0434デフォルトの名無しさん2014/04/25(金) 23:22:28.07ID:LtcOoigK
>>432
>printfの代わりにcoutしかなかったら間違いなくハゲる
確かにマニピュレータ使い倒して書式設定するのは慣れないとキツいかもね
でもただ表示させたいだけならcout(ストリーム処理)の方が修正も楽じゃん?
>char配列をnewする
悪いことは言わないからstring使っとけ
0435デフォルトの名無しさん2014/04/25(金) 23:31:47.30ID:vKWRVcWD
まぁ、std::stringの代わりにstd::vector<char>を使うこともあるが。
streamのいい点はstd::complexでも分かるように、自作のクラスも階層的に
一度出力処理を書いておけば事が足りる点だな。
0436デフォルトの名無しさん2014/04/26(土) 00:07:53.16ID:4cZNGc28
初心者に対して「mallocじゃなくてnewを使え」とだけしか言わないと、free()使った
ままだったりdelete[]使わなかったり、コンパイルエラーにならないところではまりそう。
0437デフォルトの名無しさん2014/04/26(土) 00:14:02.92ID:2mPnYH20
その手の馬鹿は何度も何度もハマればいいんだよ
0438デフォルトの名無しさん2014/04/26(土) 00:19:25.71ID:LrSvGOM8
malloc が駄目ならalloca を使えば良いじゃない
0439デフォルトの名無しさん2014/04/26(土) 00:21:45.69ID:e4eB3nqK
大抵その時は動いてしまうからたちが悪いんたよ。
0440デフォルトの名無しさん2014/04/26(土) 00:54:22.87ID:TYiKquMH
VC使いに多いかと。
私も平気にfreadとか使ってました。
0441デフォルトの名無しさん2014/04/26(土) 01:00:10.95ID:LAXHDRsh
>>439
ガシガシ使わないとそうそう問題にはなりにくいからな……>メモリーリーク
0442デフォルトの名無しさん2014/04/26(土) 01:23:39.24ID:RUZS612/
こんなコードみつけたんだけど
static const LPCTSTR list[] = {TEXT("AAA"),TEXT("BBB"),TEXT("CCC")};
LPCTSTRの前にconstつけるのと、つけないのでどんな変化があるんですか?
0443デフォルトの名無しさん2014/04/26(土) 01:35:06.71ID:rnp+GXdW
LPCTSTRにコンストはいってるか?
そうだとしても明記したかったんだろ。
0444デフォルトの名無しさん2014/04/26(土) 01:42:16.09ID:fIjhv7f7
list[0]++;
0445デフォルトの名無しさん2014/04/26(土) 07:44:36.86ID:fzTmiJwL
>>441
malloc()なんて裸でつかうもんじゃないよ
0446デフォルトの名無しさん2014/04/26(土) 07:47:28.76ID: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");
}
0447デフォルトの名無しさん2014/04/26(土) 07:50:59.21ID: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
0448デフォルトの名無しさん2014/04/26(土) 07:52:03.99ID:FDgGm5F+
malloc使うといけないのか?
0449デフォルトの名無しさん2014/04/26(土) 07:56:41.06ID: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とすれば
成功することはわかっています.
0450デフォルトの名無しさん2014/04/26(土) 08:04:58.64ID:H4OEZVXF
不思議だねw
0451デフォルトの名無しさん2014/04/26(土) 08:14:52.42ID: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_;
};
0452デフォルトの名無しさん2014/04/26(土) 08:16:25.20ID: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;
}
0453デフォルトの名無しさん2014/04/26(土) 08:19:13.28ID:H4OEZVXF
エラーメッセージは?
0454デフォルトの名無しさん2014/04/26(土) 08:22:01.61ID:qVfVXmNl
shared_ptrに関するエラーが200行以上出てきます...
0455デフォルトの名無しさん2014/04/26(土) 08:27:27.83ID:BINT6LGE
クラスも使わないbetter C利用者に対して
mallocの代わりにnewを使えというやつはバカ。
エラー処理の考え方が根本的に違って大きな見直しが必用になるのだから
過剰なものを「こちらがいいんだ!」と押しつける
ありがた迷惑
0456デフォルトの名無しさん2014/04/26(土) 08:57:11.02ID:qVfVXmNl
すいません >>451 >>452です。
自己解決しました。

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

あまりにも長いエラーメッセージだったのでとんでもないことをしでかしているのかと焦って質問したのですが、
なんともないような話でした。
すいません。。。 > <
0457デフォルトの名無しさん2014/04/26(土) 09:17:48.18ID:oTpRF7L2
make_sharedにthisって根本的に間違ってるぞ。
0458デフォルトの名無しさん2014/04/26(土) 09:23:24.24ID:e4eB3nqK
>>456
単にメンバー内のクラスに持ち主の参照を持たせたいだけだとおもう。

>>455
プリミティブ型なら文句は言わんがC++の構造体とかもmalloc使うのは嫌な匂いがするな。
mallocしか使えないなら大人しくC言語使ってた方がいいんじゃね?
そもそもクラス使わないC++に何のメリットがあんの?
0459デフォルトの名無しさん2014/04/26(土) 09:29:41.92ID:oTpRF7L2
ああ、単にコンストラクタの引数ってだけか
0460デフォルトの名無しさん2014/04/26(土) 12:45:37.15ID:LAXHDRsh
>>458
>クラス使わないC++に何のメリットがあんの?
俺も同意見だが、覚えるのが大変だから覚えない、ってことじゃね?
http://www.kijineko.co.jp/tech/betterc/1
0461デフォルトの名無しさん2014/04/26(土) 13:05:57.99ID:dMJ+hsKf
>>442
list[] 自体が const になるよ。
0462デフォルトの名無しさん2014/04/26(土) 13:10:59.56ID:dMJ+hsKf
>>426
その条件を守っている限りは、問題ないと思いうよ。
*.c と混在させる場合は外部リンケージに注意ね。
0463デフォルトの名無しさん2014/04/26(土) 13:12:17.01ID:+AzHArIu
C++の場合、構造体もクラスの一種だから
コンストラクタやデストラクタその他メソッドがあっても普通のことで
だから「構造体ならmalloc()でもいい」ってのは言えないんよね

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

上にも書かれてる通り、malloc()と違いnewのそれは例外になるから
例外処理を知らない人にはその場で強制終了みたいなもんなんよね
…まあメモリすら確保できないんなら、大概は強制終了で良いような気もするがw
0464デフォルトの名無しさん2014/04/26(土) 15:11:50.98ID:au4nADwa
mallocの件は、単なるメモリ領域を確保したいような場合に、C++なら
newよりもシンプルな手段を取れるってことだろう。
例外じゃなく返り値で判定できるのもいいところ。
当たり前だけど、C++のオブジェクトをmallocで確保するようなことはしないほうがいい。
0465デフォルトの名無しさん2014/04/26(土) 15:29:44.95ID:e4eB3nqK
>>460
なんだ甘えか。
だったらC言語使ってろよって話ですね。
C++の案件にCの知識だけでずっとやっていこうとか思ってるならしね。
>>464
型を決めずに単なるメモリ確保する事って殆ど無いだろ。
例外が嫌ならせめてnew(std::nothrow)使え。それでも例外発生するときはあるがその時はmallocで代替出来ないときだ。
0466デフォルトの名無しさん2014/04/26(土) 15:36:17.91ID:EyRxebkg
何熱くなってるのか知らんが
C++はベターCとしても使えるようになってるんだしmalloc/free使ってもいいだろ
ここの質問者はプログラミング専門とは限らないんだし
0467デフォルトの名無しさん2014/04/26(土) 15:41:00.49ID: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
0468デフォルトの名無しさん2014/04/26(土) 15:46:49.33ID:rnp+GXdW
AsukaLib.rc 99 1 で、AsukaLibがundefined keyword or key nameでは
0469デフォルトの名無しさん2014/04/26(土) 15:49:33.08ID:e4eB3nqK
>>466
いや、だからクラスも使わないC++の何がベターなの?
メリットない使い方してmalloc使うことによって落とし穴にハマるぐらいならC言語使えばいいじゃん?C++覚える気もないみたいだし?
0470デフォルトの名無しさん2014/04/26(土) 15:58:18.06ID:au4nADwa
C++信者はこれだから・・・。
例えば、Cの文字列処理は初心者泣かせなので、文字列処理のみ
std::stringを使うのはありだよ
0471デフォルトの名無しさん2014/04/26(土) 16:06:00.04ID:e4eB3nqK
>>470
例外、テンプレート、クラスを使わないって前提で話してたんだけど?
std::string使う時点で全てに当てはまりますやん
0472デフォルトの名無しさん2014/04/26(土) 16:24:09.22ID:EyRxebkg
>>469
質問者が「関数オーバーロード」を上げてるでしょ
たとえ「それだけ」であっても便利だと思うけど
引数型ごとに関数名変えるのは確かに面倒だし
0473デフォルトの名無しさん2014/04/26(土) 16:27:43.67ID:dMJ+hsKf
>>469
基本的には、とにかくやってみろ、でいいんじゃね。
本人が制限つけた上でオーバーロード機能を使いたいって言ってるだけなんだから。
仕事じゃないんだから、そこまで全力で反対しなくても。
0474デフォルトの名無しさん2014/04/26(土) 18:19:37.24ID:LAXHDRsh
>>466
ベターC的な要素って大抵最新のCには実装されているんだよな(例:ブロックの途中で宣言)

関数オーバーロードとかのようにほんのつまみ食いしかしないってんなら知らん
でもまあstd::stringとかstd::vectorとかはちょっと覚えるだけで楽できる機能の代表だったり……
0475デフォルトの名無しさん2014/04/26(土) 18:37:04.64ID:Vsr2O9eZ
>std::stringとかstd::vectorとかはちょっと覚えるだけで楽できる

例外安全はくそくらえってことですねわかります
0476デフォルトの名無しさん2014/04/26(土) 18:48:00.90ID:JLcEd4yY
考慮する必要がどこにある
0477デフォルトの名無しさん2014/04/26(土) 19:22:58.63ID:pdO++Zde
バッファオーバーランに比べればどうということはない
0478デフォルトの名無しさん2014/04/26(土) 19:30:11.19ID:e4eB3nqK
std::vector、std::stringを使っただけで例外安全じゃなくなるわけでもなし。メモリ確保に失敗なんていう致命的な例外発生したなら大抵はそのまま終了でいいんじゃないかと思う。

そもそもC言語だけ使ってたら例外と無縁で居られるかと言えばそうでもないし、例えばWindowsだといろんなWin32APIがC言語で使ってても例外出す(SEH)。
0479デフォルトの名無しさん2014/04/26(土) 19:40:11.42ID:TksPWY/c
kuso *p = (kuso *)malloc(sizeof(kuso)*100);

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

free(p);
0480デフォルトの名無しさん2014/04/26(土) 19:51:25.71ID:e4eB3nqK
>>479
そのままプロセス終了してなんの問題もないじゃん。
0481デフォルトの名無しさん2014/04/26(土) 19:56:45.35ID:ahYJ/99m
つまり例外安全はくそくらえってこと
0482デフォルトの名無しさん2014/04/26(土) 19:58:16.52ID:e4eB3nqK
はあ?
外に例外出さない事が例外安全ってわけじゃないぞ?
0483デフォルトの名無しさん2014/04/26(土) 20:01:51.06ID:ahYJ/99m
>>478
>Win32APIがC言語で使ってても例外出す(SEH)
参考までに、例外を出すAPIは何?
0484デフォルトの名無しさん2014/04/26(土) 21:06:09.66ID:LAXHDRsh
>>482
例外安全の段階:
[1]不送出保証→そもそも例外を外に出さない
[2]強い例外安全性→失敗しても副作用を起こさず、全データは元の値を保持
[3]基本的例外安全性→失敗すると副作用が起こるかもしれないがデータは有効な値である
0485デフォルトの名無しさん2014/04/27(日) 09:02:09.27ID:jKbi43u9
>>474
> 関数オーバーロードとかのようにほんのつまみ食いしかしないってんなら知らん

恥ずかしくない?
ちょっと ROM ってなよ。
0486デフォルトの名無しさん2014/04/27(日) 10:26:32.60ID:GHcWHbCh
>>483
InitializeCriticalSection
0487デフォルトの名無しさん2014/04/27(日) 13:12:36.77ID:lkIW61dB
>>483
int a = 1, b = 0, c;
c = a / b; // SEH発生。

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

>>474
そもそもbetterCって言葉自体が昔のCで生まれた言葉だからな
まあ、現代ではC++環境をC言語として使わざるを得ないケースもある
その結果C99ではなくbetterCに成らざるを得ないって事情もあるけど
0489デフォルトの名無しさん2014/04/27(日) 15:25:31.54ID:ysde5Cmk
>>487
undefined behaviorの挙動や
明示的に例外だすAPIの話をされてもねぇ
0490デフォルトの名無しさん2014/04/27(日) 15:25:43.37ID:XlPRquUK
SEH の __try 〜 __finally を実装してる Cコンパイラで
どうSEHを捕まえてるのか良くわからんな
0491デフォルトの名無しさん2014/04/27(日) 16:00:19.19ID:jKbi43u9
>>489
> 明示的に例外だすAPIの話をされてもねぇ

意味わからん
0492デフォルトの名無しさん2014/04/27(日) 22:54:26.81ID:OJzsjaa+
toupperやtolowerの全角文字版って有りますか?
0493デフォルトの名無しさん2014/04/27(日) 23:03:22.74ID:dRMpu4rZ
>>492
全角文字の文字コードは何?JIS?shift-JIS(CP932)?, EUC?, それとも?
0494デフォルトの名無しさん2014/04/27(日) 23:17:09.79ID:KqK7z0IN
よくある、計算結果の下5桁を〜の問題をとく上で、
10進数で表すと5桁以内の数字A の二乗の下五桁をとって新しいAとし、・・・
をできるだけ早く何回も繰り返す計算をC言語で実現したいです。どんな方法が最適でしょうか?

素直に
int A = 765 //初期値
for(i=0; i<10000; i++){
A = (A*A) % 100000;
}
とするのが一番早いのでしょうか
0495デフォルトの名無しさん2014/04/27(日) 23:20:06.18ID:D03yOYH6
gmpだな
0496デフォルトの名無しさん2014/04/28(月) 00:07:41.35ID:vBB1ZBuL
>>494
マジレスすると、その計算はもっとエレガントに書ける
http://d.hatena.ne.jp/kazu-yamamoto/20090223/1235372875
ついでにメモ化を施せば完璧
0497デフォルトの名無しさん2014/04/28(月) 00:37:29.03ID:S0oQyofE
最適化された式を求めるのは数学者がやるのか?
0498デフォルトの名無しさん2014/04/28(月) 05:29:03.79ID:nB7PeshG
>>494
Aが符号付き32bitで 46341 以上の時、また、
Aが符号無し32bitで 65537 以上の時、
A * A はオーバーフローするね。

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

Aを64bit値にするか、宿題の制限で32bit整数しか
使えないのなら自前でやるか
0499デフォルトの名無しさん2014/04/28(月) 11:03:17.60ID:3V71eLEm
>>494
オーバーフローを回避するにはキャストすると良いよ
A = ((long long)A * A) % 100000;
0500デフォルトの名無しさん2014/04/28(月) 14:46:48.36ID:JkAfPWWw
ていうか素で計算しちゃ駄目な
パズル寄りの問題なんじゃないの
0501デフォルトの名無しさん2014/04/28(月) 15:08:25.42ID:97z81I41
long double という128bitがあるのに
intには128bitがないのでしょうか?
0502デフォルトの名無しさん2014/04/28(月) 15:22:00.40ID:mheEU0a2
long doubleが128ビットとは決まっていないし
intが128ビットでも問題ない
0503デフォルトの名無しさん2014/04/28(月) 15:58:44.30ID:RIsmFlCa
またこいつか
0504デフォルトの名無しさん2014/04/28(月) 16:05:25.72ID:fuxL29fH
vs は80bitだったし、今はdouble と一緒だよ。
0505デフォルトの名無しさん2014/04/28(月) 19:04:52.24ID:t63YSNJY
>>504
>vs は80bitだったし
本当か?単にFPUの内部処理桁というだけで、表からは触れないんじゃなかったか?
0506デフォルトの名無しさん2014/04/28(月) 19:15:35.13ID:mheEU0a2
win16時代のms-c系は80ビットだった
0507デフォルトの名無しさん2014/04/28(月) 19:24:46.50ID:fuxL29fH
>>505
ソース貼っておく
http://msdn.microsoft.com/ja-jp/library/9cx8xs15.aspx
0508デフォルトの名無しさん2014/04/28(月) 20:08:02.05ID: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;
        //描画処理
    }
のように分割コンパイルしても大丈夫ですか(一応エラーは出なかったのですが)
0509デフォルトの名無しさん2014/04/28(月) 20:32:31.13ID:/YsEmaXY
省略する部分のチョイスがおかしいので読み取れないが
エラーも警告も無ければ大丈夫じゃない?
0510デフォルトの名無しさん2014/04/28(月) 20:34:54.25ID:eYjErRwy
>>509
ありがとうございます
たしかにチョイスしているところが微妙ですね...
要はForm1.hにガリガリ書きたくないので外部ファイルに委託したかっただけです
0511デフォルトの名無しさん2014/04/28(月) 20:50:39.82ID:/YsEmaXY
要はC++/CLIでポトペタし生成されたコードが
汚ならしく我慢できないって話でしょ?
それは昔から言われてる事で改善される気配もないから
GUI周りはC#で書くのが基本だよ
0512デフォルトの名無しさん2014/04/28(月) 20:55:46.98ID:eYjErRwy
>>511
そうなのでしょうね...
ところで あまりC#には詳しくないので、
.NETを使う上ではc++とc#の実行速度に違いとかは出てくるのでしょうか
0513デフォルトの名無しさん2014/04/28(月) 21:06:47.27ID:/YsEmaXY
基本同じと見ていいよ
ど忘れしたが3文字のなんだったかな、IronPythonで使われてるソレは遅い
でも、C#,C++/CLI,VB.NET,Boo,F#...なんかは同等とみていい
C++/CLIのメリットは
速度じゃなくて、P/Invokeでラッパー書かれることが無いようなマイナーな
C/C++なライブラリをそのまま扱えるので手抜きが出来る
正直それだけだと思うよ
0514デフォルトの名無しさん2014/04/28(月) 21:12:51.02ID:eYjErRwy
ありがとうございます
c#はシンプルに書けるので良いですよね
いままでC/C++を使っていましたが
確かにC#に移行してみるのも手ですね
0515デフォルトの名無しさん2014/04/28(月) 22:17:33.16ID:nYT9hkTJ
>>513
3文字っつーとDLRかな
まああれが遅いのはしゃーない気がする
0516デフォルトの名無しさん2014/04/28(月) 23:41:11.77ID:rB8lTHTI
switch文で意図的なフォールスルーをするとき
なにかわかりやすい目印を書きたいんだけど
みんなはどうしてる?
0517デフォルトの名無しさん2014/04/28(月) 23:42:52.41ID:nYC6TNjH
// fall through
0518デフォルトの名無しさん2014/04/29(火) 00:04:11.92ID:aeW4+FvO
>>515
それそれ
しゃーない部分があるのは承知してるし
場合によっては使える状況もあるだろうから否定はしない
ただ、用途に合わない人にとって
裏切られたというか騙された感を持つのはこれもまたしゃーない部分なんじゃないかな
ソレ系のものはソレである事をなるべく目立たないよう擬態する傾向にあるよね
suffixにソレを付ける命名規則を義務付けて欲しいよマジで
手間が増えるだけで嫌がらせでしか無い
0519デフォルトの名無しさん2014/04/29(火) 00:24:59.21ID:Br1Uxtes
>>516
// no break
0520デフォルトの名無しさん2014/04/29(火) 00:45:09.57ID:9oDU/gS/
ガベコレが自動でほぼ制御できないjavaとC#で長く経験をつんできた開発者が
C++の原始的なリソース管理に慣れるにはどういう学習素材が推奨されますか?
0521デフォルトの名無しさん2014/04/29(火) 00:47:07.98ID:QmOywj8Q
メモリ以外のリソースに関しては
C++もJavaもC#も変わらないと思うのだが
0522デフォルトの名無しさん2014/04/29(火) 01:18:14.33ID:QkXu+GLn
コンストラクタ、デストラクタがあるからJavaより楽だよな。
0523デフォルトの名無しさん2014/04/29(火) 01:32:39.98ID:F17WGv/b
Javaは原因を突き止めるのが非常に困難なメモリリークに弱い印象
実際すごく苦労している
0524デフォルトの名無しさん2014/04/29(火) 01:46:56.22ID:aeW4+FvO
>>520
質問がおかしい
> JavaとC#で長く経験をつんできた開発者
であるならばCは使えるでしょ
0525デフォルトの名無しさん2014/04/29(火) 02:48:00.08ID:AbATIs9f
初歩的すぎる質問ですがVC++2010で標準ライブラリを使うとき
#include の前に必要な準備はありますか?
(どこかからヘッダファイルをダウンロードして突っ込むとか)
0526デフォルトの名無しさん2014/04/29(火) 02:51:13.36ID:tzWpsPe5
>>525
標準ライブラリなら何も要らないよ
普通に「#include <stdio.h>」とか書けばいい
と言うか他のコンパイラでも標準ライブラリは
デフォで組み込まれてるだろw
0527デフォルトの名無しさん2014/04/29(火) 05:43:49.50ID:9oDU/gS/
JavaとC#の経験しかなくて、オブジェクト指向の基本は理解してるつもりだけど
C++でコード書くと必ずメモリリークが起ります。
こんな私が読むべき基本書籍があればご教示ください。
0528デフォルトの名無しさん2014/04/29(火) 05:58:15.66ID:04fcb81y
newなどを使わず、STLを使う。
0529デフォルトの名無しさん2014/04/29(火) 06:04:36.63ID:pH50e3ah
newしたものは必ずスマポに入れる
0530デフォルトの名無しさん2014/04/29(火) 07:42:22.09ID:TKW4+dLj
newしたものはグローバル変数にいれる。そしてdeleteしない。絶対にしない。
0531デフォルトの名無しさん2014/04/29(火) 08:09:12.73ID:B/znruqO
それじゃダメだろ
0532デフォルトの名無しさん2014/04/29(火) 08:51:47.48ID:TKW4+dLj
64ビットあれば使い切れないから大丈夫。使い切るころには128ビットになってる。
0533デフォルトの名無しさん2014/04/29(火) 09:11:51.14ID:devc/baf
>>527
オブジェクト指向を忘れるのが第一
0534デフォルトの名無しさん2014/04/29(火) 09:40:00.00ID:5ghJ9rEO
>>527
関数別にしてその関数をループで何回も呼んで
どの関数でリークしてるか確認
0535デフォルトの名無しさん2014/04/29(火) 09:41:52.06ID:5ghJ9rEO
動的確保されたメモリのリークは_CrtSetDbgFlag使う
0536デフォルトの名無しさん2014/04/29(火) 18:35:47.38ID:lGzouSbD
素人だがvectorじゃだめなのん?
0537デフォルトの名無しさん2014/04/29(火) 18:46:49.51ID:qPmT0/IR
そんなレベルの素人は引っ込んでろ(`・ω・´)!
0538デフォルトの名無しさん2014/04/29(火) 18:55:46.21ID:lGzouSbD
>>537
じゃあ代案出してみろよ
0539デフォルトの名無しさん2014/04/29(火) 19:00:52.43ID:qPmT0/IR
>>529
これに一票
0540KAC2014/04/29(火) 19:16:34.41ID:3cTlepGQ
>>527
その手の手法に関するいい書籍は見たこと無いな。

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

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

プログラムで何かをロックしてロック解除を忘れることは無いよな?
同じようなイメージで扱えばいいだけだよ。
0541デフォルトの名無しさん2014/04/29(火) 19:17:16.90ID:lGzouSbD
本末転倒ではあるがnewを使いたければ素直にgcのあるものを使えば良いと思うんだけど...
そもそもjava c#と違ってnew避けるべきだと思うんだが速度は落ちるし
一応gcを実装するライブラリもあったような記憶はあるけど
いきなりc++の設計に手を出すんじゃなくてcから手を出した方が良いと思うんだが素人だけど
>>539
あとスマポって万能なの?
0542デフォルトの名無しさん2014/04/29(火) 19:22:38.00ID:YSaKMYqx
循環参照はだめで、「弱い」参照とかいろいろ駆使している模様、というかそういうときは Boehm GC でいいと思う
0543デフォルトの名無しさん2014/04/29(火) 19:27:46.11ID:lGzouSbD
>>542
そうそれ
ところでBoehmGCには弱点とかある?
0544デフォルトの名無しさん2014/04/29(火) 19:39:02.96ID:04fcb81y
速度はどれだけ違うんだよ?
STLの標準装備のコンストラクタ、デストラクタでは不可能なことはなによ?
0545デフォルトの名無しさん2014/04/29(火) 19:41:50.07ID:qPmT0/IR
細かいことかもしらんが
>STLの標準装備のコンストラクタ、デストラクタでは不可能なことはなによ?
とはなんぞ
0546デフォルトの名無しさん2014/04/29(火) 19:42:08.49ID:lGzouSbD
>>544
速度はどれだけ違うんだよ←実行する環境によって変わるだろ
0547デフォルトの名無しさん2014/04/29(火) 19:56:20.09ID:04fcb81y
>>545
動的確保して自動で解放するが。

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

↓

string p(10000,'\0');
vector<int> q(10000);
0548デフォルトの名無しさん2014/04/29(火) 19:58:13.49ID:Kb/I3Vlc
速度は実測が基本
0549デフォルトの名無しさん2014/04/29(火) 20:00:27.36ID:qPmT0/IR
>>547
それはコンストラクタ・デストラクタとは言わない(だから細かいことかもと言った)
0550デフォルトの名無しさん2014/04/29(火) 20:05:26.50ID:qPmT0/IR
>>547
あと出来ないこととしてポリモーフィズムを使うクラスの動的確保が思いつかないのはどうかと
0551デフォルトの名無しさん2014/04/29(火) 20:08:30.04ID:lGzouSbD
>>550
kwsk
0552デフォルトの名無しさん2014/04/29(火) 20:20:37.20ID:qPmT0/IR
クラスAと派生Bがあって
管理はAだけで行いとして
new/deleteを使わずvectorだけで行えるかと言ったら
行えないでしょ
0553デフォルトの名無しさん2014/04/29(火) 20:26:46.08ID:lGzouSbD
たしかに
0554デフォルトの名無しさん2014/04/29(火) 20:33:46.15ID:04fcb81y
わけわからん
できれば簡易なコードをのせてくれないか
0555デフォルトの名無しさん2014/04/29(火) 20:48:13.51ID:qPmT0/IR
class A
{
0556デフォルトの名無しさん2014/04/29(火) 20:52:35.27ID:qPmT0/IR
http://codepad.org/0KxLBhHf
push_back時でエラーになると思ったが・・・
まあどのみち出来ないが
0557デフォルトの名無しさん2014/04/29(火) 21:21:18.44ID:pH50e3ah
vector<B>とvector<A*>でおk
0558デフォルトの名無しさん2014/04/29(火) 21:25:20.68ID:qPmT0/IR
それはポリモーフィズムの有り難みがないなあw
0559デフォルトの名無しさん2014/04/29(火) 21:26:58.34ID:l3FqGA+x
スマポやptr_で突っ込めばいいじゃん
0560デフォルトの名無しさん2014/04/29(火) 21:27:01.68ID:pH50e3ah
一応条件は満たしてるが誰もやらんわな
new使ってvector<unique_ptr<A>>にするわ
0561デフォルトの名無しさん2014/04/29(火) 21:39:32.17ID:qPmT0/IR
だからわりと>>529に帰結する
0562デフォルトの名無しさん2014/04/29(火) 22:33:19.67ID:Xa41IdEJ
boost::ptr_vectorでしょポリモーフィズムしたいのなら
0563デフォルトの名無しさん2014/04/29(火) 22:34:28.52ID:Xa41IdEJ
>>556
ああそれスラッシング起きてますわ
エラーにはならない
0564デフォルトの名無しさん2014/04/29(火) 22:40:08.35ID:dgi8jKwW
>>563
スライシングでは?
と突っ込んでみる。
0565デフォルトの名無しさん2014/04/29(火) 23:29:13.34ID:U0vwb+Hl
スラッシングってメモリが足りなくて仮想記憶が動きっぱなしになってしまう状態だよな
0566デフォルトの名無しさん2014/04/29(火) 23:53:34.34ID:5ghJ9rEO
スワップひどい常態か
0567デフォルトの名無しさん2014/04/30(水) 10:37:19.00ID:Q2kmZuTL
vector<bool>で
1000番目だけtrueにしてあとは0にしたいんですけど、
push_backを1000回繰り替えさないと駄目なんですか?
まとめて入力する方法があれば数十回0をコピーするだけでいいと思うのですが。
0568デフォルトの名無しさん2014/04/30(水) 10:44:35.64ID: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
0569デフォルトの名無しさん2014/04/30(水) 10:45:43.72ID:cWCEN50W
>>567
そんなことは無い。いろんなメンバ関数があるからちゃんとドキュメント見て好きに使えばいい。
0570デフォルトの名無しさん2014/04/30(水) 10:54:40.91ID:DEeR9Enb
>>567
v.resize(1001,false);
v[1000]=true;
0571デフォルトの名無しさん2014/04/30(水) 10:57:37.86ID:Q2kmZuTL
std::fillはvector<bool>に最適化されてますか?
0572デフォルトの名無しさん2014/04/30(水) 10:59:21.14ID:dDdWmtnK
いいえ
0573デフォルトの名無しさん2014/04/30(水) 11:00:28.63ID:cWCEN50W
>>571
標準ではそんなことは規定されていない。実装によっては最適化されていることがあるかもしれない。
なんにせよ、速度は実測が基本。
0574デフォルトの名無しさん2014/04/30(水) 11:00:39.21ID:Q2kmZuTL
>>570
ありがとうございます。
0575デフォルトの名無しさん2014/04/30(水) 16:38:42.27ID:0+BDS9HE
2130706433を127.0.0.1の文字列に変換したいのですが、どのようにしたら良いでしょうか

よろしくお願いします。
0576デフォルトの名無しさん2014/04/30(水) 16:54:41.19ID:d1Jpupa6
>>575
256との剰余を取ってから割ることを繰り返せばおk
0577デフォルトの名無しさん2014/04/30(水) 17:00:23.79ID:a+D9ZyB5
>>575
puts(inet_ntoa((struct in_addr){.s_addr = inet_addr("2130706433")}));
0578デフォルトの名無しさん2014/04/30(水) 17:44:08.61ID:0+BDS9HE
>>576-577
ありがとうございます
0579デフォルトの名無しさん2014/04/30(水) 22:52:24.52ID:Aiz3G3Sd
テンプレート関数をintやdoubleのような特定の型に制限する方法はありますか
Javaでいうとextends、C#でいうとwhere T :みたいなもの
0580デフォルトの名無しさん2014/04/30(水) 23:00:32.39ID:d1Jpupa6
>>579
C#のってこれ?
http://msdn.microsoft.com/ja-jp/library/bb384067.aspx
よく分からんが、テンプレートって型が違ってもOKなようにするものじゃねーの?
0581デフォルトの名無しさん2014/04/30(水) 23:05:35.65ID:6FRdosdN
enable_if
0582デフォルトの名無しさん2014/05/01(木) 01:19:59.17ID:f1m4ekfh
int i = 0; WCHAR num[2]={0}; LVITEM item = {0};
_itow_s(i,num,10,sizeof(num));
item.pszText = num;
0583デフォルトの名無しさん2014/05/01(木) 01:21:55.06ID:f1m4ekfh
↑
→_itow_s(i,num,sizeof(num), 10);
って誘導先のスレに質問が移動してくる前に書いちまったw
0584デフォルトの名無しさん2014/05/01(木) 04:21:23.22ID:w9/KPUlo
はいはーい

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

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

のような参照の仕方は仕様的に問題ありませんか?
一応gccではできたっぽいんですが、ほかのコンパイラとかで使っても大丈夫ですか?
どーも自信持てなくて、、、
0585デフォルトの名無しさん2014/05/01(木) 04:42:44.04ID:cjwRCMlg
おk
0586デフォルトの名無しさん2014/05/01(木) 06:24:01.30ID:9zM4+Fav
st1の前に、st2を前方宣言したら?
05875862014/05/01(木) 06:29:36.93ID:9zM4+Fav
あ、ポインタは32, 64ビットのどちらかで、
型が決まっているから、前方宣言いらんのか
0588デフォルトの名無しさん2014/05/01(木) 07:13:14.25ID:cjwRCMlg
ポインタでも宣言は必要
0589デフォルトの名無しさん2014/05/01(木) 16:24:23.71ID:O61PxCRM
ではない
0590デフォルトの名無しさん2014/05/01(木) 17:50:45.92ID: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への変換を行う関数というものは無いのでしょうか?
どなたかよろしくお願いします
0591デフォルトの名無しさん2014/05/01(木) 17:59:56.59ID:K+RzAtOV
ヌルターミネートまでいれると最低3文字は必要だろ
0592デフォルトの名無しさん2014/05/01(木) 18:00:07.87ID:cjwRCMlg
std::wstring strnum = std::to_wstring(i + 1);
item.pszText = const_cast<LPWSTR>(strnum.c_str());
0593デフォルトの名無しさん2014/05/01(木) 18:49:41.25ID:O61PxCRM
バッファあふれが原因
0594デフォルトの名無しさん2014/05/01(木) 19:09:33.09ID:X9uChr+4
itow_sの引数の順序を間違っているのと文字数を渡すべきなのにバイト数を渡している
0595デフォルトの名無しさん2014/05/01(木) 19:18:08.61ID:EbX4Dp2d
>>591-594
ありがとうございます。無事解決しました。
0596デフォルトの名無しさん2014/05/02(金) 15:34:11.98ID:Y5rKh6pa
ウィンドウHWND hWnd;をDestroyWindow()を使って破棄した場合、
再びhWnd=CreateWindow()という風に新しいウィンドウを作る事は出来るのでしょうか?
それともhWndというハンドル自体が破棄されるのでしょうか?

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

どなたかよろしくお願いします。
0597デフォルトの名無しさん2014/05/02(金) 15:42:03.73ID:mphOrT6X
出来る
0598デフォルトの名無しさん2014/05/02(金) 15:45:23.76ID:wOX1O7vl
コリエイトしたものを使い回しているのではなく新たに生成しているのに
出来ないと思ったのが不思議
0599デフォルトの名無しさん2014/05/02(金) 16:06:08.20ID:WERRY4Df
C++で画像を表示する場合、どれを使ったらいいの?
DXライブラリを使わない場合で
0600デフォルトの名無しさん2014/05/02(金) 16:09:56.65ID:IdTqtCyu
gdip
0601デフォルトの名無しさん2014/05/02(金) 16:20:18.97ID:Y5rKh6pa
>>597-598
ありがとうございます。
0602デフォルトの名無しさん2014/05/02(金) 16:48:37.49ID:KtmglHA9
>>601
最初に複数作成
→切り替えは表示非表示
→終了時に破棄
のがスマートと思う
0603デフォルトの名無しさん2014/05/02(金) 16:50:12.77ID:WERRY4Df
directdrawって使わない方がいいの?
代わりに何使えばいいの?
0604デフォルトの名無しさん2014/05/02(金) 18:50:10.79ID:Y5rKh6pa
文字列の幅を求める関数を調べたらGetTextExtentPoint32()ってのが出てきたのですが、
この関数の第一引数の「デバイスコンテキスト」って何を入れたらいいのでしょうか?

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

一度に二つ質問してしまってすみませんがよろしくお願いします。
0605デフォルトの名無しさん2014/05/02(金) 19:03:24.92ID:IdTqtCyu
>>604
GetWindowDCで取れる
0606デフォルトの名無しさん2014/05/03(土) 01:55:01.96ID: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){
//処理
}

みたいな書き方はありですか
0607デフォルトの名無しさん2014/05/03(土) 01:58:49.19ID:Q6/trxkK
>>606
コンパイルしてみればわかるんじゃないの?
そうじゃないなら、何がわからないのか書いてもらわないと。
0608KUSO KOTE ◆unko./w.Osri 2014/05/03(土) 02:19:35.05ID:tvP1y9zx
特に問題は思い当たりませぬ。
http://ideone.com/6ry1qG
0609デフォルトの名無しさん2014/05/03(土) 10:35:51.17ID:4EIdW7HC
C++のオーバーロード解決は明示的に指定しない限り
テンプレートより普通の関数優先で合ってる?
0610デフォルトの名無しさん2014/05/03(土) 11:44:12.05ID:NUO+XoEk
>>604
Windows プログラミングの「画面描画の基礎」を少し勉強したほうがいい
断片的な知識でやると地雷だらけのバグアプリになる
0611デフォルトの名無しさん2014/05/03(土) 20:10:03.15ID:lJjp0zKR
>>610
>>596みたいな事聞いてるんだぞ・・・
ksのksからで
カスじゃなくて基礎な
0612デフォルトの名無しさん2014/05/04(日) 03:21:49.77ID:StveqMJh
>>608
どーもです
0613【重要】2014/05/04(日) 15:17:55.72ID:owW4rydZ
hogeは禁止されています、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
0614デフォルトの名無しさん2014/05/04(日) 15:27:20.14ID:0Lb8hh8H
嫌hogeをNGIDにするととても見やすいなーこのスレ
0615デフォルトの名無しさん2014/05/04(日) 16:16:35.49ID:6pFdiYZZ
#include <pshpack2.h>

ってどういう意味あるの?
0616超重要2014/05/04(日) 16:37:15.78ID:Av6aDk2F
hogeは禁止されていません。hogeを妬むチョーセン人がチョーセンルールを押し付けていますが、
日本人は従う必要はありません。
0617デフォルトの名無しさん2014/05/04(日) 16:37:35.03ID:tByDu0vN
>>615
pshpack2.hをインクルードファイルサーチパスから探してインクルードする。
0618デフォルトの名無しさん2014/05/04(日) 19:18:25.75ID:G4bkQ4r/
俺に向かってhageと言うなよ、わかったな
0619超重要2014/05/04(日) 20:19:26.89ID:Av6aDk2F
このスレではハゲは尊称
0620デフォルトの名無しさん2014/05/04(日) 23:03:47.87ID:vSRu9IqQ
>>618
ハゲ乙
0621デフォルトの名無しさん2014/05/05(月) 04:16:08.27ID:xdFqa6AX
チョーンジン荒らしのくせにハゲとは生意気な
貴様が禿げるのは10年早い
0622デフォルトの名無しさん2014/05/05(月) 12:30:19.69ID:Mu2ScZdD
nullptrをdeleteしてもdelete[]しても問題ないですよね?
0623デフォルトの名無しさん2014/05/05(月) 12:55:28.68ID:CN0OEHd5
>>622
問題ない。
malloc()/free() で free(NULL); が「なにも起こらない」と定義されて以来の伝統だ。
0624デフォルトの名無しさん2014/05/05(月) 13:01:42.77ID:r55hxj+Y
初心者が nullptr とか口にする時代がきていた
0625デフォルトの名無しさん2014/05/05(月) 15:54:09.89ID:hsi4q6Ai
>>624
よう老害
0626デフォルトの名無しさん2014/05/05(月) 17:29:42.81ID:ic/qAIV8
VC++ 2010 EEを使用してる環境で
#include <math.h>と記入しているのに
acosh()が未定義になります

使用したい場合はどうすればいいですか?
0627デフォルトの名無しさん2014/05/05(月) 17:39:11.07ID: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);
0628デフォルトの名無しさん2014/05/05(月) 21:05:14.36ID:ic/qAIV8
>>627
vistaなので1はできない
2,3も未定義と出たのでlog使った式に置き換えて対処しました
ありがとうございました
0629デフォルトの名無しさん2014/05/05(月) 23:06:39.14ID:KNzAgd/2
>#include <math.h>と記入しているのに
>acosh()が未定義になります

そりゃmath.hヘッダーはおろか標準ライブラリに
acosh()なんて無いからな
0630デフォルトの名無しさん2014/05/05(月) 23:26:45.47ID:EsHOP99t
>>629
いつの時代の人?
0631デフォルトの名無しさん2014/05/05(月) 23:42:58.99ID:vDmHAviQ
>>630

> 626 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/05(月) 17:29:42.81 ID:ic/qAIV8 [1/2]
> VC++ 2010 EEを使用してる環境で
0632デフォルトの名無しさん2014/05/05(月) 23:44:27.04ID:vDmHAviQ
この手のやつはバージョン見て
boostあたりとプリプロセスで切り替えるのが定番なんじゃないの
0633デフォルトの名無しさん2014/05/05(月) 23:49:12.71ID:vDmHAviQ
> バージョン見て
ってのはちと適当すぎた
OS、コンパイラ、バージョン、スイッチ、envあたりも見なきゃならんね
0634デフォルトの名無しさん2014/05/06(火) 00:37:10.49ID:eHTf3NEj
Visual C++でコンパイル出来ているのにCライブラリがリンク出来ないとなると
/NODEFAULTLIBオプションしか思い当たらない。
0635デフォルトの名無しさん2014/05/06(火) 06:45:35.64ID:5E8fiGLl
VisualStudioでacoshが使えるようになるのは2012からなんですよ
0636デフォルトの名無しさん2014/05/06(火) 07:10:09.00ID:i8DiB40Z
なるほど
ISO/IEC 14882:2011およびISO/IEC 9899:1999
で規定されたacoshが無いコンパイラは捨てるしかあるまい
0637デフォルトの名無しさん2014/05/06(火) 13:07:56.84ID:z8IrcxQC
acosh(x) = log(x + sqrt(x2 - 1))
0638デフォルトの名無しさん2014/05/06(火) 13:18:15.94ID:QzakODtK
まさかの>>637の頭の悪さ、コミュ障っぷりには脱帽するしかない
0639デフォルトの名無しさん2014/05/06(火) 13:36:05.40ID:mfZzKbLo
まさかの>>638の頭の悪さ、コミュ障っぷりには脱帽するしかない
0640デフォルトの名無しさん2014/05/06(火) 20:35:42.00ID:WjTWSVZo
>>637
細かいが
acosh(x) = log(x + sqrt(pow(x, 2) - 1))
だな
0641デフォルトの名無しさん2014/05/06(火) 21:04:32.72ID:c8YNOPNu
VCで数値演算を気合を入れてするようなすごい奴いないから2012からサポートなんだろ
ついでにそんな奴がWin使いにいるのか?
0642デフォルトの名無しさん2014/05/06(火) 21:05:50.40ID:0/z9kdsI
精度的にはsqrt()の引き数はx * x - 1にしておきたいところだな。
0643デフォルトの名無しさん2014/05/06(火) 21:23:54.54ID:WjTWSVZo
興味本位で物理演算?
自由落下とか空気抵抗ありとか
0644デフォルトの名無しさん2014/05/07(水) 15:46:20.67ID:XxSBZtfo
>>641
学生?職業プログラマで普通に居るよ 例えば俺とか
別に凄いことでもなんでもない
0645デフォルトの名無しさん2014/05/07(水) 15:54:16.56ID:s5t2UWqJ
ミサワ風イラストつけて頼む
0646デフォルトの名無しさん2014/05/07(水) 18:21:44.52ID:MZ01fZnX
2chの住民平均以下の生活水準の奴にはここが居心地良いのかと
0647デフォルトの名無しさん2014/05/07(水) 22:15:16.82ID:DmN4H+C2
>>644
5年前までは数値演算ならintelかPGIコンパイラと決まっていたんだが、最近MSも追い付いたのか?
0648デフォルトの名無しさん2014/05/07(水) 23:04:31.89ID:XxSBZtfo
>>647
まあスピードが必要なところは外部ライブラリ使うことになるけどな
それはVCだろうがICCだろうが同じ
0649デフォルトの名無しさん2014/05/07(水) 23:15:32.84ID:QqPD6ddY
お世話になります。
ロベールのC++入門本を2週しました。
プログラムはすべて打ち込んで動作確認したり一部改変したりして
学習したのですが、どうしても自作プログラムが書けません。
C言語でしたらプロとして通用するレベル(PG歴9年です)なのですが、
C++でまとまった意味のあるプログラムが書けません。
どのような訓練をすればいいでしょうか?
06506492014/05/07(水) 23:17:26.44ID:QqPD6ddY
C++で書きたいのはH8のプログラムです。マイコンです。
0651デフォルトの名無しさん2014/05/07(水) 23:32:23.38ID:HeYKw+Nm
>スピードが必要なところは外部ライブラリ使うことになるけどな
なんかワロタ
0652デフォルトの名無しさん2014/05/07(水) 23:44:17.26ID:ZcddfNS5
GMPとか勝てんだろ
0653デフォルトの名無しさん2014/05/07(水) 23:46:14.07ID:cMom8c9/
>>651
知ったかクンだろ、スルーしてやれよ
0654デフォルトの名無しさん2014/05/08(木) 00:33:35.82ID:NSiHhXoS
パフォーマンスが必要なところは他任せで、自分がやるのはそうじゃないところ
ってゆとり開発なら当然だよね。 いまはゆとり開発が主流だしね
0655デフォルトの名無しさん2014/05/08(木) 00:39:55.71ID:u1P/WjZg
表計算をしたいという要求に対して
オペレーティングシステムと表計算アプリケーションの開発を
提案するんだろうか。
大切な所を購入ソフトに頼るのはゆとりとか言って
0656デフォルトの名無しさん2014/05/08(木) 00:42:28.50ID:WPnVChLN
誰がそんな事を言っているのだろうか
0657デフォルトの名無しさん2014/05/08(木) 00:49:58.56ID:NSiHhXoS
>>656
だれが言っているんだろね
0658デフォルトの名無しさん2014/05/08(木) 00:55:15.63ID:F90LFLZ7
よーしパパ、
FFTをループのアンローリングしゃうぞー
0659デフォルトの名無しさん2014/05/08(木) 01:19:39.17ID:WasTJn9b
Haswellでループのアンロールやってみたけどあまり効果がなかった
Pentium4の時はすごく違ったのになあ
0660デフォルトの名無しさん2014/05/08(木) 01:41:22.05ID:Ejp4CkYN
>>659
適当にWikipediaでアーキテクチャ見てみた限り、
分岐予測が改善されたのと、パイプライン段数が減ってるから
予測ミスのペナルティがpentium4ほど大きくないからかな
0661デフォルトの名無しさん2014/05/08(木) 01:41:26.59ID:/bB+WIRU
>>650
Cでなら書けると言い張るなら、Cで書けばいいじゃん。
どうしてもC++にしたいなら、一度Cで書いてから次の点に留意して書き直してみるとか。
・グローバル変数やデバイスのような単一資源はクラス化する。
・ネームスペースを活用する。
・GPIOのような固定値で表現できる資源はテンプレート関数化する。
いま思いつくのはこんなところかな。
0662デフォルトの名無しさん2014/05/08(木) 01:42:39.49ID:1wrEfjwT
実践で全く役立たずのゆとりにゆとり呼ばわりされちゃったよ(笑)
0663デフォルトの名無しさん2014/05/08(木) 01:43:20.85ID:/bB+WIRU
>>659
コンパイラに任せれば済むことでは?w
0664デフォルトの名無しさん2014/05/08(木) 01:47:45.96ID:1wrEfjwT
偉そうなことほざいてるゆとりはFFTWやIPPより高速なFFTコードをアップしてからにしてくれな
0665デフォルトの名無しさん2014/05/08(木) 01:52:08.61ID:0ZjLmGKH
C言語で
int id=001;
のように変数に10進数を与えたいのですが、10進数ではなく8進数として判断されてしまいます。
この0から始まる値を10進数として与えるにはどうすればいいのでしょうか。

すみません。よろしくお願いします。
0666デフォルトの名無しさん2014/05/08(木) 01:53:31.41ID:Oom5aWWV
00を消せばいい
0667デフォルトの名無しさん2014/05/08(木) 01:53:56.37ID:H5CeDMPH
車輪の再発明して何になるん
0668デフォルトの名無しさん2014/05/08(木) 01:58:57.37ID:WPnVChLN
パフォーマンス、サイズ、ライセンス諸々
用途次第でよくある話じゃない?
0669デフォルトの名無しさん2014/05/08(木) 02:12:06.73ID:1wrEfjwT
今時マイコンだって数値計算用のライブラリはチップメーカが最適化されたものを用意してるのが普通
C/C++の標準関数を使わなければいけないことのほうが稀
0670デフォルトの名無しさん2014/05/08(木) 02:34:47.69ID:wkkQdFik
>>669
だからこそ、ゆとりやドカタでもそこそこのパフォーマンスを出せるものが作れる
0671デフォルトの名無しさん2014/05/08(木) 02:36:12.22ID:QWFUcZUM
非常に初歩的な質問で申し訳ないです
int st[10][10]という配列の一行目に、2014050810という値を代入したいのですが
書き方を教えていただけませんか
0672デフォルトの名無しさん2014/05/08(木) 02:38:43.30ID:o358HCml
>>671
1行目とは何を指すのか。
配列を行列と見做すのならrow-majorなのかcolumn-majorなのか。
0673デフォルトの名無しさん2014/05/08(木) 03:39:06.24ID: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とかで数字に変換しろよ
・
0674デフォルトの名無しさん2014/05/08(木) 05:43:59.23ID:G9NaZtKr
>>661
おー具体的なアドバイスありがとう!!
そうやってくんだねぇ
0675デフォルトの名無しさん2014/05/08(木) 09:59:45.58ID:Pn75zzX2
皮肉を書いたら感謝されたでござる。
0676デフォルトの名無しさん2014/05/08(木) 10:07:10.43ID:JZCmTzL0
>>673
てっきり1セルに入れる値と思い込んでいた俺のエスパー力はまだまだ未熟
0677デフォルトの名無しさん2014/05/08(木) 10:08:34.96ID:35TTXgql
>>676
charをintにキャストする場合を忘れてたんだぜ……
0678デフォルトの名無しさん2014/05/08(木) 11:52:39.17ID:TYDayfT0
scanf関数が良く理解できないのですが、
何方かご教授いただけませんか
よろしくお願いします。
0679デフォルトの名無しさん2014/05/08(木) 12:22:32.29ID:VQ+BCLxz
>>678
書式の通りに入力
以上終わり
0680デフォルトの名無しさん2014/05/08(木) 13:06:23.48ID:ZRNNbMYn
scanfってなんで未だに言語仕様の中に残ってるんだろう
0681デフォルトの名無しさん2014/05/08(木) 13:17:03.32ID:OtdKkzKB
少し前の入門書でscanfやgetsがかなり感情的に否定されてたから
洗脳されちゃった人かな
0682デフォルトの名無しさん2014/05/08(木) 13:26:02.31ID:JZCmTzL0
熟練者が内内で使う分には優れているが
入門書なんかで扱うべき代物ではないな
0683デフォルトの名無しさん2014/05/08(木) 13:34:16.13ID:SgcQR1UW
入力処理以外の部分にフォーカスされたトピックがあって
ちゃちゃーっと とりあえず入力するのに使うと
0684デフォルトの名無しさん2014/05/08(木) 14:13:33.82ID:+RsurlEd
C++でゲームを作っているのですが
ゲーム本編のクラスに細かい機能のクラスを追加したかった場合
どのように追加したクラスを本編クラスにくっつけるものなのですか?
本編クラスのメンバーでその追加クラスを生成すれば良いですか?
0685デフォルトの名無しさん2014/05/08(木) 15:30:14.62ID:muF0Pbbm
c言語で、入力された値が1桁〜3桁までの、整数以外なら弾くプログラムを作りたいのですがどうしたらよいですか?

なるべくstdio.hのライブラリのみで作りたいです。
入力をchar型に入れればいいのは分かるんですが…。
0686デフォルトの名無しさん2014/05/08(木) 15:32:23.21ID:QETE0hyv
宿題は、宿題スレへ・・・
0687片山博文MZバグロボ ◆T6xkBnTXz7B0 2014/05/08(木) 16:30:35.39ID:o5H0kOM9
>>684
本編との共通データと共通インターフェイスを分析せよ。所有、仮想関数、継承などを使う。
0688デフォルトの名無しさん2014/05/08(木) 16:34:02.02ID: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とかっていうのはパッと見て思いつくものなのでしょうか?
慣れればすぐに思いつけるものなのでしょうか?
0689片山博文MZバグロボ ◆T6xkBnTXz7B0 2014/05/08(木) 17:04:48.57ID:o5H0kOM9
>>688
数学の等差数列。
0690デフォルトの名無しさん2014/05/08(木) 17:15:40.82ID: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じゃダメなのか?
理由はその作者にしかわからない
0691デフォルトの名無しさん2014/05/08(木) 18:00:18.08ID:97XJLzXo
>>690
1,2,3,4,5じゃ綺麗なピラミッドにならないだろう。
>>688のコードを実行してみたら分かる
0692デフォルトの名無しさん2014/05/08(木) 18:03:54.78ID:97XJLzXo
>>688は自分でそのピラミッドを表示するコードを書いてみて
他の人に見てもらったら、多分何人かはなんでそういうコードを
思いついたか疑問に思うだろう。
問題解決の道筋は一つとは限らない(最適解はあるだろうが)。
0693デフォルトの名無しさん2014/05/08(木) 18:07:03.46ID:WPnVChLN
*を全角にすればイケるわけだから
結局の所は作者の好みだって言ってるんじゃない?
0694デフォルトの名無しさん2014/05/08(木) 19:15:36.07ID:m/3Cotp7
C++でzip/unzipのライブラリありますか?
DotNetZipみたいな便利なのがあればいいのですが。
0695デフォルトの名無しさん2014/05/08(木) 19:23:32.39ID:jSvCbKd2
zlib
0696デフォルトの名無しさん2014/05/08(木) 20:08:55.25ID:35TTXgql
>>682
それ言い出したらCの入出力なんて……
>>684
「細かい機能のクラス」ってなんなんだよ……
別にクラスは関数セットってわけじゃねーんだぞ
>>687も「設計しなおせ」(要約)って言ってるわけだし
>>690
atoiにはstdlib.hが要るんですがそれは……
つかstdlib.hにはstrtolがあるんだからそっちを薦めるべき
(宿題で利用できる関数が制限されてたら仕方がないが)
0697デフォルトの名無しさん2014/05/08(木) 20:19:22.48ID:H5CeDMPH
>>671は
int st[10][10] = { {2, 0, 1, 4, 0, 5, 0, 8, 1, 0} };
としたいんじゃないのか
0698デフォルトの名無しさん2014/05/08(木) 20:22:44.38ID:iWHr/ksT
ハッシュは可逆とか言ってた子まだいるのかなこのスレ
0699デフォルトの名無しさん2014/05/08(木) 20:46:26.15ID: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


誰がそんな事言ってるの?
0700デフォルトの名無しさん2014/05/08(木) 21:00:13.61ID:H5CeDMPH
cryptの挙動見れば無理ってわかるのにな
0701デフォルトの名無しさん2014/05/08(木) 21:10:21.35ID:m/3Cotp7
>>695
ありがとうございます。
zlibというのはDotNetZipみたいにmemory streamに対して
zip/unzip出来るでしょうか?
0702デフォルトの名無しさん2014/05/08(木) 21:12:31.87ID:QETE0hyv
できるからググってドキュメント読んでこい
0703デフォルトの名無しさん2014/05/08(木) 21:15:19.41ID:7Gl9qGxi
C++のMemoryStreamってなんだ
0704デフォルトの名無しさん2014/05/08(木) 21:27:39.97ID:dPnVK8av
CHRNからおさらいした方が良さげだな
0705デフォルトの名無しさん2014/05/08(木) 21:27:50.66ID:Oom5aWWV
IStreamとか?
0706デフォルトの名無しさん2014/05/08(木) 21:45:04.63ID:WPnVChLN
>>700
それに使われているのはバリエーションの一部であって
hash(...) { return ... }
こんな受けたものをそのまま生で返すのも
立派なハッシュ関数ですよ
0707デフォルトの名無しさん2014/05/08(木) 21:51:48.56ID:muBIMt4G
std::vectorをバッファーにしたistreamとかたまに使うな。
0708デフォルトの名無しさん2014/05/09(金) 00:44:50.53ID:S4GfSN5p
派生と継承ってなにが違うの?
詳しく教えて
0709デフォルトの名無しさん2014/05/09(金) 00:48:46.05ID:Z1SwkjRK
>>708
雰囲気が違う。
07107082014/05/09(金) 00:59:28.44ID:S4GfSN5p
>>709
まじめに教えてください
0711デフォルトの名無しさん2014/05/09(金) 01:00:38.29ID:Z1SwkjRK
>>710
まじめに雰囲気が違うだけ。
0712デフォルトの名無しさん2014/05/09(金) 01:04:06.68ID:bHTKjDjb
>>708
美文書の問題なだけなので、あまり気にしなくても良い気がする。

派生する・されるのはクラス
継承する・されるのはメンバ
ってだけの話。
0713デフォルトの名無しさん2014/05/09(金) 01:04:08.31ID:ebCqqhjn
Aを基にして出来たが同じではないBはAの派生
Aと同じBはAの継承

適当だが
0714デフォルトの名無しさん2014/05/09(金) 02:44:19.51ID:9FYhMONq
英語では派生も継承も derived とかのようだが‥‥なんで訳を分けたの?
0715デフォルトの名無しさん2014/05/09(金) 02:51:35.09ID:Kz50EFWR
おまいは二つ前のレスも読めないのか
inherit(派生) と derived(継承した)
と言う用語が使い分けられている。
ついでに"derived"は規格中で特別な用語(10p2)
0716デフォルトの名無しさん2014/05/09(金) 02:57:51.81ID: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
0717デフォルトの名無しさん2014/05/09(金) 03:08:47.50ID:9FYhMONq
>>715
逆じゃないの?
http://cpplover.blogspot.jp/2010/11/abstract-class.html

>>712 が正解のようだ
0718デフォルトの名無しさん2014/05/09(金) 03:15:04.52ID:Kz50EFWR
>>717
逆だった。

ちなみにinherit(継承)/derive(派生)の使い分けはC++・Java・C#で共通。
0719デフォルトの名無しさん2014/05/09(金) 03:20:35.70ID:ClmLL0Ax
UMLだとクラス間の関係にもにinheritanceを使用していたような
0720デフォルトの名無しさん2014/05/09(金) 08:25:24.13ID:YiLzwXxL
クラス B はクラス A から派生しており、メンバー X を継承する

だろ?
雰囲気とか、大丈夫か?
0721デフォルトの名無しさん2014/05/09(金) 09:41:00.16ID:1s+wO78F
"単継承"、"多重継承" の言葉が相手にしてるのはクラスだろうけど...
うーん?
0722KUSO KOTE ◆unko./w.Osri 2014/05/09(金) 09:49:18.53ID:tVqxelwX
10.1 Multiple base classes『Note:The use of more than one direct base class is often called multiple inheritance.』
※multiple inheritanceは斜体ではない

つまり多重継承はC++の規格の用語とは違う(たぶん)。
0723デフォルトの名無しさん2014/05/09(金) 10:53:03.38ID:Mr0Sp7Ii
多重継承は
同じシグネチャを持つメンバをそれぞれの親から持ち込んで〜
っていう例の問題を指すんじゃないの?
0724デフォルトの名無しさん2014/05/09(金) 11:41:52.50ID:MMJKVPjb
> inherit(継承)/derive(派生)

単にこれシノニムとして読んだんじゃいかんのか。
0725デフォルトの名無しさん2014/05/09(金) 17:02:14.17ID:Mr0Sp7Ii
派生:プログラマの仕事
継承:コンパイラの仕事
0726デフォルトの名無しさん2014/05/09(金) 17:52:36.71ID:/+k56nAg
了承。
0727デフォルトの名無しさん2014/05/09(金) 19:10:33.14ID:PvmHWu+1
拝承。
0728デフォルトの名無しさん2014/05/09(金) 19:11:41.04ID:qXBc1Ng9
>>723が何か言った
0729デフォルトの名無しさん2014/05/09(金) 20:40:18.07ID:wsv1Pz2i
多重継承をやると頭が禿げると聞いたが
0730デフォルトの名無しさん2014/05/09(金) 22:10:43.56ID:THyZXm1s
>>713の言い換えだがニュアンス的に
派生 なにかをもとにして新しいものを生み出す
継承 なにかをそのまま受け継ぐ
だからC++では>>712が妥当
0731デフォルトの名無しさん2014/05/09(金) 23:18:06.60ID:UiWKW0mE
>>724
まあ、問題無いと思うよ。
C++機能としての意味で使うなら、90%以上の人が継承も派生も同じ扱いな感覚。
0732デフォルトの名無しさん2014/05/10(土) 14:17:50.12ID:BTCa0fTB
アロケータのrebindの存在意義がよく分からんのですが
日本語で解説してるサイトはありませんでしょうか?
0733デフォルトの名無しさん2014/05/11(日) 09:08:56.30ID:xlwSJ+ke
てす
0734デフォルトの名無しさん2014/05/11(日) 14:07:47.55ID:C0JfFQ1r
_tsystem関数でコンソールプログラムを立ち上げようとすると
立ち上がったコンソールプログラムがすぐに閉じてしまいます。
コンソールプログラム側は「getchar()」or「_tsystem(_T("pause"))」で中断を試みています。
コンソールプログラムを直接立ち上げるとうまくいきます。

_tsystem関数でコンソールプログラムを立ち上げて、
これを開いたままにするにはどうすれば良いですか?
0735デフォルトの名無しさん2014/05/11(日) 14:24:07.15ID:ttO2ycsK
>>734
起動するプログラムを開いたままにするように作ればいいだけ
それが嫌なら

1.
std::system(R"(終わったらpauseするバッチリ.bat)");

2.
std::system(R"(cmd.exe /k shine.exe)");

3.
std::system(R"(start shine.exe)");
0736デフォルトの名無しさん2014/05/11(日) 14:47:34.15ID:wSEeMjm/
特殊文字も使用していないし特にリテラルである必要はないのではないか?
0737デフォルトの名無しさん2014/05/11(日) 14:52:50.14ID:t4xw9R/W
そうすると次は
system("sub\test.exe") が動きません
とか言い出すんだろ?
0738デフォルトの名無しさん2014/05/11(日) 14:53:21.65ID:C0JfFQ1r
>>735
ありがとうございます。
2の方法でうまくいきました。
0739デフォルトの名無しさん2014/05/11(日) 17:33:11.46ID:ODutmrkY
すみません質問させてください。
複数列表示できるコンボボックスをDLLとして作成し、MFCアプリケーション等で使用したいのですが、
VC++で自作のコントロールを作成するにはどうしたらいいのでしょうか?
何か参考になるサイト等ありましたら教えてください。
0740デフォルトの名無しさん2014/05/11(日) 18:03:07.78ID:3rgSCy+h
なんでもできる言語ならC++よりDのほうが優れてる
0741デフォルトの名無しさん2014/05/11(日) 18:05:01.02ID:c0OeZBBH
どうして「自作」のコントロールの作成の方法を他人に聞くことができようか
0742デフォルトの名無しさん2014/05/11(日) 20:04:39.09ID:5bM6wK/T
>>739
プロジェクト新規作成時に選べたと思うが
VS Express だと駄目かもしれない
0743デフォルトの名無しさん2014/05/11(日) 20:09:05.83ID:ODutmrkY
>>741
すみません書き方が悪かったです
『コントロールを自作するにはどうしたらいいのでしょうか?』です。

>>742
見てみたのですが、どうやらC#にしかないようです。
0744デフォルトの名無しさん2014/05/11(日) 20:14:34.75ID:ZWuwy5hl
COMとかOLEとか、そんな話になってくるんじゃないかな
めっちゃ複雑だった気がする
0745デフォルトの名無しさん2014/05/11(日) 20:29:57.94ID:5s3TJsCS
>>743
RegisterClassExから説明しなきゃならない感じか?
0746デフォルトの名無しさん2014/05/11(日) 20:35:08.14ID:4i0nWw5y
i unknown
0747デフォルトの名無しさん2014/05/11(日) 20:53:12.56ID:ODutmrkY
>>475
すみませんパッと言われてみて、その辺もよく分かってないです。
ウインドウという概念、コントロールもウインドウだという事、
メッセージの送受信で処理をすること等はなんとなく理解はしているつもりです。
win32プロジェクトでいくつか簡単なプログラムを作成したことがある程度の知識です。
MFCの方はもう少し複雑な処理を書いたこともあり、そちらで複数列のコンボボックスが使用したいと思ったので、
今回なんとか作成できないかと思い、ここで質問させて頂きました。
RegisterClassExについても調べてみたいと思います。
0748デフォルトの名無しさん2014/05/12(月) 01:14:45.16ID:ZtmTFQ/l
あれ、勘違いした・・・これはもしかして
MFCのコントロールクラスのはせいのしかた
からやるべきなのか?
0749デフォルトの名無しさん2014/05/12(月) 18:36:35.66ID:KmN96Zov
>>748
遅くなってすみません。
MFCのコントロールの派生は大丈夫です。
MFCを使っているので派生して作るのも一つの手だと思ったのですが、
どうせならMFCじゃなくても使えるようにWindowsApiだけで作れたら汎用性があるのかなと思って質問させて頂きました。
とは言え、派生しても複数列ってのが難しくて悩んでいるのですが…。
OwnerDrawを駆使して作成するという認識であっていますでしょうか?
0750デフォルトの名無しさん2014/05/12(月) 19:05:39.74ID:qQEXXTyX
>>749
http://bbs.wankuma.com/index.cgi?mode=al2&;namber=12931&KLOG=28
ここにあるやり方が簡単だよ
0751デフォルトの名無しさん2014/05/12(月) 19:51:12.16ID:KmN96Zov
>>750
レスありがとうございます。
見たところ.netでの方法だと思うのですが、
出来れば.netは使わずネイティブで作成したいと思っています。
イメージ的にはC#のコンボボックスでDatatableクラスをコントロールソースにした感じ?が理想です。
配列か何かで複数列のソースを指定するか、列を追加するメソッド等を実装できればと思っています。
0752デフォルトの名無しさん2014/05/12(月) 20:48:14.29ID:sxPScMrF
>>751
複数行かと思ってレスしてたわ
複数列ならさらに簡単で
単なるListViewのレポートでイケるでしょ
全列挙して各colを更新し同期すればいいだけ
0753デフォルトの名無しさん2014/05/12(月) 21:10:09.09ID:KmN96Zov
>>752
知識不足でおかしなことを言ってしまったらすみません。
コンボボックスの中にリストコントロールを作成するってことでしょうか?
コンボボックス自体は派生してイベント等で独自の処理をする事は経験があるのですが、
OwnerDraw等で独自の描画等の処理はしたことがないので、よく理解できていません…。
0754デフォルトの名無しさん2014/05/12(月) 21:19:22.64ID:kKPqoo3Y
ドロップダウンなスタイルの時の話じゃね?

コントロールそのもののハンドルと、選択時ドロップダウン部分が別のウィンドウになってて、
うがーめんどくせー ってなった記憶がある
0755デフォルトの名無しさん2014/05/12(月) 21:27:22.56ID:KmN96Zov
>>754
私が作りたいのもドロップダウンなスタイルなのです。
別のウィンドウなんですか…!?
なんだか難しそうですね…C#がとてつもなく簡単に使えるので、
そこまで難しくないのかと勝手に思っていたのですが、かなりややこしそうですね。
色々検索してはみるのですが、出てこないってことはそもそも需要がないのでしょうか?
それともみなさんUIは.Net等で作成されているってことなんでしょうか。
0756デフォルトの名無しさん2014/05/12(月) 21:35:23.96ID:K6iM2Dlu
そこまでするならオーナードローじゃなくて自作する
0757デフォルトの名無しさん2014/05/13(火) 00:49:36.50ID:P5bQGXnC
visual studioでプログラミングしてふと思ったんだけど依存関係とかってどこで処理してんの?
まったく気にしてなかったけどなんでmakefileとかないのに動いてんの?
教えてエロい人
0758デフォルトの名無しさん2014/05/13(火) 00:54:44.05ID:fafhaNgG
パーサ動いてんだろ
0759デフォルトの名無しさん2014/05/13(火) 01:41:24.69ID:kDNoyhrO
http://maguro.2ch.net/test/read.cgi/pc2nanmin/1372918692/145
  ↑ ↑ ↑ ↑ ↑ ↑
0760デフォルトの名無しさん2014/05/13(火) 02:18:53.08ID:rd0Xfng7
>>755
http://www.codeguru.com/ にいい感じのがあったら
パクったり好みに合わせていじったりしてる
0761デフォルトの名無しさん2014/05/13(火) 07:02:10.03ID:Smp1YCMo
ActiveXの話かな
0762デフォルトの名無しさん2014/05/13(火) 09:56:10.17ID:I3YIR7QR
>>757
makefileより細かい精度でやってる
巨大な管理情報のファイル作ってるだろ
0763デフォルトの名無しさん2014/05/13(火) 15:20:21.47ID:tyk0IHyp
すいません、winsock.hでソケットに関するプログラミングをしていて、

WSADATA やWSAStartupなどがコンパイル時にundefinedとなってしまいます

コンパイラはgccをつかっているんですが、これは型が古いせいでしょうか?
0764デフォルトの名無しさん2014/05/13(火) 15:34:22.46ID:8dff/8hW
winsock2.hを使え
0765デフォルトの名無しさん2014/05/13(火) 15:36:53.08ID:tyk0IHyp
入れ方が解りません どうしたらいいんでしょうか
ダウンロードしてくるのはできるとして、
どこのディレクトリに?
0766デフォルトの名無しさん2014/05/13(火) 15:39:26.36ID:8dff/8hW
gcc --versionでgccのバージョン調べろ
0767デフォルトの名無しさん2014/05/13(火) 15:40:51.29ID:tyk0IHyp
2.95です
0768デフォルトの名無しさん2014/05/13(火) 15:46:13.74ID:8dff/8hW
古すぎ

古いのをアンインストールした後、最新のMinGW gcc + MSYSをインストールして使え
0769デフォルトの名無しさん2014/05/13(火) 15:47:24.36ID:tyk0IHyp
わかりました トライしてみます! ありがとうございます!
0770デフォルトの名無しさん2014/05/13(火) 18:21:16.99ID:+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;
}
0771デフォルトの名無しさん2014/05/13(火) 18:55:03.63ID:w7t3FyZp
vectorのデストラクタ呼んでないからvectorの管理しているヒープが解放されてないんでそ
0772デフォルトの名無しさん2014/05/13(火) 19:29:16.81ID:+N5p/ipx
>>771
ありがとうございました。デストラクタ呼び出したら解決しました。
ところで、もう一つ教えてください。
calloc(rows, sizeof(std::vector<int>))を
malloc(rows * sizeof(std::vector<int>))に変えると
ビルドできるのですが、実行時にエラーします。理由を教えてください。
0773デフォルトの名無しさん2014/05/13(火) 19:35:06.68ID:uagFReCc
内部メンバが不定値になり有効状態と誤認される
0774デフォルトの名無しさん2014/05/13(火) 19:46:00.63ID:8dff/8hW
コンストラクタ/デストラクタを呼んでいないから
0775デフォルトの名無しさん2014/05/13(火) 19:46:02.70ID:E1rz5Jx8
>>773=バカ
それで説明しているつもりか
0776デフォルトの名無しさん2014/05/13(火) 19:50:28.75ID:fafhaNgG
new メモリの確保を行い、コンストラクタを呼ぶ
malloc/calloc メモリの確保のみ

自分でなんちゃってvectorを実装してみればわかると思うよ
0777デフォルトの名無しさん2014/05/13(火) 19:50:33.59ID:uJ550Ha4
vectorつかうならポインタ使わずvectorに統一しろよ

vector< vector<int>* >

でとんな不具合が。
0778デフォルトの名無しさん2014/05/13(火) 19:51:29.60ID:fafhaNgG
callocメモリの確保のみって嘘やな(´・ω・`)
まあわかるよね
0779デフォルトの名無しさん2014/05/13(火) 19:52:56.76ID:uJ550Ha4
と言いつつ、自分もポインタ使ってたわけだが。
2次元配列確保する部分では、vectorに統一はしている。
0780デフォルトの名無しさん2014/05/13(火) 20:07:54.53ID:nCUevE/p
malloc,freeは配置new,配置deleteと併用する
newしたものはdelete[]せずにdeleteする
0781デフォルトの名無しさん2014/05/13(火) 21:24:22.23ID:h2Azkgx1
vectorじゃなくてnew[] delete[]を使う利点ってどんなのがあるの?
0782デフォルトの名無しさん2014/05/13(火) 21:27:35.75ID:p6Lokthw
>>781
ムーブコンストラクターがある今となっては
レーゾンデートルは皆無
0783デフォルトの名無しさん2014/05/13(火) 22:03:16.81ID:P5bQGXnC
mingwとvsってどっちのが速いの?
コンパイル速度とか最適化的に
0784デフォルトの名無しさん2014/05/13(火) 22:08:57.24ID:wFTxwZ90
>>783
どちらもVSだろうね
0785デフォルトの名無しさん2014/05/13(火) 22:23:30.72ID:wE5efFNg
>>781
ベンチしてみなされ
0786デフォルトの名無しさん2014/05/13(火) 23:09:50.87ID:I3YIR7QR
>>783
比較しようと考えることすらおかしい
0787デフォルトの名無しさん2014/05/13(火) 23:15:38.37ID:dNR2qCU+
Treeviewの子ノードをダブルクリックで、子フォームを表示させたいのですが、
Form2Obj = gcnew Form2();
Form2Obj->ShowDialog();
の周りの条件文はどのように書けば良いでしょうか。

ノード1---ノード2
といったもので行っております。
visual studio 2010を使用しています。
0788デフォルトの名無しさん2014/05/13(火) 23:16:59.41ID:RSJvu3WH
そんなこともわからないのになんでC++/CLIとか使ってんの?
C#かVB.NETでやれ
07897872014/05/13(火) 23:22:39.78ID:dNR2qCU+
C++始めて2日なので...
調べてみた結果、C#の方が目的は達成できそうですので、
そちらにしようと思いました。
C齧っただけでは、何とかなりませんでしたね。
0790デフォルトの名無しさん2014/05/13(火) 23:24:29.33ID:wwrEnEuU
初心者はなぜC++/CLIに進んでしまうのか…
あんな見えてる地雷よく踏めるもんだ
0791デフォルトの名無しさん2014/05/13(火) 23:33:35.40ID:h2Azkgx1
個人的にC++/CLIは
String^ ←この^ってなによ気に食わん
と思いました
0792デフォルトの名無しさん2014/05/13(火) 23:39:35.56ID:RSJvu3WH
C++ではない、きみがやっているのはC++/CLIだ。
オーストラリアにいてオーストリアにいるというようなものだ
0793デフォルトの名無しさん2014/05/13(火) 23:51:20.57ID:dNR2qCU+
すいません色々間違えてしまって...
C#で無事できました。ありがとうございました。
0794デフォルトの名無しさん2014/05/14(水) 00:17:32.28ID:8mu135r/
だけどやっぱりc++/cliの魔改造っぷりは使いこなせたらかっこいいだろ
0795デフォルトの名無しさん2014/05/14(水) 00:24:43.85ID:hD/bpS5R
あんなもん書き始めて数時間で投げたわw
サンプルコードもC#かVB.NETだけなこと多いし何より七面倒臭いだろアレ……
0796デフォルトの名無しさん2014/05/14(水) 00:56:28.52ID:+eGAQ9pX
>>791
Pascal の真似じゃね?

>>794
2008 か 2010 かは忘れたけど、
C++/CLI だけインテリセンス効かないとか、MS からも継子扱いされてる言語に明日はないと思う。
0797デフォルトの名無しさん2014/05/14(水) 00:57:14.87ID:emzrQeCt
インテリセンスは復活しただろ?
0798デフォルトの名無しさん2014/05/14(水) 00:57:16.92ID:tdD3kh5P
インテリセンスと言語は関係なくないか。
0799デフォルトの名無しさん2014/05/14(水) 02:09:38.63ID:+eGAQ9pX
>>797-798
そういう扱いだってこと。
0800デフォルトの名無しさん2014/05/14(水) 02:18:23.90ID:emzrQeCt
C++とC#が存在する限りなくならんだろう
まぁメインで使う言語ではないが
0801デフォルトの名無しさん2014/05/14(水) 07:55:10.89ID:HVjR+QBF
>>800
むしろそいつらあるから、存在価値がなくなってるだろ
0802デフォルトの名無しさん2014/05/14(水) 08:16:54.30ID:/2MvpkXV
C++/CLIは必要に駆られた時にのみ使う言語だとは思うが
存在意義がどーのというほど役立たずじゃない
0803デフォルトの名無しさん2014/05/14(水) 08:43:30.89ID:Y8CCGqOw
使い分けが出来ない雑魚なんだろ
0804デフォルトの名無しさん2014/05/14(水) 12:05:44.55ID:HVjR+QBF
客の要望とか、上司の横暴以外で C++/CLI を使う状況が想像できないんだが w
ツールベンダーも軒並みシカトしてるしなぁ
0805デフォルトの名無しさん2014/05/14(水) 12:17:10.29ID:AZmox6CM
おれはcとC++だな、汎用性あるし
C#とかMSだけじゃん、意味ねーしw
0806デフォルトの名無しさん2014/05/14(水) 17:47:07.40ID:w8WpEYK4
じつはMSではなくてXamarinが牛耳っているのだよ
0807デフォルトの名無しさん2014/05/14(水) 22:32:10.07ID:1ABMywST
>>804
客の要望ってw
わざわざC++/CLI指定する客なんてどこにいるんだよ。
普通はC#とC++の資産を併用しなきゃならんときにしぶしぶ使うもんだろ。
0808デフォルトの名無しさん2014/05/14(水) 22:51:01.75ID:BwmP0C3S
>>807
ここにいるぞ!
0809デフォルトの名無しさん2014/05/14(水) 22:55:31.55ID:+QpfAcdH
C++とC#の資産があっての話だろ?
0810デフォルトの名無しさん2014/05/14(水) 23:16:17.98ID:/LCuFxtM
>>807
ここにもいるぞ!
0811デフォルトの名無しさん2014/05/14(水) 23:43:50.04ID:HVjR+QBF
>>807
過去二回あったよ。

て言うかお客さんが

> 普通はC#とC++の資産を併用しなきゃならんとき

の状況になったんだろ。
ちょっと頭があればそれぐらい思い付きそうなもんだが (w
0812デフォルトの名無しさん2014/05/15(木) 08:57:57.73ID: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))
になるようだな
0813デフォルトの名無しさん2014/05/15(木) 09:28:28.42ID:OyUuOS8e
おちつけ
そしてまず日本語として通る文章を書け
0814デフォルトの名無しさん2014/05/15(木) 09:47:20.71ID:uoR1Pk2D
>>812
お薬増やしておきますね
0815デフォルトの名無しさん2014/05/15(木) 09:50:13.84ID:xTU4tsuP
そもそも「true=1でfalse=0」は常識、というわけではないだろ……
(規格的に「trueは0以外」「false=0」は確定。
つーか真偽専用なんだから普通の数字なんか入れるものじゃない)
もっとも、定義上はfalseの方しか確定じゃないから、判定する論理式の中には
trueよりfalseの方を使った方が安定といえば安定
0816デフォルトの名無しさん2014/05/15(木) 10:21:24.58ID:Dz76ACJj
まーた規格を読んでない奴が規格的にとか言ってるわ
0817デフォルトの名無しさん2014/05/15(木) 11:08:45.88ID: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
0818デフォルトの名無しさん2014/05/15(木) 11:27:36.17ID:zU62setb
君たち、科学哲学とか弱いんだな
どうもちんぷんかんぷんのようだ
ま、Cでプログラム作る分にはそれでもやれるしな
あはは
さってとじゃね
0819デフォルトの名無しさん2014/05/15(木) 12:09:03.38ID:8MS98tJI
int の値が true と判断される (これは 0 以外) ことと、true を int にした値 (これは 1) の区別がついてない奴なんていないよね?
0820デフォルトの名無しさん2014/05/15(木) 12:38:56.20ID:eNbFmNO2
真を整数に変換すると1になる事と
真が1であるというのは
全く異なる
ヌルポインタを評価した場合非ゼロが偽になり得る
0821デフォルトの名無しさん2014/05/15(木) 12:59:31.94ID:8MS98tJI
>>820
> 真が1であるというのは

誰もそんなことは言ってないんだが、いきなりどうした?
0822デフォルトの名無しさん2014/05/15(木) 13:15:27.84ID:B0macvVa
非ゼロはヌルポインタじゃないだろ
0823デフォルトの名無しさん2014/05/15(木) 13:18:22.40ID:lkL/c86t
だよな・・・?
bool b = (bool)NULL;
bがtrueなる場合がある?
0824デフォルトの名無しさん2014/05/15(木) 13:22:26.92ID:mVM4WfmV
ががが>>820>>822
0825デフォルトの名無しさん2014/05/15(木) 13:44:06.84ID:eNbFmNO2
ヌルポインタはゼロと比較すると真になるがゼロではない
NULLマクロはまた別の話
0826デフォルトの名無しさん2014/05/15(木) 13:46:07.54ID:k3igCpcm
じゃ数値として何が入ってるんだい?
0827デフォルトの名無しさん2014/05/15(木) 13:48:59.79ID:lkL/c86t
ちょっとわからないから
>>820の主張を再現する具体的なコードをですね
0828デフォルトの名無しさん2014/05/15(木) 13:54:18.54ID:eNbFmNO2
レジスタやメモリに何か入るかは実装依存だが無関係
0829デフォルトの名無しさん2014/05/15(木) 15:16:49.88ID:jWapkBys
ムカデが出た。ストラウストラップは強かった
0830デフォルトの名無しさん2014/05/15(木) 15:33:59.10ID:dcCiIuDJ
true=1 false=0 では無い。が、コンパイラによってはそれでOKなのも有る。
trueとfalse は boolen型だから数値では無い。

数値として扱ったら駄目 不具合が出る
0831デフォルトの名無しさん2014/05/15(木) 15:51:02.11ID:NOa2hkwU
普通に 
bool bFlag;
0.5*bFlag とかするよね
0832デフォルトの名無しさん2014/05/15(木) 16:08:04.22ID:fPGh8jFP
>>831
昔はしてたけど今はしなくなった。
0833デフォルトの名無しさん2014/05/15(木) 17:08:23.03ID:VGaH25Rt
>>831
何の意味?
0834デフォルトの名無しさん2014/05/15(木) 17:12:27.88ID:eNbFmNO2
頭の悪いやつ用にブーリャン型がてきてめんどいわ
0835デフォルトの名無しさん2014/05/15(木) 17:14:48.97ID:+DAA7cFt
==TRUE とかバカ過ぎてワロエルw
0836デフォルトの名無しさん2014/05/15(木) 17:32:45.77ID:5sMFAW9N
わらえねーよ 悪寒がするよ
0837デフォルトの名無しさん2014/05/15(木) 18:04:54.77ID:aAeHLPhS
>>835
それ見たら「今すぐ書いた奴○せ」の目印だから、まあよい。
それを平然と書ける奴は知能の面でいろいろ危険。
オランウータンに刃物持たせるが如し。
0838デフォルトの名無しさん2014/05/15(木) 18:32:04.24ID:UdRBY7VJ
プログラマの墓場だな
0839デフォルトの名無しさん2014/05/15(木) 18:41:31.33ID:BKKi1ys9
>>823
それはないが
bool b = (bool)(void *)NULL;
ならあるな
0840デフォルトの名無しさん2014/05/15(木) 18:47:31.92ID:4Th7kZ7E
trueの等価か否かはC/C++言語ローカル問題だから使う上で知ってて当然だがあげつらって騒ぐほどの事ではない
false や 0 や nil が同じ意味で使われかつ利用するライブラリやインタプリタの種類によって使い分けなきゃならん言語も有るし。
0841デフォルトの名無しさん2014/05/15(木) 19:07:36.74ID:3a5kleH6
それより昔
bool b = false;
b++;
って無かったか?
何がしたいのかさっぱりわからなかった
0842デフォルトの名無しさん2014/05/15(木) 19:12:17.42ID:1iZpvHMh
何それ初めて見た
0843デフォルトの名無しさん2014/05/15(木) 19:54:46.02ID:KjqXcag5
b++;

b = true;

上の方が早い希ガス
0844デフォルトの名無しさん2014/05/15(木) 19:59:14.56ID:UdRBY7VJ
incとmovの違いだな
0845デフォルトの名無しさん2014/05/15(木) 20:12:31.70ID:NOFxC8X3
ちなみに、否定するには、!b より 1-b の方が命令少ないが、
x86だとバイト数変わらん。
RISC系だと性能差出るかも。
0846デフォルトの名無しさん2014/05/15(木) 20:13:27.00ID:0ut8wgYA
プロセスAにある構造体aをプロセスB上でも弄れるようにするにはどうすれば良いでしょうか?
プロセスB上でプロセスAから取得した構造体aのポインタからメンバを読もうとすると
アクセス違反で終了してまいます。
0847デフォルトの名無しさん2014/05/15(木) 20:23:38.01ID:Uxynwd2i
プロセス間通信だな
共有メモリとか名前付きパイプとかメールスロットとか
0848 ◆QZaw55cn4c 2014/05/15(木) 20:24:42.17ID:EXuN6WUq
>>846
環境にもよるが,shared memory で調べてほしい
「プロセス」ごとに独自のメモリ空間をもっているのが普通
0849 ◆QZaw55cn4c 2014/05/15(木) 20:26:22.34ID:EXuN6WUq
>>840
c# スレで話題になったね,C/C++ 流がボコボコにされていました,アハハ
0850デフォルトの名無しさん2014/05/15(木) 21:44:24.14ID:nx9ZCNV+
空配列とかは言語によって真偽が違うんだよね
0851デフォルトの名無しさん2014/05/15(木) 22:39:00.54ID:em21x65l
vectorの要素をforループする場合、iteratorでbegin,endをループするのと、
配列みたいに i=0からvector.size()まで vector[i]でループするのと、
何か違いがありますか?
0852デフォルトの名無しさん2014/05/15(木) 22:43:34.33ID:1iZpvHMh
ありません
0853デフォルトの名無しさん2014/05/15(木) 22:43:56.77ID:BJANWS4P
>>844
どうしてそう、息を吸って吐くように嘘が出てくるのか
0854デフォルトの名無しさん2014/05/15(木) 22:52:00.19ID:KjqXcag5
ループ内部でvectorのサイズが変化する場合があるな
0855デフォルトの名無しさん2014/05/15(木) 23:19:19.73ID:qq5GNXVQ
それはどちらのケースでもあるじゃん
0856デフォルトの名無しさん2014/05/15(木) 23:31:24.43ID:gSHCwore
>>839
それもない
ポインタを真偽値に変換したらnullポインタは必ずfalse になる。
Cスタイルキャストじゃなくてreinterpret_castを使ったら意図通りにnullポインタが0でない処理系を判別できる。
bool b=(uintptr_t)((void*)0);
こうでもいい。

まあ、nullポインタが0でない処理系なんて使ったことありませんけど。
0857デフォルトの名無しさん2014/05/15(木) 23:34:03.27ID:gSHCwore
>>851
ループの最中に要素の追加などをした場合イテレータは無効になる場合がある。
0858デフォルトの名無しさん2014/05/15(木) 23:48:47.76ID:H8RGlgHK
>>856
つ OS/9
実記憶なOSはまだあるのよ
0859デフォルトの名無しさん2014/05/16(金) 00:09:52.38ID:cZLVKnpq
>>858
???実記憶であることとnullの値は関係ないだろ
OS/9って本当にnull≠0なの?
0860デフォルトの名無しさん2014/05/16(金) 00:14:52.82ID:fgvpMRFf
http://d.hatena.ne.jp/eel3/20120909/1347196154
0861デフォルトの名無しさん2014/05/16(金) 01:15:58.75ID:QoHSVP+W
>>856
> Cスタイルキャストじゃなくてreinterpret_castを使ったら意図通りにnullポインタが0でない処理系を判別できる。
> bool b=(uintptr_t)((void*)0);
そんな保証もないよ。
0862デフォルトの名無しさん2014/05/16(金) 01:31:09.41ID:poypvy+o
>>853
朝鮮人だからさ
0863 ◆QZaw55cn4c 2014/05/16(金) 02:49:01.28ID:DN7u20iG
>>860
いにしえから,そう,まだ void がなかったころは,execl() の類の可変長引数の最終引数は (char *)NULL と書くのが儀式だった‥
0864デフォルトの名無しさん2014/05/16(金) 05:16:27.43ID:5aDVfyXg
>>861
なにが言いたいのか
0865デフォルトの名無しさん2014/05/16(金) 20:26:00.99ID:+KheQSD1
class MyClass{
...
};
を定義して、使う時に
MyClass *p = new MyClass();
MyClass mc = MyClass();
のように、どちらの方法でも使えると思いますが、何か違いはありますか?
0866デフォルトの名無しさん2014/05/16(金) 20:32:22.36ID:4xC78i9I
deleteするまでアドレス有効
ブロック抜けたら無効
0867デフォルトの名無しさん2014/05/16(金) 20:40:08.50ID:igo/DCLE
他の言語から来た人だろうか
とりあえずもう言われてるけど寿命が全然違う
0868デフォルトの名無しさん2014/05/16(金) 22:18:12.13ID:+KheQSD1
>>866,867
ありがとうございました。
0869デフォルトの名無しさん2014/05/17(土) 01:38:37.64ID:J6oJMsTV
>>865
>MyClass mc = MyClass();
>のように、どちらの方法でも使える
コムパイルが通る可能性は無くはないが
一時オブジェクトを作ってそれをもとにもう一つ作るなど無駄。
比較すべきは
MyClass mc;
0870デフォルトの名無しさん2014/05/17(土) 02:34:46.79ID:CIZJhZT4
MyClass *Hoge(){
MyClass *p = new MyClass();
(略)
return p;
}

MyClass &Hoge(){
MyClass &mc = MyClass();
(略)
return mc;
}

どっちが良いですか?
0871デフォルトの名無しさん2014/05/17(土) 02:38:26.29ID:C8xivB5g
良し悪し以前の問題かと
0872デフォルトの名無しさん2014/05/17(土) 02:54:38.71ID:LcRmehIv
>>870
下は動かないので上の方がいい

MyClass Hoge(){
 MyClass mc;
 (略)
 return mc;
}
0873デフォルトの名無しさん2014/05/17(土) 03:29:06.20ID:QenhlCSV
本日のNG推奨IDはこちら

ID:LcRmehIv
ID:CIZJhZT4
0874デフォルトの名無しさん2014/05/17(土) 06:38:58.51ID:lmWxNHfJ
>>869
それ一時オブジェクト作られるんだっけ?
0875デフォルトの名無しさん2014/05/17(土) 06:46:46.31ID:kpm9Xhi5
>>870
上のやり方は戻り値を自前で破棄しないといけないことに気付いているのか?
どっちがいいと聞いてくる時点で同等に思っているっぽいけど
0876デフォルトの名無しさん2014/05/17(土) 07:05:55.68ID:ywqXIraQ
インスタンスを返すなら
これでいいのかな

MyClass* Hoge(){
 MyClass mc;
 (略)
 return &mc;
}
0877デフォルトの名無しさん2014/05/17(土) 07:11:09.67ID:kpm9Xhi5
>>876
それ、なにもかえってこないぞ多分
0878デフォルトの名無しさん2014/05/17(土) 07:13:44.44ID: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;
}
0879デフォルトの名無しさん2014/05/17(土) 07:18:29.49ID:ywqXIraQ
マジかすまん
勘違いしてた
そっかHogeがオワタ時点でmcは破棄されるのか
俺アホすぎワロスwww
0880デフォルトの名無しさん2014/05/17(土) 09:07:39.51ID:bRcULvwX
>>866で言ってるのにな
0881デフォルトの名無しさん2014/05/17(土) 10:52:45.13ID:v/pj/1aT
ワシにはわからん
0882デフォルトの名無しさん2014/05/17(土) 11:42:39.80ID:+rGJT6dM
やれやれだぜ
0883デフォルトの名無しさん2014/05/17(土) 11:48:10.75ID:nwVOk95Q
よくからんからチンコこする
0884デフォルトの名無しさん2014/05/17(土) 12:11:11.90ID:Ut3rni4+
factoryみたいなことやりたいのかしら
0885デフォルトの名無しさん2014/05/17(土) 12:30:18.64ID: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]に割り当てる配列のサイズをバラバラにしたりとかできんの?
誰かよろ
0886デフォルトの名無しさん2014/05/17(土) 12:32:14.52ID:pDUyUp0N
ジャグ配列ってやつだな
0887デフォルトの名無しさん2014/05/17(土) 12:36:33.17ID:R4olBPWV
>>885
もちろんオーケー
と言うか*argv[]とかモロその発想だろ
0888デフォルトの名無しさん2014/05/17(土) 12:57:40.26ID:v/pj/1aT
これならワシにもわかる
0889デフォルトの名無しさん2014/05/17(土) 14:01:43.36ID:YgdJ98+v
>>886-888
サンクス
0890デフォルトの名無しさん2014/05/17(土) 14:18:12.91ID:YgdJ98+v
初歩的な質問だけど
struct a{
int b;
char c[10];
};
struct a d[8];
ってなってる時に
e=sizeof(d);
ってした場合、e=8になる?それともdの中の変数bや配列cもカウントされて別の数値になる?
0891片山博文MZバグロボ ◆T6xkBnTXz7B0 2014/05/17(土) 14:24:18.57ID:n6eabQOq
e == sizeof(struct a) * 8
になるね。
0892デフォルトの名無しさん2014/05/17(土) 14:41:29.86ID:R4olBPWV
>>890
http://codepad.org/LSMsmSGR
0893デフォルトの名無しさん2014/05/17(土) 14:42:57.45ID: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?
0894デフォルトの名無しさん2014/05/17(土) 14:47:29.21ID:d2QcpThl
effective C++を読みました。
そこには内部のデータへのアクセスは最小限にするべきと書いてありました。
例えば分数クラスがあるとするじゃないですか。分数クラスに足し算メソッドを入れるのは
間違ってますか?分母と分子を取り出して計算してまた入れれはいいのですから。
この考え方についてどう思いますか?
0895デフォルトの名無しさん2014/05/17(土) 14:55:03.35ID:R4olBPWV
>>893
sizeof演算子は、ポインタ相手に使うとポインタのサイズを返す。
つまり、mallocでどれだけ確保したかはsizeofでは分からない。
(http://www.kis-lab.com/serikashiki/C/C03.html)

書き直すとしたらこんな感じ?
http://codepad.org/6bSDZA3q
0896デフォルトの名無しさん2014/05/17(土) 15:00:25.69ID:R4olBPWV
>>894
間違ってるとは言わないけど、その書き方だと例えば
 fraction a(1, 3), b(1, 2); //コンストラクタで代入。仮に「1/3」「1/2」の意味とする
 a.plus(b); //「a = a + b」の意味
みたいな書き方になるよ?
でも分数なんだから、普通に演算子のオーバーロードを使って
 a += b; //「a = a + b」の意味
みたいに書ける方が楽じゃない?
0897デフォルトの名無しさん2014/05/17(土) 15:02:27.20ID:d2QcpThl
いやいや、a.puls(b)じゃなくて
puls(a,b)です。
aにa+bが入ります。
0898デフォルトの名無しさん2014/05/17(土) 15:02:56.87ID:bRcULvwX
_msize()ってのがあるな
0899デフォルトの名無しさん2014/05/17(土) 15:05:10.17ID:d2QcpThl
あるいは
void operator+=(fraction a, fraction b);
のような関数を定義します。
0900デフォルトの名無しさん2014/05/17(土) 15:12:24.48ID:R4olBPWV
>>897
それメソッド(メンバ関数)じゃなくてただの関数だろ……
大体>>899で「operator+=」って書けるってことはさては知ってて聞いたか?

「内部のデータへのアクセスは最小限に」はそりゃそうだけど、
分数クラスで分子・分母に(メンバ関数などを通じて)アクセスするのは普通じゃん
分かりやすい例で行けば<complex>とかがそうだ
0901デフォルトの名無しさん2014/05/17(土) 15:36:28.47ID:d2QcpThl
例えば、複素数の場合内部表現が実部、虚部の場合と
偏角と絶対値の場合があるじゃないですか?
もしメソッドにしてしまうと、内部表現を変えたら
すべてのメソッドも書き換える必要がありますよね。
でも関数なら書き換える必要がない。
というのが内部のデータのアクセスを最小限にする理由ですよね。
0902デフォルトの名無しさん2014/05/17(土) 16:08:20.96ID:TQ+XKlgi
>>901
>でも関数なら書き換える必要がない。
それ、どんな魔法?
0903デフォルトの名無しさん2014/05/17(土) 16:29:01.04ID:AqxEZVXM
メンバ変数のアクセスを最小限にする云々は巨大なクラスのメンバ変数は
グローバル変数と同じ問題を抱えることになるから気をつけましょうみたい
な極々単純な話なんじゃねーの?
0904デフォルトの名無しさん2014/05/17(土) 19:53:40.98ID:viiN1KUU
分数をどうやって内部にアクセスせずに計算するのかは興味ある
0905デフォルトの名無しさん2014/05/17(土) 20:27:30.97ID:te2IP1pO
メソッドですらも非公開プロパティを触れないのか?
0906デフォルトの名無しさん2014/05/17(土) 20:36:51.33ID:uX7tOWvA
>>894
> そこには
(クラスの外から)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
> 内部のデータへのアクセスは最小限にするべきと書いてありました。

なので、>>897 とかはよろしくない。
0907デフォルトの名無しさん2014/05/17(土) 21:34:39.66ID:te2IP1pO
フレンド関数の出番かと‥
0908デフォルトの名無しさん2014/05/17(土) 22:20:05.29ID:v/pj/1aT
フレンドは最後の切り札と聞きましたが、結構使うもんなんですか。
0909デフォルトの名無しさん2014/05/17(土) 22:40:44.35ID:kpm9Xhi5
お友達結構便利ダゼ☆
0910デフォルトの名無しさん2014/05/18(日) 00:36:49.59ID:BExb4OPW
どうにも強く依存しちゃうような関係がクラス間にある場合
無理にpublicでやろうとすると、かえって内部が丸出しになっちゃって
いっそfriendにしたほうが、結果的に公開する情報を減らせることはあるね
まあ、それでも最後の手段にしたいのは事実だが…
0911デフォルトの名無しさん2014/05/18(日) 00:39:37.00ID:eV8xCOTG
片想いだし
0912デフォルトの名無しさん2014/05/18(日) 00:41:20.73ID:c000QlqK
namespace限定でpublicにする機能が欲しいよな
0913デフォルトの名無しさん2014/05/18(日) 01:29:18.46ID:l5ZUM/Mk
ともだちんこー!!
0914デフォルトの名無しさん2014/05/18(日) 11:34:57.00ID:IQqucOU+
>>913は昭和時代のヒキヲタ妖精アスペニート
0915デフォルトの名無しさん2014/05/18(日) 11:48:06.02ID:uF8ItM3e
ポインタについて勉強中だけど質問
ポインタってどこかに用意した変数やら配列やらへのワープゾーンみたいなもんだと認識してるけど
int *a;;
a=(int*)malloc(sizeof(int*)*10;
って感じにaに10個の配列を用意した時に
int *b;
b=a;
ってやったらaに入ってたワープゾーンだけがbに入るの?それともaのワープゾーンにリンクしてた配列までコピーされるの?
せんせー教えてください
0916デフォルトの名無しさん2014/05/18(日) 11:49:57.38ID:BRQ2ZbHh
前者
0917デフォルトの名無しさん2014/05/18(日) 11:50:50.44ID:l5ZUM/Mk
ワ、ワープゾーン??
0918デフォルトの名無しさん2014/05/18(日) 11:51:16.38ID:uF8ItM3e
センキュー
0919デフォルトの名無しさん2014/05/18(日) 11:53:39.52ID:jESs8rMM
>>915
まず、ワープゾーンじゃないから訂正して学ぶように。

> リンクしてた配列までコピーされるの?

それがどこにコピーされると思う?

どこに?

あと、printf("%p", a)してみたり、
sizeof演算子でいろいろサイズみてみたりすると、
ポインタなるものが何なのかすぐ分かると思うよ。
0920デフォルトの名無しさん2014/05/18(日) 12:09:53.18ID:eV8xCOTG
gcc ならsave-temps つけてasmのソース確認すれば
すぐ判ると思うのだが?
0921デフォルトの名無しさん2014/05/18(日) 12:33:24.21ID:B6nRembq
喩えるなら学籍番号とかの方がいいと思うぞ
0922デフォルトの名無しさん2014/05/18(日) 13:19:55.42ID:vXasxGe8
> int *a;;
> a=(int*)malloc(sizeof(int*)*10;

仮免もやれんレベル
死ね
0923デフォルトの名無しさん2014/05/18(日) 14:40:57.61ID:e7YN7e31
>>920
アセンブラソース読める奴がこんな質問するわけねーだろw
0924デフォルトの名無しさん2014/05/18(日) 14:48:52.30ID:BMv+P6U/
ワープゾーンだから場違いな奴が出てくるのも仕方ない
0925デフォルトの名無しさん2014/05/18(日) 15:11:36.79ID:l5ZUM/Mk
やれやれだぜ
0926デフォルトの名無しさん2014/05/18(日) 15:21:56.40ID:739gnFQ4
CreateProcess関数の第5引数をTRUEにして「プロセス継承」した筈の子プロセスを生成したのですが、
生成された子プロセス側から親プロセスの「プロセス継承」であるのを知るにはどうすれば良いでしょうか?
0927デフォルトの名無しさん2014/05/18(日) 15:31:32.83ID:oE4mJBDf
>>926
ここで訊け
Win32API質問箱 Build117
http://toro.2ch.net/test/read.cgi/tech/1394156278/
0928デフォルトの名無しさん2014/05/18(日) 15:34:19.72ID:BMv+P6U/
もちっと具体的に、それがわからないとどう困るのかを書くべき
ちなみに、親が開いた「各オブジェクトのハンドル」の継承やがな
0929デフォルトの名無しさん2014/05/18(日) 22:26:47.45ID: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次元配列の場合、こういうふうにプロトタイプ宣言出来るんですか?
0930デフォルトの名無しさん2014/05/18(日) 22:44:59.09ID:BRQ2ZbHh
はい
0931デフォルトの名無しさん2014/05/18(日) 23:24:37.39ID:oxq+ikAO
>>929
あら
f(int m, int n, int a[m][n]) ならC99からは宣言も定義も可能なんだね
前回の質問にalloca()を使えとか、間違えて答えてしまった‥ごめんね
https://ideone.com/4Kq0MQ
0932デフォルトの名無しさん2014/05/18(日) 23:31:42.19ID:untGUeAU
>>931
ググってもよく分からなかったんだが、[*][*]っていつからできるようになったの?
0933 ◆QZaw55cn4c 2014/05/18(日) 23:51:08.10ID:oxq+ikAO
>>932
C99から
0934デフォルトの名無しさん2014/05/19(月) 00:08:12.45ID:/174+P6q
そりゃ可変長が入った99からだろ
0935デフォルトの名無しさん2014/05/19(月) 00:22:56.96ID:mLyDgbnZ
>>931
サンプルありがとうございます。
VS2013ではコンパイル出来ないのですが、C99対応していないのでしょうか?
0936デフォルトの名無しさん2014/05/19(月) 00:25:01.41ID:pLiUIlla
ちょっとずつ対応してきてる
上のやつはまだ
0937デフォルトの名無しさん2014/05/19(月) 00:28:32.28ID:jgU9zwCb
半分見捨てられてるよな。何年前の規格だよと。
需要もないんだろうけど。
0938デフォルトの名無しさん2014/05/19(月) 00:31:30.14ID:jgU9zwCb
と書いたけど製品名Visual C++だしC言語は対応する気ないんじゃね?と思った。
0939デフォルトの名無しさん2014/05/19(月) 00:42:03.18ID:pLiUIlla
VCといえばC++11の対応具合は
0940デフォルトの名無しさん2014/05/19(月) 01:08:22.63ID:UDyOnYKb
>>938
俺もそう思う。
CはC++のCで十分って感じだろう。
0941デフォルトの名無しさん2014/05/19(月) 07:59:49.29ID:k5xxXzF6
>>940
「C++のC」って何?
0942デフォルトの名無しさん2014/05/19(月) 08:03:37.20ID:zHXgCe3L
>>938
それなりに対応してきてるけど C++ の方が優先度高いだろうし、その C++ からしていまいちだし...
0943デフォルトの名無しさん2014/05/19(月) 08:24:37.69ID:YdMb7M2Q
それなりにC++11対応されてて普通に使う分には問題ないレベルだと俺は思うんだけど
0944デフォルトの名無しさん2014/05/19(月) 08:39:30.94ID:JapMjw/D
>>941
拡張子 .c のファイルのコンパイルとか?
0945デフォルトの名無しさん2014/05/19(月) 08:44:09.77ID:ajnPgsUX
VSっていちおうMSのプラットフォームのための開発環境なわけで、Cのみで開発できるのは
Win32くらいだからいまさら新しい規格に対応する必要性など感じていないんだろう。
0946デフォルトの名無しさん2014/05/19(月) 09:04:09.90ID:mxK7K6eG
>>944
それコンパイラがC用に切り替えること多くね?
まあ厳密にはC言語⊂C++ではないが
0947デフォルトの名無しさん2014/05/19(月) 10:47:28.53ID:yPaRcm/E
テンプレートマジック使うと名前解決が標準に合致しないからグダグダになるのがC++
0948デフォルトの名無しさん2014/05/19(月) 10:58:20.13ID:72vGXIcK
>>947
kwsk
0949デフォルトの名無しさん2014/05/19(月) 11:26:22.43ID:tHtfoV9l
Cに対応しますといったらバックエンド(組み込みとかの移植性)の方が求められる気がする
MS的にはうまみがない
0950デフォルトの名無しさん2014/05/19(月) 13:57:08.03ID:xXRUxTPj
VC++のC99対応はFFmpegの為
割とマジで
0951デフォルトの名無しさん2014/05/19(月) 14:01:24.69ID:/174+P6q
VC++ではコンパイルできないだろ
FAQに書いてあるし
0952デフォルトの名無しさん2014/05/19(月) 19:48:22.58ID:00Yp1Qbf
>>945
正直いって逐次指定な配列を言語仕様に取り込むとか C99 は狂っているとしか
C89 でもう十分
0953デフォルトの名無しさん2014/05/19(月) 20:09:26.01ID:6L2g2kAx
仕様策定グループのメンバーに破壊工作の刺客が送り込まれてるとしか
0954デフォルトの名無しさん2014/05/19(月) 20:41:37.56ID:u0kYoYP8
new で生成したら必ず delete するって覚えとけば良い?
new で生成したわけじゃないのに delete が必要だったり
new で生成したのに delete が必要なかったり
なんてことはある?
0955デフォルトの名無しさん2014/05/19(月) 20:45:35.65ID:pLiUIlla
スマートポインタというのがあってですね
0956デフォルトの名無しさん2014/05/19(月) 20:48:07.32ID:Tviwz+y5
newされたものはdeleteするべし
ただし必ずしも自分でdeleteを書かなければいけないわけではない
スマートポインタに自動的に解放してもらうとかできる
0957デフォルトの名無しさん2014/05/19(月) 21:00:02.55ID:tHtfoV9l
>>954
原則はそうだけど
new は僕がやるけどdeleteは君がやってねとかいうライブラリの関数はザラにあるし
範囲を抜けたら暗黙にdeleteを呼ぶ偽ポインタもある
0958デフォルトの名無しさん2014/05/19(月) 21:08:36.75ID:6L2g2kAx
delete じゃなくて delete[] しないといけないものもあるから注意な
0959デフォルトの名無しさん2014/05/19(月) 21:25:23.22ID:OdEJnfIS
factoryやfacadeで生成も隠蔽すればいいん?
0960デフォルトの名無しさん2014/05/19(月) 21:43:06.04ID:9fJb4fn7
>facadeで生成も隠蔽

何故ここでファサードが関係?
0961デフォルトの名無しさん2014/05/19(月) 23:05:59.04ID:HIpocQh2
テンプレートに詳しい人教えてください
https://ideone.com/rYzSkg [1]
二つのクラスがそっくりなので一緒にしたいと考えています.
https://ideone.com/uvxS69 [2]
このようにしたいのですが,宣言されてないよ!のエラーが出てしまいます
[1]はどうすれば統一できるでしょうか
0962デフォルトの名無しさん2014/05/19(月) 23:25:07.62ID:/174+P6q
ttps://ideone.com/Q6PXEY
0963デフォルトの名無しさん2014/05/19(月) 23:38:03.44ID:HIpocQh2
なるほど。typenameを使わないといけないのですね,ありがとうございました
0964デフォルトの名無しさん2014/05/20(火) 01:57:58.65ID:lOxlpScD
質問するならゴミみたいなソースをダラダラと貼るな
問題が再現する最小のコードを貼れ
0965デフォルトの名無しさん2014/05/20(火) 07:41:27.49ID:2b9b8/29
現実のストレスを発散するためにとりあえず叩けそうなのは叩いてみました
0966デフォルトの名無しさん2014/05/20(火) 07:57:00.60ID:LPSd8BiO
>>961,962
テンプレート初心者なのですが、このクラスを使うときには
どんな風に記述するのでしょうか?
0967デフォルトの名無しさん2014/05/20(火) 08:16:14.35ID:Lchk77nY
using SysClock = Clock;
とか
using NTimer = Timer<std::chrono::sys_clock>;
ってどういう意味?初めて見るんだけど…
俺の持ってるオライリーランゲージクイックリファレンスにも載ってないし(´・ω・`)
0968デフォルトの名無しさん2014/05/20(火) 08:44:37.30ID:F/Uvd5NG
Template Aliases
11からの機能だからな
0969デフォルトの名無しさん2014/05/20(火) 09:32:45.61ID:ZFteYQ7B
template typedef 存在していたのか
0970デフォルトの名無しさん2014/05/20(火) 20:40:05.67ID:gnNGvPv6
細かいことだが>>967はAlias templatesじゃねーだろ
ただのalias-declaration
0971デフォルトの名無しさん2014/05/20(火) 21:00:50.26ID:eMXV5lE3
スマートポインタって
どうやって、いらなくなったデータをいらないって判断してるの?
あと解放するタイミングはいつ?
0972デフォルトの名無しさん2014/05/20(火) 21:02:20.04ID:+6kjiTDf
どこからも参照されなくなった時とか
0973デフォルトの名無しさん2014/05/20(火) 21:14:45.43ID:XZ8PbsoH
>>971
ふつうは参照カウント

>>972
それはガペコレでもないと無理
0974デフォルトの名無しさん2014/05/20(火) 21:20:27.36ID:JuF8aFg1
>>971
スマートポインターがスコープを抜けることで解放
0975デフォルトの名無しさん2014/05/20(火) 21:24:01.05ID:fbMM1sIr
参照カウンタつきのスマポがあるらしい
0976デフォルトの名無しさん2014/05/20(火) 22:48:56.71ID:nd0ZvrXw
classA->create()とかでオブジェクトのポインタ返してるメンバ関数をよく見かけるけどあれって勝手にdeleteされたり不安にならないの?
0977デフォルトの名無しさん2014/05/20(火) 22:49:36.19ID:nd0ZvrXw
↑ユーザー側ではdeleteしなくてもいいようなやつね
0978デフォルトの名無しさん2014/05/20(火) 22:55:47.91ID:fbMM1sIr
モノによってはそういうこともある
普通はすぐに処理して速やかに手放す
つかみっぱなしにする場合はきちんと仕様を確認する
ライブラリなんかだとそういう制約はドキュメントに書いてあるはず
0979デフォルトの名無しさん2014/05/20(火) 22:59:01.69ID:nd0ZvrXw
言語レベルで制約は出来ないの?
0980デフォルトの名無しさん2014/05/20(火) 23:01:55.95ID: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できない
のでしょうか?
0981デフォルトの名無しさん2014/05/20(火) 23:03:10.25ID:fbMM1sIr
飽きたらポイされてもいいのよ☆ というときは weak_ptr とかいうのを使えるらしいが俺はやったことない
0982デフォルトの名無しさん2014/05/20(火) 23:03:31.52ID:nd0ZvrXw
c#とはちがうんやで
0983デフォルトの名無しさん2014/05/20(火) 23:05:09.20ID:BF5AHSio
>>980
myClass mc;
myBase &mb = mc;
0984デフォルトの名無しさん2014/05/20(火) 23:10:53.39ID:nd0ZvrXw
>>980
myBase mb(myClass());
でコピーコンストラクタが呼ばれるから
0985デフォルトの名無しさん2014/05/20(火) 23:18:17.77ID:Dt1y8Hrx
myBase mb;
これだけでmyBaseの実体ができる
これに何を代入してもmbはmyBaseのまま
構造体としてのデータのコピーが起こるだけ
参照じゃないところがJAVAやC#と違うところだよね
0986デフォルトの名無しさん2014/05/20(火) 23:30:46.78ID:uQLrwk2U
>>973
> それはガペコレでもないと無理

意味がわからん、なんのための参照カウンタなんだ?
0987デフォルトの名無しさん2014/05/20(火) 23:38:06.92ID:jIyo6zRD
>>986
参照カウント方式てのは
いくつかあるGC実装のなかの一つだよ
0988デフォルトの名無しさん2014/05/20(火) 23:44:23.11ID:j4b0wmFL
ガベージコレクションって言われると
自然とマークアンドスイープが浮かぶ
0989デフォルトの名無しさん2014/05/20(火) 23:50:20.20ID:LPSd8BiO
みなさんありがとうございます。
myBase &mbr = myClass();
mbr.method();
と書き換えたらoverrideできました。
でもまだよく分らないのですが、
> myBase mb;
> これだけでmyBaseの実体ができる
> これに何を代入してもmbはmyBaseのまま
> 構造体としてのデータのコピーが起こるだけ
データのコピーが起こったらmbの実体がmyClassに変わるのではないですか?
その結果、myClassのMethod()が呼び出されると思ったのですが。
0990デフォルトの名無しさん2014/05/21(水) 00:02:46.66ID:U29LvGvw
コピーされるのはmyClassの中のmyBaseの部分だけだから
0991デフォルトの名無しさん2014/05/21(水) 00:03:18.97ID:nM6Mwf45
myBase mb;のmbにはmyBaseの分のデータしかない(sizeofで比較すると分かる)ので、myClass型の値を代入するときにmyBaseの部分だけをコピーし、myClassの部分は消えてしまう
これをスライシングという

後myBase &mbr = myClass();だとmbrの実体が破棄されてしまうのでいけない
別に実体を確保しておくかconst参照を使うべき
0992デフォルトの名無しさん2014/05/21(水) 00:07:39.63ID:zBFBEF37
>>987
std::shared_ptr も GC って言っちゃうの?
0993デフォルトの名無しさん2014/05/21(水) 00:08:04.36ID:g8mAFBUR
>>988
俺はGCと言われると参照カウント・マーク&スイープ両方備えてるイメージを持つなー
0994デフォルトの名無しさん2014/05/21(水) 00:08:37.39ID:U29LvGvw
右辺値だからそもそもコンパイル通らんがな
0995デフォルトの名無しさん2014/05/21(水) 00:16:24.91ID: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
0996デフォルトの名無しさん2014/05/21(水) 00:24:19.41ID:JxdWfYNy
ムーブコンストラクタってなんなんですか?
0997デフォルトの名無しさん2014/05/21(水) 00:25:18.56ID:U29LvGvw
右辺値を受け取るコンストラクタ
0998デフォルトの名無しさん2014/05/21(水) 00:35:16.35ID:WX3/dXSq
>>992
言っちゃうよ
O(1)の配列だってhashのバリエーションだしな
0999デフォルトの名無しさん2014/05/21(水) 00:38:39.18ID:W2g5L2xs
>>998
はあ、そうですか
1000デフォルトの名無しさん2014/05/21(水) 00:47:46.18ID:7hPk5/6F
右辺値とか左辺値とかはもうc++の魔境
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。