◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1406801653/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

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

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

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

2 :デフォルトの名無しさん:2014/07/31(木) 19:15:07.44 ID:17Xd3Yqq
テンプレここまで

3 :デフォルトの名無しさん:2014/07/31(木) 21:38:29.86 ID:cIGHixSb
>>1

4 :デフォルトの名無しさん:2014/08/01(金) 07:55:38.07 ID:4+2xbBXr
>>1乙乙

5 :デフォルトの名無しさん:2014/08/01(金) 10:19:34.67 ID:ZbseM8Xc
また読みもしないのにスレ一覧に加えてしまった。

6 :デフォルトの名無しさん:2014/08/01(金) 23:35:44.60 ID:Q1xcVL69
文字コードについて質問です。
charやWCHARでマルチバイト文字とワイド文字を扱うと学びました。
しかしこれは、いわゆる「文字セット」であって文字コードではありませんよね。
例えばマルチバイト文字にはShift-JISやANSI、cp932、EUC-JPなどがあるみたいですが、標準ではそのような指定はどこにもないように思えます。
マルチバイト文字セット=cp932
ワイド文字=UFT-8
とみなし、それ以外の文字セットは基本的に用いないという暗黙的な了解なのでしょうか。

webページを作成する際には当然だった文字コードの指定が見当たらず不安に思っています。

7 :デフォルトの名無しさん:2014/08/01(金) 23:47:26.94 ID:xmbDbUKF
UTF-8はマルチバイトだよ
マルチバイト文字とワイド文字を変換する時にそれぞれの符号化方式を指定する
さらにOSによっては、ファイルシステムに使用可能な符号化方式が指定されている場合もある

8 :デフォルトの名無しさん:2014/08/02(土) 00:02:40.42 ID:yAhCEHKv
マルチバイトとワイドは一文字長での区別だろ。
機種や環境によって違う。
windowsのUTF-16もWCHARで一文字を表現できないことからマルチバイト的だし。
一文字が一変数に格納可能という条件がワイドで、
一文字に複数変数がないと格納不可能という条件がマルチバイトでは。
一変数の単位が7ビットとか8ビットとか16ビットとか32ビットとかコアな状況でも変わると思う。

9 :デフォルトの名無しさん:2014/08/02(土) 00:09:39.32 ID:qRelH0Iu
ワイドはPCの内部で、Javaや.netが使っているUTF-16だけで、
マルチバイトはそれら以外すべてで、UTF-8など

10 :デフォルトの名無しさん:2014/08/02(土) 00:19:54.08 ID:TsFH3rUF
UTF-32!UTF-32!

11 :デフォルトの名無しさん:2014/08/02(土) 00:31:36.16 ID:aXuilSuQ
今はもう固定長でないUTF-16もwideとよばれてるんじゃよ
ちなみにwchar_tはWindows以外の大半は4バイトな

12 :デフォルトの名無しさん:2014/08/02(土) 00:33:15.75 ID:QyMYNts0
utfのオリジナルはstarの文字コードセットな

13 :デフォルトの名無しさん:2014/08/02(土) 02:02:12.74 ID:LgAU6+Tw
>「文字セット」であって文字コードではありませんよね

いいえ、文字セットではありません。
文字コードであり、より正確にはテキストエンコーディングです。

日本語Windowsの場合、
 MBCS: 文字集合=Windows-31Jのアレ、エンコーディング=いわゆるシフトJIS
 ワイド: 文字集合=Unicodeのアレ、エンコーディング=UTF-16

14 :デフォルトの名無しさん:2014/08/02(土) 02:06:07.54 ID:yAhCEHKv
一文字の確保メモリサイズが常に一定がワイドだろ。

15 :デフォルトの名無しさん:2014/08/02(土) 02:08:53.66 ID:ihMKWWqt
1文字に使うバイト数が1バイトや2バイトと複数あるのがマルチ
1文字に使うバイト数が2バイトのみなのがワイド
Windows以外は知らない

16 :デフォルトの名無しさん:2014/08/02(土) 02:27:56.74 ID:qRelH0Iu
ワイドには4バイトのサロゲートペアもあるから、
2・4バイト

マルチバイトは、3〜6バイトで(もっと長いのもある?)、
3バイトが多い

17 :デフォルトの名無しさん:2014/08/02(土) 02:29:47.48 ID:LgAU6+Tw
>>6
>文字コードの指定が見当たらず

Visual C++の設定がユニバーサル文字の場合、
コンパイル時にソースはUTF-8またはシフトJISの仮定の下に解釈され
charはシフトJISに、wchar_tはUTF-16に、TCHARはUTF-16に変換される。
Visual C++の設定がマルチバイト文字の場合、
コンパイル時にソースはUTF-8またはシフトJISの仮定の下に解釈され
charはシフトJISに、wchar_tはUTF-16に、TCHARはシフトJISに変換される。
いずれも実行時はwchar_tの文字はそのままで、
それ以外はコントロールパネルの言語の設定で指定した文字コードで解釈される。

18 :デフォルトの名無しさん:2014/08/02(土) 07:58:58.76 ID:uphwpvI8
>ワイドには4バイトのサロゲートペアもある
こういう糞レスを見るとUnicodeがencoding formとencoding schemeの
概念を別に分離したのがいかに大切だったかを実感する

19 :デフォルトの名無しさん:2014/08/02(土) 09:08:07.32 ID:2F7KFjBZ
合成文字

20 :6:2014/08/02(土) 15:23:13.72 ID:4nNjqrDL
ありがとうございました。

21 :デフォルトの名無しさん:2014/08/03(日) 03:10:05.25 ID:AqnF5WVU
クラスを使用する時にこのメンバ関数は絶対1回だけ呼ばれるって場合
コンストラクタで自動で呼ぶってのはあり?

22 :デフォルトの名無しさん:2014/08/03(日) 03:23:55.71 ID:rNEZw/2H
はい

23 :デフォルトの名無しさん:2014/08/03(日) 19:38:15.30 ID:ea9Ca7zy
こんばんは
Visual studio 2013を入れたのでC++のハローワールドをテストしてみたのですが
ビルドが上手くいかず、ヘッダファイルが開けませんと表示されます

2010であればプロジェクトのヘッダファイルの所に使用したいヘッダファイルを入れて、ソースファイルでインクルードしてやればそれで良かったと記憶しています

初期設定を何もしていないのですがそれが原因でしょうか?ネットで調べて見ても情報が得られず困っています

解決方法を知っている方、教えてくれませんか?

24 :デフォルトの名無しさん:2014/08/03(日) 19:41:58.53 ID:yCTzYi3M
関数の引数の参照が良く分らないのですが、
とりあえず全ての引数に&を付けておくと良いでしょうか?

void func(int &i, double &d, std::string &str)
{
 // ...
}

void main()
{
 int i;
 double d;
 std::string str;
 func(i, d, str);
}

25 :デフォルトの名無しさん:2014/08/03(日) 19:47:43.07 ID:lrcEZtj9
>>23
エラを張れ

>>24
実質的に*を付けないポインタみたいなもの。

26 :デフォルトの名無しさん:2014/08/03(日) 20:09:02.39 ID:ea9Ca7zy
>>25
【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚
一応ヘッダファイルです↓
http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h

27 :デフォルトの名無しさん:2014/08/03(日) 20:28:26.74 ID:F9uiJQaz
>>26
ヘッダのパスが通ってないだけでしょ

28 :デフォルトの名無しさん:2014/08/03(日) 20:31:49.84 ID:dJ8y5LvH
>プロジェクトのヘッダファイルの所に使用したいヘッダファイルを入れて
ヘッダファイルが居る位置はソースと同じフォルダじゃないと、
(デフォルトでは)ダメなんじゃなかったっけ?

VSのヘッダーファイルのツリーからファイルの追加で、
ソースがおいてあるフォルダとは余所のフォルダのファイルも指示できるけど
そこへは基本的にパス通ってないから include "" では見えない

29 :デフォルトの名無しさん:2014/08/03(日) 20:38:56.48 ID:dJ8y5LvH
端的に
 SRC_DIR/hello_wordl.cpp
 SRC_DIR/std_lib_facilities.h
なら通ると思う

 SRC_DIR/hello_wordl.cpp
 SRC_DIR/INCLUDE/std_lib_facilities.h
という位置関係とか
 SRC_DIR/hello_wordl.cpp
 INCLUDE_DIR/std_lib_facilities.h
という位置関係とかで

そのソリューション指示だと依存関係は IDE 管理下で確認できるけど、
コンパイラには ファイル名 から ファイルのある位置を知る術が無いので、
デフォルトのパスから探索して終了する

30 :デフォルトの名無しさん:2014/08/03(日) 20:54:26.56 ID:eFW9hWaw
バカに複雑な事指示しても理解出来ない。
ヘッダーファイルを新規作成して、std_lib_facilities.hの中身をコヒぺ

31 :デフォルトの名無しさん:2014/08/03(日) 21:20:15.57 ID:AqnF5WVU
自分でどこにあるかわかってんなら相対パスでもええやん
#include "..\〜\std_lib_facilities.h"

32 :デフォルトの名無しさん:2014/08/03(日) 21:23:54.44 ID:ea9Ca7zy
>>27
>>28
>>29
ありがとうございます、おかげで解決しました。パスが通ってませんでした。
(全く別の所にあってもIncludeの後にヘッダファイルのパスを書くと出来ました!
ソースファイルの上の階層にヘッダファイルがある場合は../../の表現を使っても出来ました!)

>>30
それは(´・_・`)最終手段ですね(´・_・`)

33 :デフォルトの名無しさん:2014/08/03(日) 21:24:55.99 ID:ea9Ca7zy
>>31
ありがとうございます、それで出来ました!

34 :デフォルトの名無しさん:2014/08/03(日) 21:44:32.68 ID:wVcpRmRy
いや、むしろ安定の絶対パスだろ

35 :デフォルトの名無しさん:2014/08/03(日) 22:50:17.34 ID:1KfsaatJ
問題原因の切り分けをするときはまず絶対パスだな

36 :デフォルトの名無しさん:2014/08/04(月) 00:16:53.93 ID:cek/HGoY
>>35 切り分けできる男
>>34 切り分けできない男

37 :デフォルトの名無しさん:2014/08/04(月) 02:14:34.43 ID:LgeiXwf0
クラスをnewして失敗した時の動作はどうするのがポピュラー?
・if( == NULL)
・try catch
・他(プロセス強制終了etc)

38 :デフォルトの名無しさん:2014/08/04(月) 02:21:35.90 ID:cy2se7Pq
そもそもなんでnewするんだ?
先ずはそこからだ。

39 :デフォルトの名無しさん:2014/08/04(月) 02:36:26.93 ID:VfXJ4NBK
newの失敗は、メモリ不足などのシステム要件のエラーだから、
プログラムでどうこう出来るものではない

メモリを多くするなど、システム要件を満たす環境に、
変えてもらうしかない

40 :デフォルトの名無しさん:2014/08/04(月) 02:38:52.49 ID:NH51Dz+L
限界はあるけど使用量を少なくするように工夫するぐらいはあるだろ。

41 :デフォルトの名無しさん:2014/08/04(月) 03:23:26.97 ID:LgeiXwf0
ありがとう

>>38
論点とずれてる気がするが
WM_DESTROYで使用できなくなる機能Aをデストラクタで使用する場合
static宣言してるとWM_DESTROY後にデストラクタが呼ばれて機能Aを使用しようとして停止する
それを回避するために
deleteクラス
→機能A解放
ってやるようにしてる

>>39-40
つまり基本的には失敗=プロセス異常終了でもokと言う事でいいのかな

42 :デフォルトの名無しさん:2014/08/04(月) 05:36:16.73 ID:VfXJ4NBK
OSにも、2GB以上などのメモリの要件があるのと同じで、
使用条件を満たしていなければ、どこかでシステムダウンする

ただし、プログラムのバグや、何万回も再帰したのなら、
プログラマーの責任

43 :デフォルトの名無しさん:2014/08/04(月) 06:05:08.09 ID:hDvHywGx
メモリは使い切ってなくても
メモや断片化で希望のサイズが
確保できなくて失敗することがある

44 :デフォルトの名無しさん:2014/08/04(月) 06:23:01.79 ID:UAhHAw7M
>>37
> クラスをnewして失敗した時の動作はどうするのがポピュラー?

って聞かれたら、ファイルをほぞんするとか、再起動して回復を図るとか、ログ取ってそのまま終了とか... って答えるんだが。
なので、

> ・if( == NULL)
> ・try catch



> ・他(プロセス強制終了etc)

は、レベルが違うように思う。

45 :デフォルトの名無しさん:2014/08/04(月) 12:20:39.89 ID:dahEKpKn
>>24
カメレス
怖くないっすか

46 :デフォルトの名無しさん:2014/08/04(月) 13:38:12.42 ID:FbNkdJ2c
少なくとも「プロセス終了。ハンドルされない例外」とユーザーに表示されるのと
「エラーが発生しましたお問い合わせください」と表示されるのでは
ユーザーの怒りの度合いが違う。

どうしようもないので何をしてもいいというのは
犯罪は犯す奴が悪いので警察は要らないという程度に乱暴な発想

47 :デフォルトの名無しさん:2014/08/04(月) 15:44:51.27 ID:hieQ0nGz
何をしてもいいとはだれも言ってなくないか
プログラム側でメモリ不足をどうしようもないってのは、
カギを閉めても窓を割られたらどうしようもないから、その時は警備会社と警察に任せるよという程度に普通の発想だと思うが

つーかエラー表示をどうしたらいいかって質問でもないしな

48 :デフォルトの名無しさん:2014/08/04(月) 15:59:27.42 ID:jcCYniN9
問題が発生した瞬間のプログラムの動作
について質問している>>37にたいして
アスペは
「メモリを増やすしかない」
「警備会社に任せて事後処理するのが普通」
などとずれたことを言い出すから困る

49 :デフォルトの名無しさん:2014/08/04(月) 20:48:03.69 ID:UAhHAw7M
>>48
>>37 の質問自体がちょっとずれてるから無問題

50 :デフォルトの名無しさん:2014/08/04(月) 21:43:04.51 ID:4x8QxR6V
Windowsで自作のC++のライブラリで、関数実行時のエラーコードをどうするか
悩んでいます。とりあえずwinerror.hで定義されているエラーコードを
そのまま流用する方式で行こうかなと思うのですが、どうでしょうか?
return ERROR_SUCCESS;
みたいに。
他に良い方法ありますか?

51 :デフォルトの名無しさん:2014/08/04(月) 21:47:18.34 ID:NH51Dz+L
>>50
Windows意外で使わないならそれでもいいんじゃない?

52 :デフォルトの名無しさん:2014/08/04(月) 22:00:41.67 ID:4x8QxR6V
>>51
レスありがとうございます。
Windows以外でも使う場合は、どうすればよいでしょうか?

53 :デフォルトの名無しさん:2014/08/04(月) 22:02:28.90 ID:LgeiXwf0
ありがとう

>>42,43,44,46,47
できなかったらその時点でできる終了処理と通知して終了する事にするわ

>>44,49
> ・他(プロセス強制終了etc)
ってのは自分が思いつかない何かがあるかも知れないから書いただけで他意は無いよ
プロセス強制終了はetcつけたからわかると思ったけどあくまで例えね

54 :デフォルトの名無しさん:2014/08/04(月) 22:34:49.43 ID:UAhHAw7M
>>53
いや、例なのはわかってる

if( ) とか例外はメモリー確保失敗を検出する方法で、プロセス終了はそのあとの動作でしょ?

なので if( ) でチェックしてプロセス終了させるとかのように使うから、選択肢として並べるのはおかしい。

みんな親切だから、多分確保失敗時にどうするのが普通なのかを聞きたいんだろうなと、推測して答えてるんだろうと思う。
だから、誰も if( ) とか try に触れてないでしょ。

もしプロセス云々書いてないなら、好きにしろとか言われて終わってたと思うぞ。

55 :デフォルトの名無しさん:2014/08/04(月) 22:36:00.54 ID:eWAxusEw
【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚

56 :デフォルトの名無しさん:2014/08/04(月) 22:55:06.04 ID:LgeiXwf0
>>54
○○だからifの方が〜
××だからtry catchの方が〜
異常終了前は△△した方が〜
ってのを期待して3つ書いたけど

・判定は(if) or (try catch) どっちが主流か
・判定後から終了までの処理はどんな感じが主流か
って感じの書き方の方がよかったかな

3つから選んでって意味では無かったすまん

if or tryは好きにでいいのかありがとう

57 :デフォルトの名無しさん:2014/08/04(月) 23:17:17.44 ID:zBF47n0e
少なくともC++ではメモリ確保出来ないときにnullポインタチェックは(new( nothrow)使うのが)一般的ではないな。

58 :デフォルトの名無しさん:2014/08/05(火) 05:27:27.61 ID:B8XLPQcD
デストラクタが走るタイミングを制御したくてnewしたいだけなら、
そもそも確保に失敗することもないような。
それはさて、フェーズに分けて考えるなら、こんなもんだろ。

・検出
try catch

・対処
可能ならダイアログを出して異常終了

59 :デフォルトの名無しさん:2014/08/05(火) 05:30:00.42 ID:ANChekkV
殺人トラクターに見えた

60 :デフォルトの名無しさん:2014/08/05(火) 23:23:02.28 ID:P2cYkmKJ
VBScriptファイルをC++で実行したいのだが、くぐっても良く分らないのだが、
そもそも可能なのか知りたいのだが、可能な場合デバッガーでステップ実行
出来るのかな?

61 :デフォルトの名無しさん:2014/08/05(火) 23:31:11.10 ID:JYX/3P/h
>>60
たぶん自分が何をしたいのかがよくわかってないと思う

ところでくぐるってなんだ?ググるのことか?

62 :デフォルトの名無しさん:2014/08/05(火) 23:39:31.76 ID:AfbB56Nf
VBSをJavaバイトコードかLLVMに翻訳して処理系を作れば?

63 :デフォルトの名無しさん:2014/08/05(火) 23:44:05.44 ID:AfbB56Nf
>>60
「コンパイラ・スクリプトエンジン」相談室16
http://peace.2ch.net/test/read.cgi/tech/1405822579/

64 :デフォルトの名無しさん:2014/08/05(火) 23:48:46.07 ID:P2cYkmKJ
>>61,62,63
レスありがとさん。
いや、そんな高度な事したいのではなく(やる知識もないので)、
やりたいのは
string s1="VBScriptファイルの1行目";
string s2="VBScriptファイルの2行目";
string s3="VBScriptファイルの3行目";
...
execute_VBScript(s1);
execute_VBScript(s2);
execute_VBScript(s3);
...

的な感じでいいんだけれど。

65 :デフォルトの名無しさん:2014/08/05(火) 23:59:50.28 ID:AfbB56Nf
http://codezine.jp/article/detail/1827

これはJScriptの場合だが(以下略

66 :デフォルトの名無しさん:2014/08/06(水) 00:10:58.30 ID:hW+yaDMz
>>65
おお、サンキュウ。このページは初めて見る。
ちょっと試してみるわ。

67 :デフォルトの名無しさん:2014/08/06(水) 00:28:06.25 ID:hW+yaDMz
それは砂丘の座敷わらしだろ

68 :デフォルトの名無しさん:2014/08/06(水) 00:29:28.55 ID:hW+yaDMz
ああ、間違えた。

69 :デフォルトの名無しさん:2014/08/06(水) 00:43:44.34 ID:ejJORmgK
なんだこの座敷童。

70 :デフォルトの名無しさん:2014/08/06(水) 01:08:15.49 ID:hW+yaDMz
ちょっと試してみたのだけれど、JScript版をVBScriptに
移植する能力が無いので困っている。

71 :デフォルトの名無しさん:2014/08/06(水) 02:24:54.75 ID:Rc+eyo3S
DLL内の関数で
class {
public:
void func(void);
};
このfuncをexeから利用する事ってどうやればできる?

それともfuncをクラス外に出すのが普通?

72 :デフォルトの名無しさん:2014/08/06(水) 03:00:47.98 ID:Wb6IUvWi
http://msdn.microsoft.com/ja-jp/library/81h27t8c.aspx
vsならこれでできる

73 :デフォルトの名無しさん:2014/08/06(水) 03:28:23.21 ID:q+H8JIOY
>>72の方法って、.libでエクスポートする場合に有効な方法で、
.DEFなどによる名前でエクスポートする場合には使えないんじゃなかったっけ?

.libでエクスポートする場合DLLがアップデートされDLL内の(classのメンバ)関数の
アドレスが変わったらそれを使うEXE(やDLLなど)もリビルドが必要。

アプリのプラグインDLLやWindowsUpdateなど、DLLのみ差し替えても
EXE(やDLLなど)をリビルドせずそのまま使える "名前でのエクスポート" で
DLLを実装したいなら、仮想関数テーブルを挟むのがポイントですね。

※              ↓「サクラ」を「sakura」に変えてください(sakuraのURLを書こうとすると「さくらが咲いてますよ。」で書けない)
http://blackscarecrow.サクラ.ne.jp/junk/C&C++/PP03.htm
のサンプルコードが分かりやすいかも。

間違ってたらすみません。

74 :デフォルトの名無しさん:2014/08/06(水) 07:17:14.75 ID:PEaAzLNP
>アップデートされDLL内の(classのメンバ)関数の
>アドレスが変わったらそれを使うEXE(やDLLなど)もリビルドが必要

んなわけねーだろ

75 :デフォルトの名無しさん:2014/08/06(水) 08:24:14.21 ID:3bVUJ5Fe
>>73
.defはたしかにC++では使えんが、dllexportならC++のクラスやメソッドも名前がexportされるから
別に問題じゃない。
#コンパイラの混在はできないが。
逆に仮想関数はvtable内の位置が変わるとまずいから、よくわかってないなら避けたほうが無難。

76 :デフォルトの名無しさん:2014/08/06(水) 08:42:42.67 ID:sXmmxXua
コンパイラの混在はけっこう不安要素だね
古いVSに新しいVSで作ったDLLが結合できなかったりしそう

77 :デフォルトの名無しさん:2014/08/06(水) 08:43:27.11 ID:Wb6IUvWi
そういう時こそCOMですよ

78 :デフォルトの名無しさん:2014/08/06(水) 13:48:02.21 ID:hW+yaDMz
Win7のVS2013のC++で
MessageBox()を表示した時にタスクバーに表示されるアイコンを
指定する方法ありますか?

79 :デフォルトの名無しさん:2014/08/06(水) 13:50:22.52 ID:7Yid+G+a
メッセージボックスごときがタスクバーに顔を出さないでください

80 :デフォルトの名無しさん:2014/08/06(水) 13:53:43.62 ID:hW+yaDMz
>>79
普通にやったらタスクバーにアイコンが出るんですが。
皆さん、出ませんか?

81 :デフォルトの名無しさん:2014/08/06(水) 15:56:18.98 ID:N2WBO7yk
でない。
hWndを0にするとアプリと重なって出るけど…

82 :デフォルトの名無しさん:2014/08/06(水) 16:10:52.00 ID:WSzGEN/V
質問失礼します。
入力画像が、複数あるテンプレート画像の中のどの画像と最もマッチングしているかをSURFを使って調べるにはどうしたらよいでしょうか。
よろしくお願いします。

83 :デフォルトの名無しさん:2014/08/06(水) 16:12:58.71 ID:3t2H8u7I
MessageBoxに限らず、システムメニュー持ったwindow で
オーナーが NULL なら、タスクバーに積み重なってくけど、
非NULLなら タスクバー上には出ない

84 :デフォルトの名無しさん:2014/08/06(水) 16:19:36.33 ID:3t2H8u7I
>>82
ここいらへん http://aidiary.hatenablog.com/entry/20091102/1257167398
から続けて読むともしかしたら

入力画像から得られる 特徴量ベクトル郡Vs
テンプレート画像の 特徴量ベクトル郡Vt x テンプレートの種類分

特徴量ベクトルのつきあわせ

85 :デフォルトの名無しさん:2014/08/06(水) 20:02:55.18 ID:hW+yaDMz
アプリ実行時に使う2キロバイト程のテキストデータを
現状はテキストファイルから読み込んでいる
のですが、それだとまる見えなので、プログラム中に
入れてしまいたいのですが、
char data[]="テキストファイルの中身をここに貼り付ける"
みたいな方法以外にお勧めな方法有りますか?

86 :デフォルトの名無しさん:2014/08/06(水) 21:45:58.99 ID:MTWJpzk3
拡張子を.unkoにする

87 :デフォルトの名無しさん:2014/08/06(水) 22:21:35.52 ID:1M326YIX
>>85
Windows ならまずリソースに入れることを検討するのでは?

88 :デフォルトの名無しさん:2014/08/06(水) 22:52:26.07 ID:CTQUcynJ
データ=リソース
という短絡的発想がバカっぽい

89 :デフォルトの名無しさん:2014/08/06(水) 23:03:24.22 ID:Rc+eyo3S
非難だけして解決策は無いレスは気にしなくていいからな

90 :デフォルトの名無しさん:2014/08/06(水) 23:08:55.87 ID:PY3MTauC
て言うか、プログラムと一体化 ⇒ リソース は珍しくない
>>88 は観点がちょっとおかしい

91 :デフォルトの名無しさん:2014/08/06(水) 23:53:57.11 ID:l8HQ1jfJ
>>89
ブーメラン乙

92 :デフォルトの名無しさん:2014/08/07(木) 00:38:43.18 ID:zC3TsviY
>>88>>90は無限ループ

93 :デフォルトの名無しさん:2014/08/07(木) 01:19:10.54 ID:1cACSwRn
>>92
ループの意味がわからん

>>89>>91 ならまだしも

94 :デフォルトの名無しさん:2014/08/07(木) 01:54:45.98 ID:3T9P4myy
>>85
つ ユーザー定義リソース
何でも抱けるよ

95 :デフォルトの名無しさん:2014/08/07(木) 08:15:40.74 ID:OmP50o4u
>>74,75
そうなんですか。訂正ありがとう。

>>75
名前がエクスポートされるって言っても、
「zzz@@aaa」とか記号の並んだ文字列として…じゃなかったかな?
あと、stdcallにすればコンパイラ混在しても大丈夫では?

たびたびスミマセン。

96 :デフォルトの名無しさん:2014/08/07(木) 11:01:52.77 ID:7UtLjkdT
関数ポインタpFuncがNULLならpDummyFuncを呼びたいんだけど
pDummyFuncがクラスのメンバ関数の場合どうすればいいかな?

97 :デフォルトの名無しさん:2014/08/07(木) 11:33:51.91 ID:JKDdryz1
みなさんありがとうございました。
リソースファイルでうまく行きました。

98 :デフォルトの名無しさん:2014/08/07(木) 11:42:42.26 ID:qKlYqGRI
>>96
std::functionで

99 :デフォルトの名無しさん:2014/08/07(木) 13:03:07.98 ID:7UtLjkdT
>>98
ありがとう

関数ポインタpfuncがNULLの場合何もしないようにするのはどうすればいいかな
typedef VOID (WINAPI *Sample)(VOID)
((Sample)pfunc)()
この場合
if(pfunc == NULL) {
((Sample)pfunc)()
}
とするしかない?

というのは呼ぶ時に分岐するんじゃなくて内部で分岐させるために1つ関数挟んで
BOOL check(result, pfunc)
{
if(pfunc == NULL) {
return FALSE;
}
result = pfunc;
return TRUE;
}

if(((Sample)check(&result, pfunc))() == FALSE){
//nullだった
}
どうにかしてこんな感じにできないかな

100 :デフォルトの名無しさん:2014/08/07(木) 13:17:50.40 ID:7UtLjkdT
前半
正 if(pfunc != NULL)
誤 if(pfunc == NULL)

101 :デフォルトの名無しさん:2014/08/07(木) 13:20:19.39 ID:gf97lcsK
何したいのかわからん
check()の返り値はboolでしょ?
nullチェックはできるようだし何を聞きたいのかも分からん

102 :デフォルトの名無しさん:2014/08/07(木) 14:18:26.01 ID:7UtLjkdT
>>101
わかりにくくてごめん

やりたい事としては
check(result, pfunc) // 引数を指定してpfuncを渡したい
→pfuncがNULLならFALSEを返す
→pfuncがNULLじゃなければpfuncを実行してpfuncの戻り値をresultへ格納してTRUEを返す
でこのpfuncの戻り値・引数の型や数は一定ではない

こんな場合checkを呼ぶ時点でpfuncの引数を指定するのはどうやったらできる?
自分でも意味わからんようになってきたわ

103 :デフォルトの名無しさん:2014/08/07(木) 16:46:06.51 ID:7QbgVQGZ
すごく乱暴な方法だけど、マクロ経由のインライン展開かねぇ
http://codepad.org/W8080HvO

制限: 関数ポインタ部分は リテラルの 0 や NULL を渡せない 変数経由でよろ

104 :デフォルトの名無しさん:2014/08/07(木) 16:56:01.26 ID:7QbgVQGZ
追補: pfunc が 戻り void の関数ポインタ になるのはだめー

105 :デフォルトの名無しさん:2014/08/07(木) 18:58:47.05 ID:gmnku58x
C++なら可変個引数テンプレート一択
Cなら可変個引数のマクロだろ
あVisual C++には無いんだっけ?

106 :デフォルトの名無しさん:2014/08/07(木) 21:02:01.27 ID:7UtLjkdT
>>103
ありがとう!

>>105
VC++でも
macro(value1, ...) sample(value1, __VA_ARGS__)でできるよ

107 :デフォルトの名無しさん:2014/08/07(木) 23:20:45.31 ID:yuOaZbMp
>>95
「マングリング」でググれ。
マングリング規則はコンパイラごとに違うから混在はできないものと思っていたほうがいい。
呼び出し規約の話とはまた別だ。

108 :デフォルトの名無しさん:2014/08/07(木) 23:33:38.33 ID:PVmoVqTz
引数のスタックへの詰み順
(スタックの巻き戻しを呼び出し側でやるか、呼び出され側でやるか)
まだ何かあるんだろうな 呼び出し規約

109 :デフォルトの名無しさん:2014/08/07(木) 23:39:20.38 ID:GYiGBmdZ
64bitになって情報が錯綜したことで呼び出しはさらにカオスに

110 :デフォルトの名無しさん:2014/08/08(金) 00:45:04.00 ID:B23vVFp/
64bitはfastcall固定だろ?

111 :デフォルトの名無しさん:2014/08/08(金) 00:51:34.75 ID:m6I/Kwd1
バカは新たに覚えることが一つ増えることが大きなストレスなので

112 :デフォルトの名無しさん:2014/08/08(金) 01:39:02.11 ID:KHsP8XKA
__vectorcallは別物だっけ?

113 :デフォルトの名無しさん:2014/08/08(金) 22:48:59.68 ID:x6pgPkV/
c++での重力多体問題のプログラムについての質問です。
物体同士の距離を計測し、その間に働く力を調べるという単純なものです(計算回数は物体数の二乗になる)。
このプログラムで扱える物体数の限界を知りたいのです。

パソコンのスペックや限界をどう決めるかにも依ると思うので物体数と計算時間の関係式を教えてくれませんか?

一応自分でも考えてみました
計算時間=(物体数^2 × 1ループのステップ数)/CPUのクロック数
で求めることが出来そうだと考えたのですが、四則演算やその他演算などのステップ数が分かりませんでした。

114 :デフォルトの名無しさん:2014/08/08(金) 23:53:46.60 ID:01BFu9Gu
>>113
計算式にもよるしCPUの種類にもよる。
実験して計測すれば、1ループあたりの時間がわかるから、
あとは物体数から全体の時間が推定できるでしょ。

115 :デフォルトの名無しさん:2014/08/08(金) 23:58:20.12 ID:gKCHEkZ/
try {
}
catch(int i, char *&s) {
}

こんな感じで複数の引数で例外をcatchってできる?
できるとしたらthrowする時どう書けばいい?

116 :デフォルトの名無しさん:2014/08/09(土) 00:36:57.87 ID:kN50ePbr
>>115
出来ない。
std::exception派生してメンバに入れろ。
tupleで括ってthrowも出来るけどそもそもstd::exeption以外をthrowするのはあまりよろしくない。

117 :デフォルトの名無しさん:2014/08/09(土) 00:43:50.18 ID:6vo/MVse
>>116
ありがとう

118 :デフォルトの名無しさん:2014/08/09(土) 04:44:32.02 ID:6vo/MVse
こんな感じで可変引数を展開せずにそのまま別の関数の引数にするってできる?
func(format, ...) {
 func2(format, ...);
}

119 :デフォルトの名無しさん:2014/08/09(土) 04:52:21.78 ID:RARSJSh7
もちろん

120 :デフォルトの名無しさん:2014/08/09(土) 06:02:40.10 ID:AkXpz4Sp
いいえ、できません

121 :デフォルトの名無しさん:2014/08/09(土) 06:03:29.08 ID:sPU18Xtd
>>118
func2()がvprintf()などのようにva_listを受ける関数ならできる。
逆に言えば、func2()のプロトタイプがfunc1()と同じならできない。
func1()内で環境依存の方法を使えば、或いはできるかも知れんが。

122 :デフォルトの名無しさん:2014/08/09(土) 06:38:12.95 ID:6vo/MVse
>>121
ありがとう

123 :デフォルトの名無しさん:2014/08/09(土) 06:38:39.99 ID:tuwrl1wM
>>116
>std::exeption以外をthrowするのはあまりよろしくない

理由は?

124 :デフォルトの名無しさん:2014/08/09(土) 06:49:28.67 ID:kN50ePbr
>>123
受け取る側が対処しづらい。

125 :デフォルトの名無しさん:2014/08/09(土) 08:25:13.71 ID:s/pNwkYb
wchar_tに対応してない糞なstd::exceptionは使う気がしません

126 :デフォルトの名無しさん:2014/08/09(土) 09:13:14.64 ID:kN50ePbr
wchar_tってなににつかうの?

127 :デフォルトの名無しさん:2014/08/09(土) 09:40:59.82 ID:Vxx37Jb0
そんなにwchar_tが必要なら
派生して対応させればいいだろう。

128 :デフォルトの名無しさん:2014/08/09(土) 10:12:48.97 ID:+T7xdrkU
> 受け取る側が対処しづらい。

意味わからん、>>124 が対処できないだけじゃね?

>>125
ほんこれ、そろそろなんとかしてほしいもんだ。

129 :デフォルトの名無しさん:2014/08/09(土) 12:10:41.36 ID:aGEftFoO
>>114
ありがとう

130 :デフォルトの名無しさん:2014/08/09(土) 12:13:49.49 ID:Vxx37Jb0
完全に中で閉じて使う分にはどうでもいいんじゃね。
まあそういうつもりの仕様すら公開されていない例外が、間違って外に漏れてきたら
取り合えずstd::exceptionで受けてwhatで
素性を見てみたくなるな。

131 :デフォルトの名無しさん:2014/08/09(土) 12:22:15.53 ID:gYP0Auob
今更wchar_t使うメリットって何よ

132 :デフォルトの名無しさん:2014/08/09(土) 12:23:23.89 ID:RARSJSh7
今更char使うメリットって何よ

133 :デフォルトの名無しさん:2014/08/09(土) 12:31:22.87 ID:gYP0Auob
>>132
wchar_tよりマシ。

134 :デフォルトの名無しさん:2014/08/09(土) 12:32:58.93 ID:Vxx37Jb0
utf-8で扱うのが楽すぎて

135 :デフォルトの名無しさん:2014/08/09(土) 12:39:57.76 ID:gH6dyz5c
wchar_tの_tって何?
wchar のほうが良くないか

136 :デフォルトの名無しさん:2014/08/09(土) 12:41:59.21 ID:RXuWJHc/
アプリケーションは外部(ファイル/通信)とのやりとりはUTF-8でして
内部処理はwchar_tの方が扱いやすい

137 :デフォルトの名無しさん:2014/08/09(土) 12:44:27.16 ID:gYP0Auob
char32_tとかならメリットわかるけど、
wchar_tは一文字の長さ固定で扱えない環境あるし。Windowsとか。
そんな環境でも固定長だと思って途中でぶった切るバカが必ずいるし。
固定長で扱える長さの環境と固定長で扱えない長さの環境が存在してるからどう扱えばいいのかわからないんだけど。wchar_t推してる連中はどうしてんの?


>>135
ググれ

138 :デフォルトの名無しさん:2014/08/09(土) 12:46:46.07 ID:Vxx37Jb0
合成文字とか言う仕組みのせいで
wchar_tでも結局手間は変わらないような

wchar_tが16bitなwindowsだとサロゲートペアで日本語限定でも問題出てくるし

139 :デフォルトの名無しさん:2014/08/09(土) 12:58:27.92 ID:RARSJSh7
合成文字なんて使うやつが悪い
問題になってから考えればいい

140 :デフォルトの名無しさん:2014/08/09(土) 12:58:32.23 ID:RXuWJHc/
文字の管理単位がUnicodeのコードポイント単位なのとバイト単位なのでは
扱いやすさがぜんぜん違うんだが
可変長をいいわけにして思考停止してね?

141 :デフォルトの名無しさん:2014/08/09(土) 13:00:52.29 ID:gH6dyz5c
>>137
_tでググっても分からんかった。
stringに対しwstringなら
charに対しwcharの方がスッキリする。
それにタイプする時にアンダスコア入れにくいし。
一体誰がこんなヘンテコなwchar_tなんて名前を
付けたのかな?

142 :デフォルトの名無しさん:2014/08/09(土) 13:08:06.07 ID:gYP0Auob
>>140
UTF-16だとコードポイント単位ですらないって言ってるんだけど。
どうやって1コードポイントを16Bitで表すんだい?

143 :デフォルトの名無しさん:2014/08/09(土) 13:38:40.81 ID:+T7xdrkU
>>141
> 一体誰がこんなヘンテコなwchar_tなんて名前を付けたのかな?

size_t って決めた奴に言ってくれ

144 :デフォルトの名無しさん:2014/08/09(土) 14:38:48.88 ID:gRSnwdty
後付である以上
既存のコードとかぶらないために
あえて選りすぐりのへんてこな名前をつけざるを得ない

145 :デフォルトの名無しさん:2014/08/09(土) 14:44:17.42 ID:gH6dyz5c
俺だったら
whar
にするな。

146 :デフォルトの名無しさん:2014/08/09(土) 15:00:35.46 ID:gYP0Auob
型名を_tで終わらせるのはPOSIXで予約されてるから付けやすいのよ

147 :デフォルトの名無しさん:2014/08/09(土) 16:26:58.59 ID:kN50ePbr
>>140
思考停止して固定長だと思い込んでたことを指摘された気持ちはいかがですか?

148 :デフォルトの名無しさん:2014/08/09(土) 18:56:27.64 ID:ogb0Lg1q
入力された段階でサロゲートペアを弾けばあとは固定長で扱えるから楽だな

149 :デフォルトの名無しさん:2014/08/09(土) 22:23:42.91 ID:XnzTvHrT
>>143
なんか、わらったよ。

おまえらはsize_t 、wchar_tってなんて読んでいる?
サイズテー、だぶりゅーチャーてー?

150 :デフォルトの名無しさん:2014/08/09(土) 22:26:34.63 ID:MOaw4cY+
さいずてぃー
うちゃーてぃー

151 :デフォルトの名無しさん:2014/08/09(土) 23:01:51.78 ID:aGEftFoO
「ティー」じゃなくて「テー」って言う所に老いを感じる

152 :デフォルトの名無しさん:2014/08/09(土) 23:19:07.91 ID:Vxx37Jb0
いやテーはともかく後は普通の読みなんじゃ

153 :デフォルトの名無しさん:2014/08/10(日) 03:00:14.18 ID:/shRHOr1
>>151
聞き間違いを避ける為にあえてそう発音する人もいるらしい

154 :デフォルトの名無しさん:2014/08/10(日) 03:44:09.58 ID:eHhQsmny
B ビー
D デー
みたいなもんだな

charのポは半角の|と被るとかあるから
wchar_tに変換してからのがいい

155 :デフォルトの名無しさん:2014/08/10(日) 06:49:28.06 ID:9YqDJ7QI
>>154
char=MS932として話されても

156 :デフォルトの名無しさん:2014/08/10(日) 06:57:04.45 ID:9YqDJ7QI
ここって環境依存OKなんじゃなくて、一つの環境しか知らない人が多いだけだな。

157 :デフォルトの名無しさん:2014/08/10(日) 07:20:18.40 ID:eHhQsmny
「とか」って書いてんのに突っ込まれても

158 :デフォルトの名無しさん:2014/08/10(日) 08:43:19.26 ID:YKEPe6r6
>>107
なるほど。C++でエクスポートされる関数名が暗号化みたいにされるのは
「マングリング」と呼ぶのですね。ありがとうございます。

やはり素の名前で関数・変数やclassをエクスポートしたければ
.DEF使うべきですね。

159 :デフォルトの名無しさん:2014/08/10(日) 11:31:57.69 ID:qvEZGcVl
>>151
ドイツ語読みじゃ、霧

160 :デフォルトの名無しさん:2014/08/10(日) 12:05:22.40 ID:lKd2tZDO
ドイツ語読みでキャラテー?w

161 :デフォルトの名無しさん:2014/08/10(日) 22:50:54.62 ID:qjKPAjiz
今、数値を計算しファイルに出力するプログラムを作っています

162 :デフォルトの名無しさん:2014/08/10(日) 23:01:10.90 ID:YfIekyq6
>>160
学生か?

163 :デフォルトの名無しさん:2014/08/10(日) 23:21:57.97 ID:qjKPAjiz
>>161です
途中で切れていました

今、数値を計算しファイルに出力するプログラムを作っています
計算過程に -3/2乗が出てくるのですが、どう書くのが一番良いのでしょうか?

あと、計算結果が少数で出てきます
fixedで小数点以下6桁まで出せますが、さらに制度を上げることは可能ですか?
また、精度は少数を文字で出力するかバイナリで出力するかによって変わりますか?

164 :デフォルトの名無しさん:2014/08/10(日) 23:32:40.91 ID:vHA1jMYS
有理数計算ライブラリを使えば?

165 :デフォルトの名無しさん:2014/08/11(月) 00:56:37.77 ID:IThaQfUx
>>164
おすすめのライブラリはありますか?

166 :デフォルトの名無しさん:2014/08/11(月) 02:32:28.41 ID:HrAPsGYd
>>163
x^(-3/2)ならpow(x, -3/2)

167 :デフォルトの名無しさん:2014/08/11(月) 02:35:49.60 ID:vtRcS5Vo
惜しい
pow(x, -1.5)やpow(x, -3/2.0)が正解。
整数どうしの除算は整数に切り捨てられる

168 :デフォルトの名無しさん:2014/08/11(月) 03:30:31.58 ID:HrAPsGYd
>>167
xが型がdouble,floatなら問題無い

169 :デフォルトの名無しさん:2014/08/11(月) 03:43:55.13 ID:LBc4eQ0i
>>168
http://ideone.com/hexYNp
> 2.000000 ^ (-3/2 ) = 0.500000
> 2.000000 ^ (-3/2.0) = 0.353553

170 :デフォルトの名無しさん:2014/08/11(月) 05:25:45.52 ID:zN3pWoAl
>整数どうしの除算は整数に切り捨てられる

そういやC++は2011年改訂でそうなったな

171 :デフォルトの名無しさん:2014/08/11(月) 07:43:57.75 ID:OcxdK7AV
> そういやC++は2011年改訂でそうなったな
ええぇ〜〜〜〜 なんだってぇ〜〜〜〜

172 :デフォルトの名無しさん:2014/08/11(月) 08:06:18.35 ID:xvvy75By
整数リテラルどおしの除算の結果は整数に切り捨てられるのは
Cからの流れでC++の起こりの段階からそうじゃなかったのけ?

173 :デフォルトの名無しさん:2014/08/11(月) 08:20:28.49 ID:63aliZJh
この類いの奴は、負数の割り算で余りの符号が定義されたぐらいしか知らんわ

174 :デフォルトの名無しさん:2014/08/11(月) 10:03:38.34 ID:IpMoPrzW
整数リテラルの除算の結果は(規約がどうかは兎も角)事の起こりからずっと切り捨てられてきたね。
切り捨ての方向が確定したのはC++11かもしれないが。

>>163
doubleの精度のままファイルに出力するには、幾つか手がある。
・(エンディアンを考慮する必要があり、IEEEであることが前提になるが)バイナリで出力。
・有効精度を充分大きく採った指数形式で出力("%.20g"くらいで運が悪くない限り大丈夫)。
・(利用側で演算する制約はあるが)計算結果ではなく、計算過程を出力。

175 :デフォルトの名無しさん:2014/08/11(月) 11:20:26.59 ID:GA9i869X
昔MS-DOS時代に「ポータブルなdoubleの保存を
標準Cの範囲で実現するコード(基数は2限定)」というのを見たな。
ソースを見たけど「こんなことするくらいなら環境依存でいいや」
と思った記憶がある

176 :デフォルトの名無しさん:2014/08/11(月) 11:49:09.33 ID:IThaQfUx
>>166
>>167
ありがとうございます

>>174
ありがとうございます、二番目の方法が良さそうなので採用させてもらいます

177 :デフォルトの名無しさん:2014/08/11(月) 21:47:42.55 ID:IThaQfUx
%.20gを使ってもdoubleに20桁を格納出来ないので最高15桁のようですね。
15桁もあれば十分ですが

178 :デフォルトの名無しさん:2014/08/11(月) 23:32:08.05 ID:A+39Zpbs
ちら裏だけど
素粒子や半導体関係で、18桁要求されたことがあったなあ
C#のdecimalが欲しかった

179 :デフォルトの名無しさん:2014/08/11(月) 23:51:43.06 ID:9WMqh+ch
>>178
x86の浮動小数点演算は80bitで精度が約19桁だから余裕だろ

180 :デフォルトの名無しさん:2014/08/12(火) 00:33:05.70 ID:pMraHo9U
>>179
x87よりSSEの方が速い。でも64ビット。

181 :デフォルトの名無しさん:2014/08/12(火) 01:49:42.79 ID:TnGKLUiy
ベクターをベクターのまま何処か(HDDなど)に保存することは出来ますか?

182 :デフォルトの名無しさん:2014/08/12(火) 02:07:55.52 ID:IbGC0kFi
シリアライズするといい

183 :デフォルトの名無しさん:2014/08/12(火) 04:39:03.48 ID:r1RLL3ei
>>178
decimalの存在意義を理解してないおまえには無理

>>179
>x86の浮動小数点演算は80bitで
ばーか、ばーか

184 :デフォルトの名無しさん:2014/08/12(火) 05:08:54.18 ID:FpmNu2on
>>180

185 :デフォルトの名無しさん:2014/08/12(火) 05:12:55.50 ID:qXgriP/E
>>181
できません

186 :デフォルトの名無しさん:2014/08/12(火) 07:15:05.97 ID:pMraHo9U
>>184 ????????????????

187 :デフォルトの名無しさん:2014/08/12(火) 08:59:35.37 ID:NDNq9sGA
>>181
boost::serialization使え

188 :デフォルトの名無しさん:2014/08/12(火) 11:15:17.65 ID:rw+rZn9f
.NET4.5ならBigIntegerクラスがあるじゃん

189 :デフォルトの名無しさん:2014/08/12(火) 13:00:10.27 ID:utQRXpD1
正数と実数の区別がついていない188には無理

190 :デフォルトの名無しさん:2014/08/12(火) 20:03:37.07 ID:N66cEg2t
>>182
>>187
ありがとう
シリアライズ一度調べてみます

191 :デフォルトの名無しさん:2014/08/13(水) 00:13:50.77 ID:+ie/z7le
このコードがどういう考えで動作しているのかさっぱり解読できない
誰かなぜこれで動作してるのか解説してほしい
問題:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0036
回答:http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=122035

最初は判定用の回答をそのまま出力しているだけかと思ったけど
自分で入力を与えても正しく出力することは確認済み

192 :デフォルトの名無しさん:2014/08/13(水) 00:25:30.02 ID:+ie/z7le
ちなみにできるだけ読めるように展開していっている途中のコードは以下
http://ideone.com/NO0rOd

193 :デフォルトの名無しさん:2014/08/13(水) 01:06:08.42 ID:La+C0YSw
>>191
最初に '1' が出現してからの続く 0 と 1 のパターンは、全部ばらばらだろ?
ここで、最初の '1' が出現すると i と n のカウントが始まって、
次に 1 が出現するまでの変化値が異なり、その積 i *= n も変わる。
すると、うまい具合に剰余でパターン別に別れる最小の値が % 11 ってわけよ。

194 :デフォルトの名無しさん:2014/08/13(水) 01:13:55.33 ID:La+C0YSw
puts(...) に int 型の変数のアドレスを渡している部分は解説いらないよね

195 :デフォルトの名無しさん:2014/08/13(水) 02:04:34.81 ID:yUu6IlV+
>>193
i *= n の積はやってないんじゃない? ||演算子の評価結果は 0 か 1 じゃなかったっけ?(処理系依存?)
だから、 i *= 0 か i *= 1 のどちらかにしかならない。
i *= 0 になるのは、初めて ‘1’ が出現して c%2==1 のとき n++ == 0 となって、i *= 1 || 0 となるとき。
このとき i は 0 にリセットされる。
最初の‘1’と最後の‘1’の位置の差が図形ごとに固定かつバラバラなので、i でその差分をカウントして判別してる。

196 :デフォルトの名無しさん:2014/08/13(水) 05:59:28.24 ID:gYHJhUS8
初心者以前の者ですがC系の言語って
if (x>=0){〜} //A
else if (x==5){〜} //B
else{〜} //C
という処理をする場合、x=5だった時Aの処理だけでBの処理は行われないって事でいいでしょうか?
C系とまとめてますが、CとC++じゃ全然違ーよ!って感じでしたらすいません

197 :デフォルトの名無しさん:2014/08/13(水) 06:09:41.88 ID:gAzc5rgf
はい

198 :デフォルトの名無しさん:2014/08/13(水) 06:14:16.74 ID:gYHJhUS8
どうもありがとうございました

199 :デフォルトの名無しさん:2014/08/13(水) 10:55:08.47 ID:Vw1Vsh7W
ABC全部有効にしたいなら
if (x==5){〜} //B
else if (x>=0){〜} //A
else{〜} //C
という順で判定する

200 :デフォルトの名無しさん:2014/08/13(水) 12:15:42.85 ID:+ie/z7le
>>193,194
解説ありがとう!まだコードを理解しきってないですが
考え方がわかったので解読できそうです

実はputsのほうもさっきまでよくわかってなかったのですがint型と言われて気が付きました
(リトルエンディアン限定で?)1byte目に文字で2~4byte目が0になってるから
うまいこと2byte目が'\0'と読み取られるんですね
ありがとうございました

201 :デフォルトの名無しさん:2014/08/13(水) 12:21:44.33 ID:+ie/z7le
>>195
解説ありがとう!
まだコードとしては何が正しいか読めていませんが
参考になります!

202 :デフォルトの名無しさん:2014/08/13(水) 18:08:43.16 ID:MVRQguVP
C++11だっけ?
λとか可変長天ぷらが導入されたあたりからC++触ってないのだが
最近はなんか大きな動きあったの?

203 :デフォルトの名無しさん:2014/08/13(水) 21:09:51.62 ID:oMecd0hy
>>201
その内、FEED C0DE に出会える日もくるさ
0xBAADF00D かも知れないが

204 :デフォルトの名無しさん:2014/08/13(水) 21:32:31.42 ID:/Dr5wPv9
配列コピーなんですけど、たとえば old_array[i]にある奇数や飛び番の配列データを
新たに作ったnew_array[i]に[0]から連番でいれていくのは可能でしょうか

205 :デフォルトの名無しさん:2014/08/13(水) 21:43:51.95 ID:MVRQguVP
>>204
可能ですよ

206 :デフォルトの名無しさん:2014/08/13(水) 21:46:55.24 ID:u8W9agvo
そういうコードを書けば良い

int i, j = 0;
for (i=0; i<[old_arrayの領域分]; i++) {
 if (old_array[i] == 条件) {
  new_array[j++] = old_array[i];
 }
}

207 :デフォルトの名無しさん:2014/08/13(水) 22:11:32.74 ID:/Dr5wPv9
>>205-206
有難うです。ど素人なもんで
new_array[j++] = old_array[i]; この辺手掛かりにちょっといじってみます

208 :デフォルトの名無しさん:2014/08/13(水) 22:12:32.13 ID:Vw1Vsh7W
>>203
B16B00B5がいい

209 :デフォルトの名無しさん:2014/08/13(水) 22:27:45.98 ID:yUu6IlV+
>>195
誰も気にしてなさそうだけど、変なこと書いてたのでいまさら修正。
> i *= 0 になるのは、初めて ‘1’ が出現して c%2==1 のとき n++ == 0 となって、i *= 1 || 0 となるとき。
正しくは
 i *= 0 になるのは、初めて ‘1’ が出現して c%2==0 のとき n++ == 0 となって、i *= 0 || 0 となるとき。
ごめんニャン

210 :デフォルトの名無しさん:2014/08/13(水) 23:22:53.17 ID:ZCR6FKbx
二次元のvectorにプッシュバックしたいのですがどう書けば良いでしょうか?

また、vectorのサイズを初期化しておいてからvectorに数値を入れていくのと、プッシュバックで数値を入れいくのではどちらの方が効率的ですか?

211 :デフォルトの名無しさん:2014/08/13(水) 23:29:46.05 ID:o4SLtD2/
無初期化でプッシュバックは遅い。
reserveしとけばメモリ動的確保・変更が連発されない。

212 :片山博文MZ次期CEO ◆T6xkBnTXz7B0 :2014/08/13(水) 23:43:02.05 ID:JOE/IwkU
プッシュアップしたvectorをプッシュアップする

213 :デフォルトの名無しさん:2014/08/13(水) 23:57:45.27 ID:ZCR6FKbx
>>211
ありがとうございます
reserveは初期化しない分速くなるというわけですね

>>212
>プッシュアップしたvectorをプッシュアップする
一回目のプッシュアップするvectorには名前がなく、プッシュアップの方法がわからないのですがどう書けば良いのでしょう?

214 :片山博文MZ次期CEO ◆T6xkBnTXz7B0 :2014/08/14(木) 00:13:18.26 ID:ZDq4sTlC
vector<vector<int> > vv;
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vv.push_back(v);
vv.push_back(v);
vv.push_back(v);

215 :デフォルトの名無しさん:2014/08/14(木) 00:15:11.69 ID:Eelz7SYO
プッシュアップってなんだ?

典型的な二次元構造の確保方法。
std::vector<std::vector<T> > array2d;
for (int iy = 0; iy < height; ++iy) {
std::vector<T> tmpArray;
for (int ix = 0; ix < width; ++ix) {
tmpArray.push_back(T(0));
}
array2d.push_back(tmpArray);
}
実際には、初期値が一定ならtmpArrayは事前に一回作るだけで済むんだけどね。

216 :デフォルトの名無しさん:2014/08/14(木) 00:20:49.92 ID:inXgLCev
>>213
vector<vector<int>> vec;
vec.push_back(vector<int>());
vec[0].push_back(123);

217 :デフォルトの名無しさん:2014/08/14(木) 00:33:00.37 ID:KyBdqph/
vector<vector<T> > array2d(height,vector<T>(width,T(0)));
普通はこんな感じだろ

push_backはサイズ未定な時かreserveと組み合わせて使う

でも多次元配列なら1次元vectorで作って
添字計算するのが基本じゃね?

218 :デフォルトの名無しさん:2014/08/14(木) 00:36:12.24 ID:tezU5ZGa
>vector<T>(width,T(0))

なんで一本グソのような無駄な配列を作って
わざわざそこからコピーして初期化すんだよ
無駄が大杉だろ

219 :デフォルトの名無しさん:2014/08/14(木) 00:50:02.85 ID:ZDq4sTlC
emplace_backの方が早いかもしれんな

220 :デフォルトの名無しさん:2014/08/14(木) 00:56:21.81 ID:Pr8GjnEP
char s[3];
のようにして、まだ初期化していない文字列の中身をデバッグ中に見ると、'フ'が入っていました。
てっきり初期化しなければ\0が入っているか、もしくは何が入っているか保証されないと思っていたのですが、'フ'とは何を表しているんでしょうか?

221 :デフォルトの名無しさん:2014/08/14(木) 00:57:18.15 ID:KyBdqph/
まあ、拘るならreserveしてemplaceか、なければswapだろうけど。

Tの生成やコピーが軽いなら
あれが一番楽じゃね。

それでも元のループより効率が悪くはならんし。

222 :デフォルトの名無しさん:2014/08/14(木) 01:05:12.41 ID:ZDq4sTlC
VC++がデバッグ時に初期化されていない領域を「フフフフフフフフフ」で埋める

223 :デフォルトの名無しさん:2014/08/14(木) 01:08:37.01 ID:Pr8GjnEP
なるほど、VC++の仕様なんですね。

224 :デフォルトの名無しさん:2014/08/14(木) 01:11:32.12 ID:ZDq4sTlC
フフフフフフフフフ

225 :デフォルトの名無しさん:2014/08/14(木) 01:11:46.83 ID:KyBdqph/
TがPODでvectorのコピーコンストラクタが
memcpy使うように特殊化されているような実装ならemplace使うより速いかもよ。

226 :デフォルトの名無しさん:2014/08/14(木) 01:20:20.26 ID:7eQlac2v
素直に書こうぜ。こうだろ。
std::vector<std::vector<T>> array2d(height);
for (auto&v : array2d) v.resize(width);

227 :デフォルトの名無しさん:2014/08/14(木) 02:00:35.61 ID:BNqK6z00
>>214
>>215
ありがとうございます
二重ループを使えばよかったのですね
どうして気づかなかったのか•••

>>216
>vector<vector<int>> vec;
>vec.push_back(vector<int>());
>vec[0].push_back(123);
なるほど、これはきれいですね
ありがとうございます、使わせてもらいます

228 :デフォルトの名無しさん:2014/08/14(木) 02:08:46.40 ID:BNqK6z00
>>226
forの部分がよくわかりません
それは大きさが分かっている場合ですか?
大きさが分かっていて初期化が必要ないならこれ↓で問題ないでしょうか?
vector<T> v_y;
v_y.reserve(y_max);
vector<vector<T>> v_x;
v_x.reserve(x_max);

229 :デフォルトの名無しさん:2014/08/14(木) 02:09:52.12 ID:rkihjFNH
>array2d.push_back(tmpArray);

なんで一本グソのような無駄な配列を作って
わざわざそこからコピーして初期化すんだよ
無駄が大杉だろ

230 :デフォルトの名無しさん:2014/08/14(木) 07:18:11.14 ID:7UqN+IkX
批判しかしないやつはスルーで

231 :デフォルトの名無しさん:2014/08/14(木) 11:14:43.85 ID:VAiv/2zu
ブーメラン乙
array2d.push_back(std::move(tmpArray));

232 :デフォルトの名無しさん:2014/08/14(木) 15:29:25.75 ID:8/lb7CTL
そんな糞なことは止めて行列ライブラリを作るか既存のものを使え

233 :デフォルトの名無しさん:2014/08/14(木) 19:02:21.63 ID:sAFDwER0
確かに2D,3Dのシミュレーションする数値演算ならvectorはちょっとお呼びでない

234 :デフォルトの名無しさん:2014/08/14(木) 21:08:35.96 ID:8EuqiR5k
widthxheight固定なら素直に連続領域とれるビットマップのような二次元配列だな

235 :デフォルトの名無しさん:2014/08/14(木) 21:51:37.55 ID:MeOL7pvQ
キミはスパース行列を知らないのか?

236 :デフォルトの名無しさん:2014/08/14(木) 22:29:17.20 ID:BNqK6z00
>>232
>>233
>>234
おすすめのライブラリはありますか?
用途は数値の書き込みと読み取りをするだけです

237 :デフォルトの名無しさん:2014/08/14(木) 22:37:39.50 ID:BNqK6z00
よく考えてみれば書き込みと読み取りだけならどのライブラリでも良さそうですね

238 :デフォルトの名無しさん:2014/08/15(金) 01:33:12.65 ID:j/DUXog9
なんでこんな需要の多そうなクラスが標準で無いんだろうと思ったけど
まさか
double unko[100];
((double(*)[10])(unko))[9][9];
って保証されてない?

239 :デフォルトの名無しさん:2014/08/15(金) 02:20:11.21 ID:Wy6EwLn0
[99]のアクセスと同じかどうかってことなら同じじゃね
通常の配列も多次元配列もメモリ上は一直線になることは決まってたはず
ソースは探してない

240 :デフォルトの名無しさん:2014/08/15(金) 07:18:12.35 ID:gY0bb4xI
>>216
余談だけど、前 VS が無かったから Mac で久しぶりに XCode で書いてたら、

std::vector<std::vector<_T>> vec;

で構文エラー投げられた。>> を stdin の演算子として読まれたらしい
VS ではこんな事なかったのにやはり GNU は信用できn(ry

241 :デフォルトの名無しさん:2014/08/15(金) 08:09:25.44 ID:1yOnOTpl
>>240
それが昔からのデフォだ
vector<vector<T>>
と書いてOKになったのは C++11 からだね、VS で ++11 に対応しているの

242 :デフォルトの名無しさん:2014/08/15(金) 08:10:41.78 ID:rBk8U20E
>>240
その>>をきちんと解釈するのはC++11からだ。
C++03では> >と書かないといけなかった。

243 :デフォルトの名無しさん:2014/08/15(金) 08:49:10.77 ID:gY0bb4xI
>>241 >>242
そうだったのか!
どうりで XCode では std::to_string() が使えなかった訳だ。

244 :デフォルトの名無しさん:2014/08/15(金) 09:24:41.59 ID:Lne+Px+X
そんなの常識タッタタラリラ

245 :デフォルトの名無しさん:2014/08/15(金) 10:40:55.78 ID:vo9zRayR
ピーヒャラピーヒャラ

246 :デフォルトの名無しさん:2014/08/15(金) 12:54:12.49 ID:Aqg845W8
【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚

247 :デフォルトの名無しさん:2014/08/15(金) 15:40:11.62 ID:rWnY0+Nz
>>243
そのXcode古すぎじゃね?
それかオプションでC++03になってるか

248 :デフォルトの名無しさん:2014/08/15(金) 17:57:41.55 ID:gY0bb4xI
>>247
さあ、確か XCode で C++11 を導入するには
gcc を手動でアップデートしなければいけないという事も聞いたが...

XCode を貶すつもりなどないが、自分にとっては使い易いから
VS を使い続けるつもりでいるよ

249 :デフォルトの名無しさん:2014/08/15(金) 18:01:50.30 ID:LpsonrOj
こういうときにXcodeはカスと言うような輩が居るから困る
逆もしかり って言うか身近にいる

250 :デフォルトの名無しさん:2014/08/15(金) 18:03:48.47 ID:EAoCiRcg
C++はカス

251 :デフォルトの名無しさん:2014/08/15(金) 18:58:08.91 ID:dVKltVs+
どんな言語でも、3ヶ月以内に自分が書いたコード以外はカス

252 :デフォルトの名無しさん:2014/08/15(金) 19:14:06.92 ID:FG/0ESXh
設計ができない奴のコードはどれだけ高機能だろうとカス、汚物
しかも必ず「時間がなかったので」という言い訳付き
設計に基づくコードは1年前だろうと理路整然として美しい

253 :デフォルトの名無しさん:2014/08/15(金) 19:19:42.09 ID:EAoCiRcg
emacsを使うと設計しなくてもコーディング出来ます()

254 :デフォルトの名無しさん:2014/08/15(金) 19:22:14.18 ID:2DtLTSpw
初めから仕様の決められるようなプログラムって、創造的余地のまるでない
誰でも作れるものでしかないんじゃ

255 :デフォルトの名無しさん:2014/08/15(金) 19:40:09.65 ID:71J7kCx5
考えるという行為を知らない
コピペコーダーのたわごとだな
設計ってのは脳みそ使うんだぞ

256 :デフォルトの名無しさん:2014/08/15(金) 19:49:52.48 ID:2DtLTSpw
いやプログラムのほぼ最適な設計は仕様決まったらある意味自動的に出来る物だろ。

仕様が変わるからこそ、作業量優先で
増築繰り返して美しくない設計になる。
もちろんある程度の増築を想定した設計にはなっているけどね。

だからこそリファクタリングという工程が必要になるんだよ。

257 :デフォルトの名無しさん:2014/08/15(金) 19:52:56.78 ID:UOqJaIfS
と有機生命体のコード生成機械は自負しています

258 :デフォルトの名無しさん:2014/08/15(金) 20:01:44.71 ID:nXBM096I
外部仕様と内部仕様のどちらの話なのか区別すべき

>仕様が変わるからこそ、作業量優先で
>増築繰り返して美しくない設計になる
内部設計したこと無い人の常套句だね
こういう人は一生まともなコードは書けん

259 :デフォルトの名無しさん:2014/08/15(金) 20:12:33.70 ID:rWnY0+Nz
>>248
んなわけない。
それに今XCodeに使われてるコンパイラはGNUじゃなくてLLVM Clang
C++11の主要機能の実装はVisualStudioより一年以上早かったよ。

260 :デフォルトの名無しさん:2014/08/15(金) 20:50:15.31 ID:2DtLTSpw
何を言っているのか解らない。
内部設計位息をするように出来なきゃ
動くもの作れないだろ。

261 :デフォルトの名無しさん:2014/08/15(金) 21:10:18.85 ID:aVUc5SAD
内部設計しなくてコーディングするひとが多くて困ってます(≧∀≦)ゞ
それっぽく動くものができるのが不思議

262 :デフォルトの名無しさん:2014/08/15(金) 21:48:52.69 ID:2DtLTSpw
基本的に頭の中で内部の詳細について
設計したものを頭の外に出す作業がコーディングじゃね?
別の形で残す必要性が解らない。
言葉や別の言語で実態と乖離した説明聞くより直接コード見た方が早いだろう。

まあそこが直接繋がらない初心者には
何がしたかったのか意図を聞くこともあるけど。

263 :デフォルトの名無しさん:2014/08/15(金) 22:06:36.47 ID:ZsqsNQIf
ソース公開された時全部TCHAR依存(関数も_tstoiとか_tprintf)だとやっぱり嫌がられますでしょうか?
いろんな方のソースを拝見するとcharで統一されていたりTCHARでも文字セットがマルチバイトになっていたりするんですが

264 :デフォルトの名無しさん:2014/08/15(金) 22:35:54.17 ID:oVfRPgr4
C言語のAPIやリファレンスってどうやって確認する物なんでしょうか?
javaならオラクルのwebサイトに仕様が有って、eclipseでshift+F2を押せば確認出来たりするのですが。
Cだと最初から作られている物の一覧を何処から入手すれば良いのかさっぱり分かりません。
コンパイラの作成元に別々に置かれている物なんでしょうか?

265 :デフォルトの名無しさん:2014/08/15(金) 22:44:18.53 ID:tVn+C2pp
>>263
ものによる
Windows以外で使う可能性があるならTCHARは殺害だし
Windowsで商用レベルのソフトならcharは許されない

266 :デフォルトの名無しさん:2014/08/15(金) 22:49:52.18 ID:yLhHHOyz
charで書いといてマクロで書き換えてunicode対応にする。面倒だがこれならwindows以外ではいいだろ。

267 :デフォルトの名無しさん:2014/08/15(金) 23:02:39.26 ID:WUgX6twt
内部utf-8にする必要があるとかじゃなけりゃwchar_tだな。
Win32APIは明示的にW版を使うようにして。

268 :263:2014/08/15(金) 23:44:35.57 ID:ZsqsNQIf
>>265
>>266
>>267
ありがとうございます
オープンソースの場合あまり環境に依存させないほうがいいということですね
C++においてもし決め打ちをするならcharとwchar_tならどちらがいいのでしょうか?
charじゃないといけない時というのはどういう時でしょうか?

269 :デフォルトの名無しさん:2014/08/15(金) 23:44:45.59 ID:dqHjjjVM
>>265
TCHAR定義されてなかったら#defineすればいいだけでコスト0

270 :デフォルトの名無しさん:2014/08/16(土) 00:19:24.37 ID:xuwM529Y
>>268
いや、別にWindows専用ならTCHAR使ってもいいと思うぞ。

271 :263:2014/08/16(土) 01:24:29.38 ID:k3e0e9h7
>>270
一応windows環境のソフトウェアですがなにか変なことをしていないかと思って質問しました

272 :デフォルトの名無しさん:2014/08/16(土) 03:06:47.92 ID:FC037fxL
>TCHAR定義されてなかったら#defineすればコスト0

そんなことをしたらマイクロソフトに親を殺された人たちに因縁をつけられて
とんでもないコストが発生するだろう

273 :デフォルトの名無しさん:2014/08/16(土) 05:40:01.26 ID:HsWLjWa1
>>271
クロスプラットフォームなオープンソースソフトウェアのソースでも見てみたら?
例えばsqliteなんかだと基本的にchar(UTF-8)でファイルパスなんかもUTF-8で受けとる。(一応sqliteのAPIにはUTF-16を受けとるものもあるけど中でUTF-8に変換してる。)
ファイルパスの文字列操作もUTF-8で統一してる。
UTF-16へ変換するのは基本的にWin32APIへ渡す直前

同じコードが動く事が重要で、サイズが変わったり中身のエンコーディングが違ったりするのは好ましくないからTCHARは嫌われるんだよ。エンコーディングが違う可能性があると迂闊に文字列操作も出来ないから。

あとWindows専用ならもうTCHARじゃなくてwchar_tかchar16_t(UTF-16)でいいんじゃない?今更ASCII版のAPI使うことなんて無いでしょ。

274 :デフォルトの名無しさん:2014/08/16(土) 06:02:24.34 ID:5flrnqyZ
内部でUTF8(1バイト長)を使うと固定するように、
内部でUTF16(2バイト長)を使うと固定してもマルチプラットフォーム化は可能。
昔から次世代のPHP6は内部UTF16化しようとしてた。

275 :デフォルトの名無しさん:2014/08/16(土) 06:15:22.75 ID:HsWLjWa1
>>274
今からUTF-16は中途半端でしょ。プログラムの外に文字列出すときはUTF-8の方がベターだし、メリットが無い

276 :デフォルトの名無しさん:2014/08/16(土) 06:34:07.99 ID:4+vOhLId
>>273
ソースをUTF-8で保存して
L"ほげ"でリテラル埋め込んでると
VC++のコンパイラが暴れるんです

277 :デフォルトの名無しさん:2014/08/16(土) 08:25:20.68 ID:KA+KE7+G
Visual C++のCランタイム関数やC++のstreamクラスってUTF-8対応していないの?

278 :デフォルトの名無しさん:2014/08/16(土) 08:45:24.88 ID:5flrnqyZ
次期PHPは「PHP 7」になる? 2014年07月25日

いつまで経ってもリリースされないPHP 6だが、PHP 6はスキップして次期バージョンはPHP 7としてリリースするという案がPHPの開発チーム内で真剣に議論されているそうだ。
PHP 6については、当初文字列の内部処理をUTF-16で行うという方針で開発されていたが、2010年にこれを転換、開発ブランチがロールバックされるという事件があった(過去記事)。
その後4年が経ったが、未だPHP 6はリリースされていない。
PHP 6の開発は長きにわたり、かつて「PHP 6で導入される新機能」として紹介されたものが、実際には次期PHPには導入されない可能性もあるという。
そのため、新しい「PHP 7」というバージョンにすべきだ、という話のようだ。
http://developers.slashdot.jp/story/14/07/25/040238/

279 :デフォルトの名無しさん:2014/08/16(土) 08:55:34.89 ID:aJ9J0CdO
    ↓Perl 6

  ( ゚д゚ ) ガタッ
  .r   ヾ
__|_| / ̄ ̄ ̄/_
  \/     /

280 :デフォルトの名無しさん:2014/08/16(土) 10:48:50.82 ID:0XKtKnUw
>>277
UTF-8 はそのまま通るんじゃない?

>>278-279
Perl の話かと思ったゎ

281 :デフォルトの名無しさん:2014/08/16(土) 11:01:29.74 ID:xuwM529Y
>>280
LC_CTYPEに依存する関数はロケールを適切に設定する必要があるな。

282 :デフォルトの名無しさん:2014/08/16(土) 11:16:19.08 ID:x/55uCwJ
windowsはlocaleでutf-8指定しても
マトモに扱ってくれなかったような

vcのバージョンによるのかもしれないが

283 :デフォルトの名無しさん:2014/08/16(土) 11:51:54.48 ID:iDf+bXK3
>>271
Win32 APIのA版はフォルダーの中に長い名前のファイルが混じってるだけで
ファイル一覧の列挙が動作しなくなったり
とにかくWindowsのフル機能を正常に使えない出来損ないだぞ
残念ながらWindowsアプリでは処理をマルチバイト文字に統一することは不可能

284 :デフォルトの名無しさん:2014/08/16(土) 23:26:59.16 ID:VKTgsMtd
>>268
char で決め打ちして日本語対応しませんというのが一番楽

285 :デフォルトの名無しさん:2014/08/17(日) 05:26:13.50 ID:3OAkF9Uq
>>284
それ日本語だけじゃ済まないから

286 :デフォルトの名無しさん:2014/08/17(日) 06:16:23.78 ID:4EYqeDv1
>>284
ハゲどー。
そして申し訳程度に日本語に見えるバイナリ列対応w

287 :デフォルトの名無しさん:2014/08/17(日) 06:35:37.54 ID:D8fOlFKd
>>282
UTF-8へのロケール変更はできないはず

288 :デフォルトの名無しさん:2014/08/17(日) 06:43:50.32 ID:ruDVRpF3
windowsAPIでUTF-8は使えるって聞いたことがない。
それだったら、linuxと一緒でwchar_t版が不要だろ。

289 :デフォルトの名無しさん:2014/08/17(日) 06:46:25.94 ID:ruDVRpF3
マイクロソフト純正でないとおもうが。
仮にUTF-8が使えたとしても、ラッパーであってUTF-16LEへ変換して渡してるだろう。
windowsは内部が全世界統一でUTF-16LEだろ。

290 :デフォルトの名無しさん:2014/08/17(日) 07:09:51.14 ID:2ZZ0upcs
ソースコードをどう書くかの話をしているときに
裏での見えないラッパーの話をされても
>linuxと一緒でwchar_t版が不要だろ
encoding-schemeとencoding-formの区別がつかない人はすっこんでてください

291 :デフォルトの名無しさん:2014/08/17(日) 13:30:39.71 ID:3OAkF9Uq
え?ソースコードのエンコーディングの話してたの?

292 :デフォルトの名無しさん:2014/08/17(日) 15:12:10.77 ID:H69Yv+5P
>>288
Win32(Windows NT)ができた当時はUTF-8なんてなかったんだからしょうがない。
というか、今のようにUTFなんちゃらが乱立する状況なんて想像されていなくて
"UNI"CODEで文字コード問題は解決されると信じられていた時代だった。
#漢字Unificationの問題は別として。

293 :デフォルトの名無しさん:2014/08/17(日) 23:26:46.65 ID:3BRjkNZj
charと竹中直人は兄弟だと思っていた1977年の春。

294 :デフォルトの名無しさん:2014/08/18(月) 17:23:56.00 ID:ENGcdXzN
std::regexが思っていたより遅いんですが、より速い正規表現での検索を利用したい場合には何を使うといいですか?
grepソフトの検索はすごく速いので、正規表現のコストがこんなに高いとは思ってなかった

295 :デフォルトの名無しさん:2014/08/18(月) 17:26:46.65 ID:BFPWuSMs
最適化入れてないとかデバッグモードで実行してるとかそういう話じゃないの

296 :デフォルトの名無しさん:2014/08/18(月) 17:42:45.77 ID:0GH1txVb
何百回も呼ぶような場合はキャッシュというかコンパイルすべきかも
regcomp()

297 :デフォルトの名無しさん:2014/08/18(月) 18:16:45.57 ID:ENGcdXzN
Releaseモードにしたら劇的に速くなった
コンパイルもやってみます

298 :デフォルトの名無しさん:2014/08/18(月) 21:02:44.92 ID:0GH1txVb
いや、解決したならやらんでいい

299 :デフォルトの名無しさん:2014/08/18(月) 22:01:41.52 ID:uDUM2zni
>regcomp()

んなもんは無い。

>コンパイルすべきかも

コンパイルするのが>>294に書かれてるstd::regexじゃねーの

300 :デフォルトの名無しさん:2014/08/19(火) 07:36:05.01 ID:tg7i16ue
>>299
> >regcomp()
> んなもんは無い。

ググレカス

301 :デフォルトの名無しさん:2014/08/19(火) 12:02:47.11 ID:F3IU7kyP
>>294の質問をしたものだけど標準ライブラリのisupperが遅かったので、
代わりにwchar_tをintにキャストして、0x41〜0x5Aの範囲にあるかを調べる関数を作ったらだいぶ速くなりました
これだけで大文字アルファベットを漏れなく拾えるかな?
isupperが遅い理由はファセットがどーたらとあったけど、要するにすべての文字コードに対応する作業で遅い?

302 :デフォルトの名無しさん:2014/08/19(火) 12:32:08.96 ID:qv1p14qX
正規表現の話で無くなってる。
あと文字コードによっては、英文字と2バイト長以上の文字に重複部分あるかもしれない。

303 :デフォルトの名無しさん:2014/08/19(火) 12:37:35.60 ID:F3IU7kyP
文字列でなく1文字の判定をする部分があって、そこにまで正規表現を使うことはないだろうとisupperも試してみた結果です
日本でUnicode使う分には大丈夫そうかな

304 :デフォルトの名無しさん:2014/08/19(火) 20:41:30.24 ID:Mliou7o7
>>301
ctype.hのisupper()の実装は、配列を引いてand演算するぐらいだから速いと思うけど

305 :デフォルトの名無しさん:2014/08/19(火) 21:33:22.76 ID:APzI7Yv4
>>304
?

306 :デフォルトの名無しさん:2014/08/20(水) 16:13:47.13 ID:vZ4195p+
列挙体にマイナスの値は許されていますか?

307 :デフォルトの名無しさん:2014/08/20(水) 16:24:48.87 ID:lf2AdZUe
>>306
許されてます。

308 :デフォルトの名無しさん:2014/08/20(水) 17:06:17.01 ID:cYiGvIKn
enum EnumDayo : unsigned long {
AAAA,
BBBB,
CCCC,
};
もおk

309 :デフォルトの名無しさん:2014/08/20(水) 19:26:51.17 ID:YTuxoJAp
staticなメンバ関数内(TimerProcとか)でthisポインタを使うためにSetWindowLongPtr使うってあるけど
thisポインタを保持するstaticなメンバ関数(例えばSaveThis())をTimerProcで呼んでThisポインタ取得でもok?

310 :デフォルトの名無しさん:2014/08/20(水) 19:44:36.47 ID:lf2AdZUe
>>309
そこまでするならシンクルトンにしなよ

311 :デフォルトの名無しさん:2014/08/20(水) 20:24:01.41 ID:YTuxoJAp
調べてみたらそのまんまだったありがとう

312 :デフォルトの名無しさん:2014/08/20(水) 21:28:31.99 ID:TfPzovZL
いい加減なやり方を教えるなよ
スレッドなりタイマーなり
thisを渡せるように設計されてるだろ

313 :デフォルトの名無しさん:2014/08/20(水) 21:49:29.16 ID:G+JA3SG/
windows の話だとして スレッドなら this を渡す機構あり
タイマーは window proc/dialog proc の一部分でしかなく、そのインターフェース上には無い
が、渡ってくる window handle や dialog param に this を持ち越す機構がある

314 :デフォルトの名無しさん:2014/08/21(木) 00:55:37.70 ID:tdXshhs4
非侵入型のシリアライズを使おうと思ったのですが
シリアライズしたいマトリックスのクラス(class Matrix<T,2>)がテンプレートになっていて、以下でどう使えばいいのかが分かりません
この場合どう書けばいいのでしょうか?

001 namespace boost {
002 namespace serialization {
003 template <class Archive>
004 void serialize(Archive& ar, POINT& rpoint, const unsigned int version)
005 {
006 ar & rpoint.x & rpoint.y;
007 }
008 }
009 }
参考にしたページ: http://www31.atwiki.jp/lafe/pub/boost_serialization/boost_serialization.html#non_intrusive
Win32 SDKのPOINT構造体の例です。

使用したマトリックスのヘッダ: http://www.stroustrup.com/Programming/PPP2code/Matrix.h

315 :デフォルトの名無しさん:2014/08/21(木) 01:54:18.79 ID:oEYr9vp2
>>307-308
ありがとうございます。

316 :デフォルトの名無しさん:2014/08/21(木) 02:13:20.14 ID:3TFtsh2S
>>314
template <class Archive, class T>
void serialize(Archive& ar, Matrix<T, 2>& matrix, const unsigned int version)
とかじゃだめ? 2 のとこもいっそのことテンプレ引数にしてもよいカモ
ダメだったらスマン

317 :デフォルトの名無しさん:2014/08/21(木) 05:27:13.90 ID:wIaa1KaJ
>>312
スレッドは引数があるけどタイマーは無くね

>>313
SetWindowLongPtrの事やんな?

318 :デフォルトの名無しさん:2014/08/21(木) 08:07:44.00 ID:7zp3VFjW
タイマーIDだろ

319 :デフォルトの名無しさん:2014/08/21(木) 08:51:47.92 ID:wIaa1KaJ
>>318
タイマーIDに引数として渡したいアドレスを指定するって事?

WindowProcはLPARAMで受け取れる
DialogProcもLPARAMで受け取れる
ThreadProcはArgListとして渡せる
TimerProcは?

320 :デフォルトの名無しさん:2014/08/21(木) 09:24:53.25 ID:VRbdjlP7
IDはその名の通り識別(identify)するものなんだから
アドレスだろうと渡したい情報の配列のインデックスだろうと
連想配列のキーだろうと
好きなようにすればいい

321 :デフォルトの名無しさん:2014/08/21(木) 10:25:47.71 ID:wIaa1KaJ
行儀悪いとかないん?

322 :デフォルトの名無しさん:2014/08/21(木) 10:31:04.91 ID:+oI4Z8sz
this を保持できるだけの器の大きさがあれば良いんでない?

323 :デフォルトの名無しさん:2014/08/21(木) 12:38:38.93 ID:VRbdjlP7
残念ながらWindowsのタイマー関数は
要求したUINT_PTRと結果のUINT_PTRが
異なる恐れのある糞仕様なので
厳密にはポインターは使えない
実際には動くけど

324 :デフォルトの名無しさん:2014/08/21(木) 13:05:15.92 ID:tdXshhs4
>>316
レスありがとうございます
両方試しましたができませんでした

Tだけをテンプレ引数にした場合のエラーは
コンパイルされたクラスの テンプレート のインスタンス化 'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<Numeric_lib::Matrix<double,2>>(T &)' の参照を確認してください
with
[
Archive=boost::archive::text_oarchive
, T=Numeric_lib::Matrix<double,2>
]

Tと2(class Arg)の両方をテンプレ引数場合のエラーは
error C2993: 'Arg' : 非型テンプレート パラメーター 'D' に対する無効な型です。

一応ソースコードです http://codepad.org/x3KfXZ5G

ヘッダの358行目にクラス定義があります
template<class T> class Matrix<T,2> : public Matrix_base<T>{・・・・・}

325 :デフォルトの名無しさん:2014/08/21(木) 13:17:14.78 ID:oEYr9vp2
インターネットエクスプローラなど、ほとんどのアプリケーションのボタンは
マウスボタンを押して離すとクリックしたことになるんですが、VSは押した時点で
クリックしたことになりますよね。
Javascriptのマウスイベントは、上に乗っかっている要素が下の要素に
イベントを伝達するか決定します。
でもこれ、再利用を前提とするコンポーネントを作るには不合理だと思います。

ここら辺のイベントハンドリングって、こうすると良いというような
一般的な合意ってありますかね?

326 :デフォルトの名無しさん:2014/08/21(木) 13:25:48.62 ID:bEzT5YFt
template <class Archive>
void serialize(Archive& ar, Matrix<double,2>& data, const unsigned int version)
こうだろ

327 :デフォルトの名無しさん:2014/08/21(木) 13:39:37.81 ID:mw6JQpGe
c++です
2つの string a,bを受け取って、ある操作で創りだした新たな string を return したいときにつまりました。
簡略化した下の関数
#include <iostream>
#include <string>
using namespace std;
string return_string( ){
sting ans= ""; ans[0] = 'a'; ans[2]= b'';
return ans;
}
int main(){ cout << return_string() << endl; }
すら値"ab"を返してくれません。stringは可変長ではないのでしょうか

328 :デフォルトの名無しさん:2014/08/21(木) 13:40:14.09 ID:mw6JQpGe
>>327
ans[2]のとこans[1]です。書き間違え

329 :デフォルトの名無しさん:2014/08/21(木) 13:41:17.99 ID:SvY3ZvfG
>>325
Dクリック判定、マウスジェスチャ、D&D実装する場合はマウスボタンアップで判定必須
ボタンの場合はマウスダウンでもいいんだけど勢いで押したけどやっぱりキャンセルしてそっ閉じしたい、
そういうときマウスアップで判定してくれたほうがありがたい

330 :デフォルトの名無しさん:2014/08/21(木) 13:41:52.64 ID:hozPYr3C
sting ansの長さは0のまま

331 :デフォルトの名無しさん:2014/08/21(木) 13:56:06.07 ID:SvY3ZvfG
>>327
そのコードはこんなことやってるようなもん
char ans[0];
ans[0]='a';
ans[1]='b';

後ろに追加したいときはappend使え

332 :デフォルトの名無しさん:2014/08/21(木) 15:06:47.65 ID:tdXshhs4
>>326
それも試しましたがエラー↓でした
コンパイルされたクラスの テンプレート のインスタンス化 'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<Numeric_lib::Matrix<double,2>>(T &)' の参照を確認してください
1> with
1> [
1> Archive=boost::archive::text_oarchive
1> , T=Numeric_lib::Matrix<double,2>
1> ]

333 :デフォルトの名無しさん:2014/08/21(木) 15:36:13.00 ID:oEYr9vp2
>>329
ありがとです。

334 :デフォルトの名無しさん:2014/08/21(木) 17:19:51.15 ID:wIaa1KaJ
class クラスA : protected クラスB
これって派生クラスB内では基底クラスAのメンバをprotected以下のアクセスに格下げ
つまりこんな感じって考えてok?
クラスA public -> クラスB protected
クラスA protected -> クラスB protected
クラスA private -> クラスB private

335 :デフォルトの名無しさん:2014/08/21(木) 17:26:22.97 ID:bEzT5YFt
基底と派生逆だろ

336 :デフォルトの名無しさん:2014/08/21(木) 17:35:39.56 ID:wIaa1KaJ
あぁごめん
それ以外は合ってる?

337 :デフォルトの名無しさん:2014/08/21(木) 17:48:59.56 ID:bEzT5YFt
こんな感じがわからん
http://homepage1.nifty.com/MADIA/vc/C__/3_5.htm
これ見たらわかるだろ

338 :デフォルトの名無しさん:2014/08/21(木) 18:08:53.03 ID:Oxwk4EwZ
テンプレートクラスをベクタに突っ込むときの宣言でどーすんの?
std::vector<std::pair<char,int>>
的なことがしたいんだが。

339 :デフォルトの名無しさん:2014/08/21(木) 18:12:17.40 ID:wIaa1KaJ
>>337
ありがとう

340 :デフォルトの名無しさん:2014/08/21(木) 18:12:41.89 ID:tFtVdTfd
std::vector<std::pair<char,int>>じゃダメなのか
何がしたいのかよくわからんな

341 :デフォルトの名無しさん:2014/08/21(木) 18:21:55.39 ID:Oxwk4EwZ
すまん、いけたわ。
エラーメッセージ見てなかった。

std::vector<std::pair<char,int> >

ねすてぃっどするときはスペース入れろって出てた。
>>演算子と見間違えるのかこいつ。

342 :デフォルトの名無しさん:2014/08/21(木) 18:22:10.88 ID:HrzkPJhU
コンパイラが古くて、>>の間にスペースがいるとかじゃね.

343 :デフォルトの名無しさん:2014/08/21(木) 18:29:27.67 ID:bEzT5YFt
C++11に対応したコンパイラならスペース必要ない

344 :デフォルトの名無しさん:2014/08/21(木) 18:54:12.63 ID:npCrOf/M
見間違えるならそういうエラー自体も出せない気がするがw

345 :デフォルトの名無しさん:2014/08/21(木) 19:06:26.35 ID:wIaa1KaJ
class クラスA { クラスB *classb };
class クラスB : protected クラスA {・・・};

クラスA *classA;
classA = (クラスA*)new クラスB // クラスBのコンストラクタも呼びたい
classA->classb = classA;

これって保証されてる?

346 :デフォルトの名無しさん:2014/08/21(木) 19:08:10.55 ID:UsVQVoNt
>>332
Boost.SerializationはMatrix型なんて知らないんだから
ar & dataじゃだめで、サンプルのようにシリアル化する要素を並べる必要がある

347 :デフォルトの名無しさん:2014/08/21(木) 19:10:33.49 ID:Dozm2kfh
class クラスA { クラスB *classb; };

classA = new クラスB;
classA->classb = (クラスB*)classA;

348 :デフォルトの名無しさん:2014/08/21(木) 21:30:01.49 ID:tdXshhs4
>>346
例のPOINTのrpointなら要素の数は2つと決まっていますが、
Matrix<double,2>のdataの要素は2行2列なら4つですし
3行3列なら9つになりますよね
シリアライズにマトリックスのことを教えるにはどうすればいいですか?

ar & data(n1,n2) というのを試したのですがエラーでした

349 :デフォルトの名無しさん:2014/08/21(木) 21:47:07.68 ID:IfLWVjiJ
windowsのシステムコールの一覧って何処かに有りませんか?

350 :デフォルトの名無しさん:2014/08/21(木) 21:50:12.90 ID:rPSQmsIL
http://msdn.microsoft.com/en-us/library/

351 :デフォルトの名無しさん:2014/08/21(木) 22:01:50.26 ID:3TFtsh2S
>>348
やってみたらうちのコンパイラはこれで通ったぽよ
template <class Archive>
void serialize(Archive& ar, Matrix<double,2>& data, const unsigned int version) {
for (Index i = 0 ; i < data.dim1() ; ++i) {
for (Index j = 0 ; j < data.dim2() ; ++j) {
ar & data(i, j);
}
}
}

352 :デフォルトの名無しさん:2014/08/21(木) 22:11:21.24 ID:3TFtsh2S
キッチリやるなら Matrix のサイズとかも archive して、
復元時はサイズあってるかチェックとかしたほうがいいカモ

353 :デフォルトの名無しさん:2014/08/22(金) 00:30:59.83 ID:u/WeUPxR
>>351
通ったぽよおおぉぉぉぉ
ありがとうございます
なるほどループですか、思いつきませんでした

>>352
読み取る時、先にサイズだけ読み取りチェックするわけですね?


シリアライズで読み取るとき、同じ型に数値などをコピーしますよね
この時コピーするのではなく、参照で受け取ることは可能ですか?

354 :デフォルトの名無しさん:2014/08/22(金) 07:01:16.32 ID:WLzauBVV
>>331
どもです

355 :デフォルトの名無しさん:2014/08/22(金) 08:37:35.48 ID:5g7PHH2g
>>327
sting ans= ""; ans[0] = 'a'; ans[2]= b'';
 ↓
string ans = ""; ans += 'a'; ans += 'b';

356 :デフォルトの名無しさん:2014/08/22(金) 10:01:13.53 ID:WLzauBVV
aoj1001の問題。皆さんのお陰でコードかけてサンプルinput/outputもクリアしたのですが、いざ提出するとruntime errorになります。
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1001
http://ideone.com/ioWlkL
お手上げです・・・

357 :デフォルトの名無しさん:2014/08/22(金) 13:05:08.73 ID:+aEHZ0rF
Windows9、来月発表へ
http://anago.2ch.net/test/read.cgi/bizplus/1408674217/

358 :デフォルトの名無しさん:2014/08/23(土) 03:09:34.84 ID:mC1K7Tt9
windowsのシステムコールの一覧って何処かに有りませんか?

359 :デフォルトの名無しさん:2014/08/23(土) 05:52:45.79 ID:pxFb4e0Q
Win32 API 一覧
でググったら出てくる
http://codepanic.itigo.jp/win32.html
http://msdn.microsoft.com/ja-jp/windows/hh240557
みたいなのとか

360 :デフォルトの名無しさん:2014/08/23(土) 08:31:46.06 ID:rRuNrHr1
au氷水ディレクター戦争指名タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり塩肉マンつばめの巣担々麺野菜炒めラーメン

au氷水ディレクター戦争指名タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり肉マンつばめの巣塩担々麺野菜炒めラーメン

au氷水ディレクター戦争指名タイステーキ万国ニューヨークブカ牛肉直輸出制限業者議論病院雇用市議しょうゆダシマクッロスさむらい山雪光金ガンダム風ミックドラ社員あかうんとパズ豚骨のり肉マンつばめの巣塩担々麺野菜炒めラーメン

ニンニクヤーフォー低額土地NHK名古屋遅延電池切れ福岡損保新規駐車近代ゲームフジワイプ転職提案ラーメン
abk公式漏洩安保険王なにあげてんだよ?「わー!ふーう?」↓↓★★↓↓宿題通調印鑑カウントダウン息子議員国会大学生

361 :デフォルトの名無しさん:2014/08/23(土) 12:54:37.85 ID:Bp5UQFmC
クラス名_private.cpp
クラス名_protected.cpp
クラス名_public.cpp

こうやってクラスのメンバ関数の定義をファイルで分けるってやりすぎ?

362 :デフォルトの名無しさん:2014/08/23(土) 12:57:18.97 ID:r0+/L/Ow
好きにしろよw

363 :デフォルトの名無しさん:2014/08/23(土) 12:58:34.68 ID:1z1AuVul
>>361
なんのためにそんなことしたいののかわからんので、なんとも言えん

364 :デフォルトの名無しさん:2014/08/23(土) 13:05:08.95 ID:Z98JwpZH
VC++で関数内で宣言するstatic変数のスレッドセーフはまだ保証されていませんか?
保証されていない場合、代わりに何を使いますか?

int object::atom()
{
  static int r = 0;
  // rに何かを代入
  return r;
}

365 :デフォルトの名無しさん:2014/08/23(土) 13:08:22.11 ID:3KKwEl/4
されてる

366 :デフォルトの名無しさん:2014/08/23(土) 13:14:13.59 ID:Z98JwpZH
>>365
検索するとVC2013でも保障されていないと出てくるのですが。

367 :デフォルトの名無しさん:2014/08/23(土) 13:18:39.50 ID:3KKwEl/4
>>366
rの初期化が2度起こるかって話だと思った
それなら起きないし
それ以外で同時に別スレッドから変更したらおかしくなるのは当たり前
staticつけたからってその変数がatomicになるわけじゃない
std::atomic使いなさい

368 :デフォルトの名無しさん:2014/08/23(土) 13:22:54.09 ID:Z98JwpZH
>>367
なるほど。
atomic使うものなんですか。
昨日からここでずっと詰まってました。

どうもありがとです。

369 :デフォルトの名無しさん:2014/08/23(土) 13:30:54.37 ID:P/wcKMRu
https://sites.google.com/site/cpprefjp/implementation-status
ここみる限り正式リリースされてるVC++(2013まで)では対応してないぞ。
次のバージョンから

370 :デフォルトの名無しさん:2014/08/23(土) 13:35:23.24 ID:P/wcKMRu
>>367
だから二度初期化が動く可能性はある。
基本的な型であればatomic使えでOKなのは変わらないけど。

371 :デフォルトの名無しさん:2014/08/23(土) 14:20:01.02 ID:E/A2CY4G
質問です

メモリ解放忘れた場合って、そのプログラムが終了した時点で自動的に解放されるんですか?
それとも再起動するまでずっと確保されて利用不能?

372 :デフォルトの名無しさん:2014/08/23(土) 14:52:05.38 ID:IA1PXU7l
>>371
プロセス終了時に、OSが片付ける

373 :デフォルトの名無しさん:2014/08/23(土) 15:09:20.27 ID:xMD8sMaI
WindowsとかUnixとか普通のPC用マルチタスクOSならそれでおk
組み込みとかでチープなOSもどきを使ってたらわからん

ただしそれをあてにして小さな手抜きをするのは罪

374 :デフォルトの名無しさん:2014/08/23(土) 15:25:16.20 ID:Bp5UQFmC
>>362-363
ありがとう

1つのcppにあったら長すぎると思ったけど
あっちこっちに点在して逆に面倒そうだったからやめたわ

375 :デフォルトの名無しさん:2014/08/23(土) 15:27:03.99 ID:E/A2CY4G
>>3723-373
ありがとうございます

376 :デフォルトの名無しさん:2014/08/24(日) 03:15:48.91 ID:deJryxb/
C++で小数点計算すると
例えば6÷9=0.666‥.666... となるのが
0.666...666500 となるんだけど
どうして0.666...666600 にならないの?
それはいいとして、せめて精度悪くなってもいいから0.666...667にしたいんだけど
いい方法ない?

377 :デフォルトの名無しさん:2014/08/24(日) 03:42:03.72 ID:xqGwHcS8
>>376
分数であつかえばいいよ

378 :デフォルトの名無しさん:2014/08/24(日) 07:05:19.52 ID:eFBuPgHb
>>376
自分で丸め処理を書けばいいと思うよ。

379 :デフォルトの名無しさん:2014/08/24(日) 08:47:18.37 ID:DfnrmV8q
>どうして0.666...666600 にならないの?

どうしてなると思ったの?
真の解を扱えないから捨ててるのに
真の解に基づいた結果を出せとはこれ如何に

380 :デフォルトの名無しさん:2014/08/24(日) 08:49:03.81 ID:PkG6bn0Z
浮動小数点数という

見逃しやすい罠がたくさんあって自称プロでもきちんと理解してないのがいる

きちんと勉強して隅々まで把握するか
なるべく整数のまま扱うか
どちらかを選べ

381 :デフォルトの名無しさん:2014/08/24(日) 11:04:18.54 ID:qI+Ajv9v
GUIを取り扱うライブラリを作っているんだけど、コントロールを識別したい時ってあるじゃないですか。
今、一つ一つのコントロールが使うメモリー量を小さくすることもできるように、
HTMLのCSSみたいなものを作っているんだけど、コントロールのデフォルトのスタイルも
有ったほうが良いですよね。
そこでコントロールを識別したい。
こういう時、C++にはstd::type_infoがあるんだけど、RTTIが必要ということで
クラスに値をハードコーディングするのとどっちが良いか迷います。

ここら辺、どうなんですかね?

382 :デフォルトの名無しさん:2014/08/24(日) 11:19:42.73 ID:PkG6bn0Z
GUIならプラットフォーム決め打ちで割り切ったほうがいいと思うけど

383 :デフォルトの名無しさん:2014/08/24(日) 11:25:12.86 ID:qgRrgrzi
RTTI ってコンパイラ違う者同士だと互換性なかったりしたような
DLL とかにするならやめたほうがよさそう
コンパイラ決め打ちなら RTTI でもよさそうだけど

384 :デフォルトの名無しさん:2014/08/24(日) 11:29:55.38 ID:qI+Ajv9v
>>382
そういうところも考えどころなんですよね。
とりあえず、Win32とXlibでは動くようにしたいんだけど。

>>383
そういう問題もありますよね。
やはり、enum使ってハードコーディングですかね?

385 :デフォルトの名無しさん:2014/08/24(日) 11:44:18.30 ID:qgRrgrzi
クラス毎にマクロ1行書いてオレオレ型情報定義してるライブラリはけっこうあるよね
MFC とか wxWidgets とかそうだった気がする (最近の流行りは知らないけど)
後々の拡張性とか考えると自前でやるほうが柔軟かも。いちいちクラス毎に書くのがいけてないけど

386 :デフォルトの名無しさん:2014/08/24(日) 11:50:35.41 ID:dSaHZUjz
デフォルトって外部から決めるもんか?
普通自分自身にやらせね?

387 :デフォルトの名無しさん:2014/08/24(日) 11:54:18.65 ID:trM/iCpc
C++インターフェースを使う以上コンパイラ依存するのは避けられない。
厳密にやるならDLLのインターフェースは全部Cにするか、あるいは非常に
面倒くさいがCOMにするか。

俺なら
・コンパイラは限定する
・型情報enumを返すCインターフェースを用意する
・その上でRTTIも併用してdynamic_cast

メンバにアクセスする必要がなく、型がわかればいいというだけなら2番目だけでもいい。

388 :デフォルトの名無しさん:2014/08/24(日) 12:07:13.78 ID:EYMdVqe7
西アフリカで、アウトブレイクした潜伏期間延長型エボラの死者・罹患者の数を散布図にし近似曲線を出してみたら
片対数グラフで直線だから既に指数関数的増加だった

2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱

2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生

2015年大晦日で1000万人。

ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している

エボラ出血熱は蚊やアブに刺されただけで感染する。

:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では

や る 気 は 皆 無

389 :デフォルトの名無しさん:2014/08/24(日) 12:28:53.83 ID:qI+Ajv9v
>>386
そういうものなんですかね?
今のところ、レイアウトやスタイルは完全に分離して、差し替えできるようにしているのですが。
ボタンや文字などの描画もrenderという形で分離できないか今考えてるところです。

>>385-387
とりあえず、無理と判るまでenumで行ってみようと思います。

390 :デフォルトの名無しさん:2014/08/24(日) 13:46:05.38 ID:Mh11Tb7V
型情報ははやいうちにクラスにしたほうがいいと思うよ
enumはすぐできて最初は楽なんだけどね
どうしたって保守性が低くならざるを得ない

391 :デフォルトの名無しさん:2014/08/24(日) 15:37:19.84 ID:qI+Ajv9v
>>390
どういった実装になるかわかる書籍かウェブサイトありませんか?
まったく想像がつきません。

enumで実装すると保守性が低いのは軽く想像つきます。

392 :デフォルトの名無しさん:2014/08/24(日) 15:41:50.39 ID:2hAEg4zm
コンパイラ決めうちして普通に書けばいいよ。コンパイラが変わったらその都度全部ビルドし直せば。

393 :デフォルトの名無しさん:2014/08/24(日) 15:49:53.98 ID:qI+Ajv9v
>>392
それはstd::type_infoを使うということですか?

394 :デフォルトの名無しさん:2014/08/24(日) 17:14:59.62 ID:JA3xYGgg
自前RTTI、自分はこんな感じでやってる。
http://ideone.com/Rnto1b

うまいことマクロにしておけば、自前RTTIのために書き足すコードはヘッダ側1行、定義側1行で済む。
基底クラスポインタを持たせれば、自前dynamic_cast実装とかもできる。

395 :デフォルトの名無しさん:2014/08/24(日) 18:13:42.10 ID:qI+Ajv9v
>>394
なるほど。
それじゃそのクラスをクラス固有の情報を保持するのと、クラスを識別するのと
両方に使っちゃおうかな。

396 :デフォルトの名無しさん:2014/08/24(日) 18:23:33.90 ID:qgRrgrzi
リフレクションとか充実してる他言語の方がこういうのは向いてるという説もある
まあマルチプラットフォームとかユーザー側の導入のしやすさとか全部満たそうとするとなかなか決定打なさそうだけど

397 :デフォルトの名無しさん:2014/08/24(日) 18:32:45.05 ID:2hAEg4zm
オレオレRTTI作るの何がメリットなん?

398 :デフォルトの名無しさん:2014/08/24(日) 19:02:38.96 ID:qgRrgrzi
実行時に外部の文字列パラメータでクラス名入力してそのクラスのオブジェクトつくるとかは
オレオレRTTIじゃないとできない気がするけど、そんな機能いらないなら、
最初は enum なり type_info なりでやって、それで実現できないことがあったらオレオレRTTIするのがよさそう。
あまり最初から壮大な計画立ててもうまくいくかわからん。

399 :デフォルトの名無しさん:2014/08/24(日) 19:07:15.64 ID:Mh11Tb7V
Windowsだとこの手の話は結局COMでいいじゃんってなる
MIDLを書こう

400 :デフォルトの名無しさん:2014/08/24(日) 21:16:18.17 ID:mYuQxuS2
WindowsだとRTTIでいいやんてなる
貧弱なコンパイラしかない環境移植用か

401 :デフォルトの名無しさん:2014/08/24(日) 22:30:50.56 ID:W6iBlh4S
俺らにウマシな麺食わせてくれる丸亀製麺にMAJI感謝

俺暴走機関車

麺食べ出したら止まらない

客も皆止まらない

両手を上げてついてこい

俺のライムについてこい

ライムはないが過去にはスダチ

ウマシなうどんにMAJI感謝

YOYOチェケラ♪

402 :デフォルトの名無しさん:2014/08/25(月) 13:10:50.11 ID:fLIb5It/
char dat[2];

dat[0] = 0x02;
dat[1] = 0x46;

とした配列をsprintfを使って「0246」とするのはどのようにすればいいでしょうか?
実際にはdatの長さは可変です

403 :デフォルトの名無しさん:2014/08/25(月) 13:12:11.89 ID:ozP5Z7zn
"%02X%02X", dat[0], dat[1]

404 :デフォルトの名無しさん:2014/08/25(月) 15:05:54.79 ID:ye0flvPa
https://twitter.com/classtosscess/status/503784359904542722

大学のC言語の試験でif(!a)みたいに書いたら、何が起こるのこれ?って教官に聞かれて絶望したのは懐かしい。
if(a == 0)って書かないとわからない人が教える立場とかちょっと。

405 :デフォルトの名無しさん:2014/08/25(月) 15:16:26.60 ID:3wa6ec9J
自分で思うところを言い出すことが出来ず他に持ち込んで突かせようとするカス

406 :デフォルトの名無しさん:2014/08/25(月) 15:24:14.86 ID:psEHLa8m
>>405
すげぇひねくれた性格してんなぁ
ただドヤバカを晒してるだけだろこれ

407 :デフォルトの名無しさん:2014/08/25(月) 15:24:30.06 ID:fLIb5It/
>>403
ありがとうございます

408 :デフォルトの名無しさん:2014/08/25(月) 15:37:14.04 ID:ozP5Z7zn
>>406
ID変えたんですねわかります

409 :デフォルトの名無しさん:2014/08/25(月) 15:38:36.47 ID:u8KaZ62u
自演認定は精神障害の入り口らしいから気をつけなよ

410 :デフォルトの名無しさん:2014/08/25(月) 15:42:47.21 ID:ozP5Z7zn
>>409
ネタにマジレスですねわかります

411 :デフォルトの名無しさん:2014/08/25(月) 15:50:59.17 ID:NMnIXJNo
ID:ozP5Z7znはなんでいきなり顔真っ赤なの?
>>404で晒されてる本人なの?

412 :デフォルトの名無しさん:2014/08/25(月) 16:13:06.78 ID:Y64dGgkk
void *buf = malloc();
try{
ReadSomething(buf);
}catch(...){
free(buf); //読み込みに失敗したらバッファポインタを破棄
throw; //再スロー
}
return buf; //成功したらバッファを返す
のように、何か処理してから再スローするのを
vc++の__try __exceptでどのように書けば良いですか?

413 :デフォルトの名無しさん:2014/08/25(月) 16:53:38.39 ID:FJ9UQc5Q
QZの3回線自演

414 :デフォルトの名無しさん:2014/08/25(月) 17:08:09.93 ID:ozP5Z7zn
>>411
顔が見えるんかよ

415 :デフォルトの名無しさん:2014/08/26(火) 14:17:31.65 ID:YMdvm9EZ
class Array2D
{
public:
Array2D() : mArray( 0 ){}


コレの最後の行
コンストラクタだってことは分かるけど何をしてるか分からない
誰か助けて

416 :デフォルトの名無しさん:2014/08/26(火) 14:26:28.84 ID:YMdvm9EZ
すんません自己解決しました
mArray = 0;だったらしいです
お騒がせしました!

417 :デフォルトの名無しさん:2014/08/26(火) 18:23:49.39 ID:46MkRGQY
class Sample{
private:
メンバ変数・関数有り
public:
コンストラクタ・デストラクタは同じ処理
void func(void);
};

Sample sample[5];

この状態でfunc()の処理を別々にする事はできますか?

sample[0].func();の処理と
sample[1].func();の処理は別の処理って事です

func0〜func4まで用意するのは
sample[0]ではfunc1〜func4は不要なので
無駄と思って他のやり方を探しています

418 :デフォルトの名無しさん:2014/08/26(火) 18:30:02.02 ID:3aRL0GfD
なんか設計間違ってる気がするけど(同じクラスなんだから同じ処理であるべきと思う)
例えば
class Sample{
static int num_instances;
int _index;
public:
Sample(){_index = num_instance++;...}
void func(void){switch(_index){case 0:...} }
};
int Sample::num_instances = 0;

419 :デフォルトの名無しさん:2014/08/26(火) 18:32:04.02 ID:beppGarV
その状況で、sampleが配列である理由が分からない。

420 :デフォルトの名無しさん:2014/08/26(火) 18:36:53.00 ID:46MkRGQY
>>418
ありがとうございます

やっぱりそういうやり方しかないかな

Sample
 メニュー1つにつき1つ確保
 * メインウィンドウのホップアップメニュー1つ
   サブウィンドウのポップアップメニュー2つなら3つ
コンストラクタ
 メニュー読み込み・設定
デストラクタ
 メニュー削除・リリース
func()
 メニュー毎の処理

ってやってるんだけど他にいい方法あるかな?

421 :デフォルトの名無しさん:2014/08/26(火) 18:38:13.31 ID:46MkRGQY
>>419
その理由はこの件では関係無い
理由を話した所で同じIDからレスは無いだろうけど

422 :デフォルトの名無しさん:2014/08/26(火) 18:44:04.03 ID:3aRL0GfD
>>420
funcを関数ポインタにして、後で関数ポインタを代入
むりくり一つの関数に押し込めるよりは見た目が良くなる、位の理由だけど

423 :デフォルトの名無しさん:2014/08/26(火) 18:45:18.37 ID:vTZxB5CV
継承してfuncオバーライドした方がよくね

424 :デフォルトの名無しさん:2014/08/26(火) 18:57:29.68 ID:46MkRGQY
>>422-423
その2つ試してみるよ
ありがとうございましあ

425 :デフォルトの名無しさん:2014/08/26(火) 18:58:34.36 ID:46MkRGQY
た!

426 :デフォルトの名無しさん:2014/08/26(火) 19:15:12.60 ID:YlJj/zQ2
配列にすると、派生クラスが面倒なことになる

427 :デフォルトの名無しさん:2014/08/26(火) 23:35:20.34 ID:RPyTIIO3
>>421
>419も>418同様設計の不備を指摘しているんだと思うぞ。
まぁ、色々やってみるがいいさ。

428 :デフォルトの名無しさん:2014/08/26(火) 23:39:51.31 ID:jbWbUIb/
>>418
みたいなコードを職場で見たら発狂するわ

429 :デフォルトの名無しさん:2014/08/26(火) 23:41:24.34 ID:YRa/ZVIx
ごく普通のコードじゃねーの
変数名が糞だけど

430 :デフォルトの名無しさん:2014/08/27(水) 18:30:52.39 ID:+mS2YVhy
c++11/14とboostのどちらを優先させて勉強した方が良いですか?

431 :デフォルトの名無しさん:2014/08/27(水) 18:43:22.60 ID:sWLZW0su
boostはいらん。バグあっても、機種・コンパイラ依存が激しくても対応できる技術がある奴が使え。

432 :デフォルトの名無しさん:2014/08/27(水) 18:44:52.94 ID:of2UETDg
boostはSTLで賄えない時に使うものだから11/14から

433 :デフォルトの名無しさん:2014/08/27(水) 18:47:49.14 ID:+mS2YVhy
c++11に関する和書でいいのってありますかね?

434 :デフォルトの名無しさん:2014/08/27(水) 18:59:40.18 ID:of2UETDg
リファレンスなら「C++ ポケットリファレンス」、C++11に対応したライブラリの逆引きができる
初心者向けじゃないけど持っておきたいものは「C++テンプレートテクニック第2版」
※初版はC++11に対応してないので注意

あとは本じゃないけどC++11についてのSlideShare漁るのがコンパクトにまとまってるのでお勧め

435 :デフォルトの名無しさん:2014/08/27(水) 20:28:44.24 ID:VV1k1rmO
今時STLなんて使ってる奴は
C++11なんて要らないだろう

436 :デフォルトの名無しさん:2014/08/27(水) 21:38:02.05 ID:9C5BDVDX
ライブラリのリファレンスならC++11のFDIS一択だろ
言語のリファレンスなら江添のやつでも読んどけ

437 :デフォルトの名無しさん:2014/08/27(水) 21:52:30.48 ID:+mS2YVhy
>>436
fdisって日本語で出てますかね?

438 :デフォルトの名無しさん:2014/08/27(水) 22:09:44.39 ID:fU0DoNit
ちょっとスレちな気もするけど質問します
VS2013でフルティックをビルドする方法を教えてください
2008、2010用のソリューションファイルはあるけど、2013用のが無くて困っています

439 :デフォルトの名無しさん:2014/08/27(水) 22:09:54.91 ID:sWLZW0su
最終草案とか規格書とかか?
それで勉強する必要がない。
コンパイラを作るやつ向けだろ。
違うが、日本語の勉強に日本語の辞典を順に覚えていくようなことだ。

440 :デフォルトの名無しさん:2014/08/27(水) 22:12:27.62 ID:sWLZW0su
古いバージョンは、そのまま読み込んだら2013が自動変換するはずだ。

441 :デフォルトの名無しさん:2014/08/27(水) 22:18:39.79 ID:EZjoqbjM
>>430
間違いなくc++11だね。
何てったって標準規格なんだから。
ただ、日本語の書籍は皆無に等しいかも。
と言うものの、c++03までを熟知してるなら、差分は大した事ないので、ネット情報とfdisで十分だと思う。
c++03が危ういなら、先ずはそちらから勉強すると良い気がする。
ただ、アルゴリズムとラムダ式のコンボは手軽で強力なので、ラムダ式は平行して勉強しとくと良いと思う。

442 :デフォルトの名無しさん:2014/08/27(水) 22:58:26.02 ID:fU0DoNit
>>440
ありがとう
出来たよ

443 :デフォルトの名無しさん:2014/08/27(水) 23:34:37.56 ID:6l9mfgq+
STLリファレンスはいつもここだな
http://www.cplusplus.com/
日本語のいいリファレンスサイトない

444 :デフォルトの名無しさん:2014/08/28(木) 20:33:32.07 ID:3R7BbeAy
C++マニアック、なるサイトをよく参照するけど、あれってSTLはカバーしてなかったっけ‥

445 :デフォルトの名無しさん:2014/08/29(金) 01:16:18.73 ID:b0G4rJJs
c++ってもう14なのか
11出た頃が昨日のようだ
働き出すと人生終わりだね

446 :デフォルトの名無しさん:2014/08/29(金) 20:21:51.81 ID:N9rSX/Vc
いえまだ11です

447 :デフォルトの名無しさん:2014/08/29(金) 22:04:37.31 ID:0lr9wl8v
>>443
https://sites.google.com/site/cpprefjp/

448 :デフォルトの名無しさん:2014/08/30(土) 08:09:23.37 ID:Um2uph1/
C++のラムダ式の使いどころが分かりません。
とりあえずググって出てきたサンプルを参考にラムダ式でhello world的なものを書いてみました → http://ideone.com/1IHGsT
実用的とは言いがたいですね (;´Д`)

実用的(?)なラムダ式の使い方を簡単な例を交えて説明してるサイトとかないでしょうか?
ラムダ式のメリット、デメリット、こういう事に使うと便利だよ、などなど教えて頂けると嬉しいです

449 :デフォルトの名無しさん:2014/08/30(土) 11:54:15.01 ID:Ji1S5iDD
ラムダ式は関数オブジェクトの手間を無くしして流れがあちこちに飛ばずに書ける(読める)恩恵がでかいから、そのコードでも十分役立ってるよ
戻り値は必要ない等の細かい点は関数オブジェクトとラムダ式の違いとは無関係だから触れないでおく

450 :デフォルトの名無しさん:2014/08/30(土) 15:50:05.59 ID:uxwgTRvs
>>448
わざわざ名前をつけて関数オブジェクトを作るほどではないけど、関数オブジェクトが必要な所で使うと便利。
例えばSTLのsortで、今回だけ通常とは違ったsortをしたいって時に、比較関数をラムダ式で与えたり。

451 :デフォルトの名無しさん:2014/08/30(土) 16:32:38.88 ID:JAT13qNM
【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚

452 :デフォルトの名無しさん:2014/08/30(土) 17:35:27.92 ID:Um2uph1/
>>449-450
ありがとうございます。
いまいち理解できてませんが要するに、記述の簡潔さや柔軟性を向上させるのに役立つって理解でいいのでしょうか?

453 :デフォルトの名無しさん:2014/08/30(土) 17:37:21.34 ID:JAT13qNM
その場限りの関数に、名前なんていらねえ!

454 :デフォルトの名無しさん:2014/08/30(土) 17:49:05.52 ID:tJLON9SS
キスは交わしたけど名前は知らない♪
(*´∇`*)

455 :デフォルトの名無しさん:2014/08/30(土) 20:29:06.21 ID:zX0EXm2R
42って何か意味のある数字なの?

456 :デフォルトの名無しさん:2014/08/30(土) 20:48:50.49 ID:iQ5rULiv
「銀河ヒッチハイク・ガイド」っていうSF小説で出てくるネタ
42を「生命、宇宙、そして万物についての究極の疑問の答え」としている
Wikipediaにそこそこ詳しい解説がある

457 :デフォルトの名無しさん:2014/08/30(土) 20:59:07.28 ID:zX0EXm2R
>>456
規格に42がよく出てくるのは、それを意識してるのかな?

458 :デフォルトの名無しさん:2014/08/30(土) 21:59:22.00 ID:x9ODXT5s
>>457
つ ナンバー23

459 :デフォルトの名無しさん:2014/08/30(土) 22:24:52.62 ID:gK3JoQWJ
数値に意味のない説明書きには42を使うことにしている

460 :デフォルトの名無しさん:2014/08/30(土) 22:40:22.59 ID:JAT13qNM
今度から俺もそうしよう

461 :デフォルトの名無しさん:2014/08/31(日) 00:20:28.84 ID:fFHXuzxL
auto f = (x) { x +1; }
y = f(1); // 2

最悪でもこれぐらい省略出来るまではλは中途半端なゴミとして扱われるだろうね
次期バージョンの生産性向上に期待

462 :デフォルトの名無しさん:2014/08/31(日) 00:30:45.83 ID:ud58e6vx
14になればラムダ式の引数にもauto使えるから幾らかはましになるね

463 :デフォルトの名無しさん:2014/08/31(日) 11:02:06.71 ID:eBtPWptu
テンプレートの濫用はバグらせた時に悪魔に変わる

464 :デフォルトの名無しさん:2014/08/31(日) 11:16:22.74 ID:tybwCHPq
早急にコンセプトさん入れないと

465 :デフォルトの名無しさん:2014/08/31(日) 11:41:10.70 ID:nYTEAaY7
>>459
規格としてって事?

466 :デフォルトの名無しさん:2014/08/31(日) 23:01:21.45 ID:in6vp6NN
>>461
なんで[ ] 入れちゃったんだろうね

467 :デフォルトの名無しさん:2014/08/31(日) 23:04:05.66 ID:815rqt02
他の式と明確に区別するためだろ

468 :デフォルトの名無しさん:2014/08/31(日) 23:05:46.04 ID:fFHXuzxL
なくても区別できるだろうに

469 :デフォルトの名無しさん:2014/08/31(日) 23:41:05.84 ID:H+zMJry1
>>461
#define f(x) (x+1)

470 :デフォルトの名無しさん:2014/09/01(月) 07:04:07.14 ID:vS3rg8JQ
>>469
なにいってんだこいつ

471 :デフォルトの名無しさん:2014/09/01(月) 08:13:33.64 ID:xK7WN8k/
>>461 ってもしかして
auto f = (x) { x +1; };
f = (y) { y*2; };

こういうのがやりたいのん

472 :デフォルトの名無しさん:2014/09/01(月) 11:31:08.31 ID:wuF9EyNJ
値キャプチャ、参照キャプチャの区別の為じゃね

473 :デフォルトの名無しさん:2014/09/01(月) 16:16:56.30 ID:nQghNeel
クラス内でopenだからとそのままはやばい、きちんと何をを明確にしないと

474 :デフォルトの名無しさん:2014/09/03(水) 00:13:09.25 ID:ysyzF98G
>>473
せめて省略ぐらいは‥

475 :デフォルトの名無しさん:2014/09/03(水) 10:11:02.38 ID:U3fwOqWK
省略すると文法的に曖昧な部分が生じそうな気がする
例示は思いつかないけど

476 :デフォルトの名無しさん:2014/09/03(水) 11:46:45.79 ID:b0guGEId
WindowsXPにも対応してるラムダ式試せるコンパイラ教えてください。

477 :デフォルトの名無しさん:2014/09/03(水) 12:12:06.62 ID:87udmVqa
>>476
lisp

478 :デフォルトの名無しさん:2014/09/03(水) 12:38:17.01 ID:ekTu9Izi
LLVM 3.4.1 の clangでいけるんじゃないの
自分で確かめる気はないけどw

479 :デフォルトの名無しさん:2014/09/04(木) 04:20:37.95 ID:NYUvnHVk
>>477
ワロス

480 :デフォルトの名無しさん:2014/09/04(木) 06:22:45.97 ID:PztQkP0p
1個1個確かめるのに時間がかかるのが
こういう整理されてないカス言語の特徴
お前らはよくやってるよな、人生かけた罰ゲームなんか?
誰もC++やれなんて強制してないのに

481 :デフォルトの名無しさん:2014/09/04(木) 06:28:31.60 ID:jM57T3VI
つ 規格票

482 :デフォルトの名無しさん:2014/09/04(木) 06:31:32.90 ID:VFEaEvfK
>>480
むしろ C の方が罰ゲーム‥
おすすめの言語はなに?

483 :デフォルトの名無しさん:2014/09/04(木) 08:59:56.12 ID:GJ/2dNiO
Cと比べればC++は罰ゲームだな

484 :デフォルトの名無しさん:2014/09/04(木) 09:05:44.98 ID:BSiyRAZY
Cのほうが罰ゲームだろ
もう使う気になれねーよ

485 :デフォルトの名無しさん:2014/09/04(木) 09:07:56.58 ID:CIIvLb1C
規模が小さいならC言語のほうが楽

486 :デフォルトの名無しさん:2014/09/04(木) 09:32:45.66 ID:t+YSKgeI
>>482
ネイティブバイナリじゃなくても良いなら python
ネイティブにこだわるなら D

487 :デフォルトの名無しさん:2014/09/04(木) 09:35:03.85 ID:GJ/2dNiO
てきとうに書くのはC++のが楽だけど、正しく書くことや
他人の書いたもののレビューはCの方が楽。
見た目とやってることが一致している保証がなさすぎる

488 :デフォルトの名無しさん:2014/09/04(木) 12:35:31.88 ID:D2aVxmrD
Dには期待してる、期待してた

489 :デフォルトの名無しさん:2014/09/04(木) 15:39:16.19 ID:FPrVBZRJ
俺たちの戦いはこれからだ

490 :デフォルトの名無しさん:2014/09/04(木) 17:46:18.32 ID:Z7CwwPLc
いやCはオーバーロード無いから
関数名が長くなって見辛い。
他人のコード読むのは悪夢

491 :デフォルトの名無しさん:2014/09/04(木) 18:38:11.89 ID:NYUvnHVk
でも一番融通効くのもC++なんだよなあ

492 :デフォルトの名無しさん:2014/09/04(木) 18:41:25.47 ID:NYUvnHVk
まあpythonが一番掲げてる哲学に合致してる美しい言語だと思うけど

493 :デフォルトの名無しさん:2014/09/04(木) 20:06:40.80 ID:IDkAxyOU
>>491
範囲 for とか、つおい enum とか、おれのなかではかなり理想的な言語になったわ

494 :デフォルトの名無しさん:2014/09/04(木) 20:10:49.86 ID:aAnKwSol
lispってあの括弧書きまくる奴か!?

495 :デフォルトの名無しさん:2014/09/04(木) 20:20:58.99 ID:IDkAxyOU
>>494
ま、まあな...

496 :デフォルトの名無しさん:2014/09/04(木) 21:20:12.77 ID:D2aVxmrD
かっこう良いだろ

497 :デフォルトの名無しさん:2014/09/04(木) 21:47:08.46 ID:Z7CwwPLc
Postscriptオススメ

498 :デフォルトの名無しさん:2014/09/04(木) 21:54:28.82 ID:iYzFootC
何故C/C++のスレで他言語のおすすめしてるんだ……

499 :デフォルトの名無しさん:2014/09/04(木) 21:55:18.93 ID:NYUvnHVk
scriptはpython
ネイティブはc++
インタプリタ系はjava
web(クライアント)はjavascript
に統一してくれりゃみんな幸せなのに

500 :デフォルトの名無しさん:2014/09/04(木) 21:59:32.14 ID:Dl7v7SB2
カテゴリーがいろいろとおかしい。

501 :デフォルトの名無しさん:2014/09/04(木) 23:06:23.56 ID:k+mGC+H3
バベルの塔だ
神が言語の多様性を是認した

502 :デフォルトの名無しさん:2014/09/05(金) 03:02:54.26 ID:i9wdgiB6
みんなでアセンブリ言語使えば解決

503 :デフォルトの名無しさん:2014/09/05(金) 04:34:55.14 ID:M1xT2eM2
すみません、c++のベクターについて聞きたいのですが、begin()で返ってくるイテレーターは双方向でしょうか?
it = v.begin(); ++it みたいなコードは見たことがあるんですが、--itみたいなコードを見たことがありません。
双方向な入出力可能なイテレーターだと思うのですが、確証がありません。
どなたかご存じの方がいましたら、教えて下さい。

504 :デフォルトの名無しさん:2014/09/05(金) 04:42:48.31 ID:F0C2JJRO
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10
SchemeとかLispとかいうカッコだらけですごくわかりにくい言語があることは知っているが、 最強とか主張する信者がいるらしいのでなるべく関わらないようにしている。

505 :デフォルトの名無しさん:2014/09/05(金) 04:53:07.40 ID:IY8fzgtW
>>503
はい

506 :デフォルトの名無しさん:2014/09/05(金) 06:10:59.95 ID:M1xT2eM2
>>505
ありがとうございます。

507 :デフォルトの名無しさん:2014/09/05(金) 10:55:57.52 ID:101gJ810
>>504
あくまで理念が最強ってことだろ

508 :デフォルトの名無しさん:2014/09/05(金) 12:42:28.12 ID:zgm2tMtu
>>504
まあ、無理にとは言わないけど、一度触ってみることをお勧めする
人口知能言語ともてはやされたのは伊達ではない

509 :デフォルトの名無しさん:2014/09/05(金) 13:05:40.08 ID:Yrvc7r6Z
直接書くものじゃなくてメタプログラムから生成するものだろ

510 :デフォルトの名無しさん:2014/09/05(金) 15:49:56.41 ID:JjYqHkIR
forth は括弧無くて良いよ

511 :デフォルトの名無しさん:2014/09/05(金) 20:55:14.30 ID:pEvoA04t
Forthは逆ポーランド記法だから、括弧はいらない

512 :デフォルトの名無しさん:2014/09/05(金) 21:38:24.07 ID:S0u/xy8l
>>509
慣れれば普通に書けるよ
エディタの支援があった方が楽だけど

>>510
Forth いいよね、むかしちっちゃなやつ作って遊んでた
とっくに息絶えた言語かと思ってたら、規格とかあったりして今でもメンテされてるんだな
ちょっとビックリした

513 :デフォルトの名無しさん:2014/09/05(金) 22:23:54.75 ID:0V7/GM0r
Postscript は forth の方言かインスパイアされたか知らないけど
かなり影響受けているな。

c/c++でこの手の言語作るのって面白い

514 :デフォルトの名無しさん:2014/09/06(土) 23:24:09.09 ID:SFv6X1gz
今日天下一プログラマーコンテストってのの本選やってたらしくみてみたが
ほぼC++とJAVAの人しかいないのね

515 :デフォルトの名無しさん:2014/09/06(土) 23:42:44.01 ID:yTDobe1v
影響というか、まんまforthじゃん

516 :デフォルトの名無しさん:2014/09/07(日) 14:28:18.98 ID:jToum1qW
俺がC++を駆使してエボラ出血熱を治療してやる。

517 :デフォルトの名無しさん:2014/09/07(日) 14:29:07.01 ID:6WTc15/U
目的と手段とのつながりは?

518 :デフォルトの名無しさん:2014/09/07(日) 23:02:56.23 ID:vUwQxq8N
ゲノムアナライズでもやるんじゃね

519 :デフォルトの名無しさん:2014/09/08(月) 01:42:44.79 ID:LiuBTFeI
鼻から悪魔だす要領でウイルスを駆逐するコードを書けば良い

520 :デフォルトの名無しさん:2014/09/08(月) 07:37:09.26 ID:tgnEbVO1
内部クラスをインターフェイスにすることに利点ってある?
曖昧な質問で申し訳ない

521 :デフォルトの名無しさん:2014/09/08(月) 10:06:48.11 ID:HG5jhBnv
複数の機能を持つ大きめのクラスのときに各機能を複数の内部クラスにわけて実装するとかの場合なら利点が無くもない

522 :デフォルトの名無しさん:2014/09/08(月) 18:14:21.52 ID:tgnEbVO1
だって内部クラスって外のクラスにアクセスし放題なんだぜ
publicじゃないけど一定条件では設定できる値とか
変態的idiomが作れる気がしない?
例えばファクトリに使ってみたりとか

523 :デフォルトの名無しさん:2014/09/08(月) 22:08:07.61 ID:8uBU6yep
お前が何を言ってるのか分からないが利点があると信じているならやればいい

524 :デフォルトの名無しさん:2014/09/08(月) 23:51:29.95 ID:LiuBTFeI
>>520
あるっつかデザインパターンでは日常的に使う

525 :デフォルトの名無しさん:2014/09/09(火) 02:31:47.71 ID:XEByUhi2
interatorなら使います

526 :デフォルトの名無しさん:2014/09/10(水) 23:32:48.53 ID:oypds7bC
c++11の可変長テンプレート引数について質問なんだけど

TemplateFunc<Reverce<int,char,int,long>::type>();

ってやるとTemplateFuncの可変長テンプレート引数に

TemplateFunc<long,int,char,int>();

ってなるようなメタ関数って作れますか?

527 :デフォルトの名無しさん:2014/09/11(木) 00:09:50.00 ID:HBxO88GU
reverceは引数リストの最初の要素だけを含むリスト(A)と残り全ての要素を含むリスト(B)に分けてreverce BとAを結合したリストを返す
ただし単要素のリストCに対してreverce CはCを返す

528 :デフォルトの名無しさん:2014/09/11(木) 00:11:31.69 ID:D3y2vgJ4
typeって可変長の型として宣言できましたっけ?

529 :デフォルトの名無しさん:2014/09/11(木) 10:18:00.17 ID:WRvwDZHr
>>526
作れない
17以降の未来なら作れるようになってるかもな

530 :デフォルトの名無しさん:2014/09/11(木) 16:59:16.52 ID:UFa1D9EQ
すみません、C++のクラスで質問があります

class CBase{ virtual bool func(); };
class CDerived : public CBase{ virtual bool func(); };

上記のようなコードで、基底クラスのfunc()を派生クラスでオーバーライドしたいのですが、
virtual bool func() = 0; のようにするとCBaseをインスタンス化することができなくなります。
基底クラスのインスタンス化を許しつつ、派生先でかならずオーバーライドして欲しいような関数を指定する方法ってないでしょうか?

531 :デフォルトの名無しさん:2014/09/11(木) 17:08:07.20 ID:ZEyp8++5
無い

532 :デフォルトの名無しさん:2014/09/11(木) 17:16:05.92 ID:SNUYrGFx
class CBaseBase{ virtual bool func()=0; };
class CBase : public CBase { virtual bool func(); };
class CDerived : public CBase{ virtual bool func(); };

533 :デフォルトの名無しさん:2014/09/11(木) 17:16:47.70 ID:UFa1D9EQ
>>531
ありがとうございます。やっぱり無理ですか・・・

class CSomething{ virtual bool func() = 0; }; class CBase : CSomething{}
みたいにしてCBaseを何かから派生させればいけそうな気もするけど、正直めんどくさい・・・

534 :デフォルトの名無しさん:2014/09/11(木) 22:28:05.32 ID:NVfZ6zE1
CBase で not impl 的な例外投げちゃうとか
コンパイル時オーバーライド強制はできないけど

535 :デフォルトの名無しさん:2014/09/12(金) 01:12:04.62 ID:ySEpW21e
こんな感じで代用できないものか
http://ideone.com/Kpx7Ci

536 :デフォルトの名無しさん:2014/09/12(金) 01:55:24.92 ID:Da2YxclE
仮想継承と自力でのなんちゃって仮想関数で代用という設計でならそれっぽくできるみたいだけどな

537 :デフォルトの名無しさん:2014/09/13(土) 04:58:15.86 ID:txEfL2uq
他の言語でもそういうことはさせないんじゃね?
例えばJavaの慣習だと>>532っぽくインターフェース、アブストラクトクラス、実装クラスに分ける

538 :デフォルトの名無しさん:2014/09/13(土) 13:57:44.28 ID:bbl9YCFb
>>503
ベクタ使うときは順番になめることが多いしそれより添え字アクセスが多い
あえてイテレータ使うのはコピーの時かな
あとリストもそうだけどイテレータで逆順になめるときは--it使わずにrbegin,rendの範囲で++itするよ

539 :デフォルトの名無しさん:2014/09/14(日) 23:56:39.78 ID:kn6kIRd5
c++にはLinqのような便利な機構は無いのですか?
自作するのは吝かではないのですが少々面倒です

540 :デフォルトの名無しさん:2014/09/15(月) 00:09:17.05 ID:2SghE5su
無い
ガベージコレクションが無いから
この先も作られることは無いだろう

541 :デフォルトの名無しさん:2014/09/15(月) 00:19:22.87 ID:uGBCfR31
メソッドチェーンであれば、
oven range を使えばそれっぽいことはできる

542 :デフォルトの名無しさん:2014/09/15(月) 00:45:51.38 ID:JpDdN08+
>>539
つBoost.RangeのOven拡張とPStade.Oven

543 :デフォルトの名無しさん:2014/09/15(月) 10:19:01.63 ID:hyfdWrFD
rangeはオペレータ|が気持ち悪すぎるので回避したいです
他になにかありませんか?
v = move( collection.Where(λ).Select(λ).OrderBy(λ).ToVector() );
このように使えたら嬉しいのですが

544 :デフォルトの名無しさん:2014/09/15(月) 10:33:49.02 ID:LnCi4M08
無い

545 :デフォルトの名無しさん:2014/09/15(月) 11:55:20.16 ID:xix8OsY4
気持ち悪いなら自分で作ればいい

546 :デフォルトの名無しさん:2014/09/15(月) 13:15:18.95 ID:JpDdN08+
. で繋げるライブラリは俺は知らないしUpperCamelCaseやC#LINQと同じ命名規則じゃないととなると絶望的、
どうしてもそれじゃないとダメなら自作するしかない、既存の薄いラッパーを作るのが一番楽

547 :デフォルトの名無しさん:2014/09/15(月) 14:07:54.38 ID:xix8OsY4
コレクションクラス作ってコレクションクラス返すWhere(λ)、Select(λ)、OrderBy(λ)メソット作ればいい
ToVector()メソッドだけvector返すイメージでしょ

548 :デフォルトの名無しさん:2014/09/15(月) 14:24:01.75 ID:JpDdN08+
>>547
それだと遅延評価にならないしメソッドチェーン毎に配列作り直すコスト発生しないか?
ファンクタを持つiteratorは流用ってなら分かるが

549 :デフォルトの名無しさん:2014/09/15(月) 14:29:33.50 ID:xix8OsY4
パラメタ蓄積しといてToVectorで実際に評価するやり方
クラスオブジェクト返すって言ってもレファレンス返せばいい

550 :デフォルトの名無しさん:2014/09/15(月) 14:46:04.53 ID:NA3WDzc4
bouble arr[512][512][512][512];

551 :デフォルトの名無しさん:2014/09/15(月) 14:49:55.04 ID:JpDdN08+
同一クラスオブジェクトを返すってのは戻り値のtemplate対応的に難しいんじゃないかな、
Boost.Ovenもcpplinqもメソッド毎に対のコンテナクラスを返す実装を取ってるわけだし
ただそれでいけるなら14の戻り値のauto待ちの必要が無いから便利そう

552 :デフォルトの名無しさん:2014/09/15(月) 14:56:26.21 ID:JpDdN08+
ああ、すまん、よく読んでなかった、コレクションクラスのインターフェースを用意すれば大丈夫だった

553 :デフォルトの名無しさん:2014/09/15(月) 15:22:32.75 ID:xix8OsY4
言葉足らずだったか
Corection& Select(...) { ...; return *this;} とかね
streamのwrite・・・str()や、basic_stringのappendつなげるようなやつ
やりたいこと限定すれば自分ですぐつくれると思うんだが

554 :デフォルトの名無しさん:2014/09/15(月) 15:43:51.96 ID:Q8z42wAc
libpngの使い方についてご相談したいことがあります。
pngをビットマップに解凍したい場合と、単にヘッダデータを読み込んで縦横のサイズを得たい場合とがあります。
その両方でpng_structp, png_infopの初期化処理が共通しているので、この部分を関数としてくくりだしたいのですが、

my_png_buffer png_init(unsigned char binaryData[], unsigned int fileSize, png_structp* pPng, png_infop* pInfo )
{
  my_png_buffer png_buff;
  { //初期化
    png_buff.data_len  = fileSize;
    png_buff.data    = binaryData;
    png_buff.data_offset = 0;
  }
  if (! png_check_sig((png_bytep)png_buff.data, 8) ) return png_buff;
  //読み込み
  png_structp ret_pPng= png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL,NULL,NULL);
  if (! ret_pPng) return png_buff;
  png_infop ret_pInfo= png_create_info_struct(ret_pPng);
  if (! ret_pInfo ) {
    png_destroy_read_struct (ret_pPng, NULL, NULL);
    return png_buff;
  }
  png_data_read(ret_pPng, &png_buff);
  png_read_info(ret_pPng, ret_pInfo );

  *pPng = ret_pPng;
  *pInfo = ret_pInfo;
  return png_buff;
  //(my_png_bufferなどはhttp://diary.awm.jp/~yoya/data/2008/07/14/png_test.cのコードをそのまま使用)
}
このように関数内でpng_structp, png_infopを初期化すると、呼び出し元でpng_read_imageを呼んだ時点で落ちてしまいます。
同じ内容のコードを呼び出し元でべた書きしている分には正常に動くのですが、何が間違っているのでしょうか?

555 :デフォルトの名無しさん:2014/09/15(月) 16:15:22.92 ID:LnCi4M08
pPngとpInfoに値が与えられないときがあるけど大丈夫なのか

556 :デフォルトの名無しさん:2014/09/15(月) 17:36:32.42 ID:dW4vlRng
関数内で宣言したstringオブジェクトは
returnで戻しても、壊れないよね。
=がオーバライドされてんだろうなぁと
独り言

557 :デフォルトの名無しさん:2014/09/15(月) 17:44:22.05 ID:wy034Fbu
std::vectorを返す関数って、不要なコピーが発生して非効率になるのかな?

558 :デフォルトの名無しさん:2014/09/15(月) 17:52:49.42 ID:xix8OsY4
C++11以降は問題ない
C++98はコピー

559 :デフォルトの名無しさん:2014/09/15(月) 17:54:16.39 ID:MqSKJgQN
http://ideone.com/wTt9tD

struct rgb_value内の共用体、構造体には型名も変数名も付けていません。
しかし、メモリーは確保されています。

これはなぜですか?

560 :デフォルトの名無しさん:2014/09/15(月) 17:57:08.63 ID:xix8OsY4
補足C++98でも
const std::vector<...>& vec = getvectpr();
で受けたらコピーなし

561 :デフォルトの名無しさん:2014/09/15(月) 17:57:50.31 ID:MqSKJgQN
>>559で知りたいのは、変数名を付けていないのにメモリーが確保されると、
入れ子になった共用体あるいは入れ子になった構造体の定義と、変数の宣言が
どこで区別がつくかと言うことです。

562 :デフォルトの名無しさん:2014/09/15(月) 18:07:22.55 ID:xix8OsY4
>>559
C++ではstructの横が構造体名(=クラス名)でCのようにstruct xxで変数定義する必要もtypedefする必要もない
そしてunionは名無し定義許される
structとclassの違いはデフォルトのアクセス許可がclassはprivate、structはpublic

563 :デフォルトの名無しさん:2014/09/15(月) 18:08:55.68 ID:qVOi++wZ
無名構造体/無名共用体

564 :デフォルトの名無しさん:2014/09/15(月) 18:17:20.84 ID:xix8OsY4
よく見ると中の構造体も無名だね
そっちのことか

565 :デフォルトの名無しさん:2014/09/15(月) 18:20:55.06 ID:MqSKJgQN
http://ideone.com/dAE8xv

この場合は、変数の宣言rgbを付けないと無理でした。
どこで変わるのだろう?

IBMのサイトにそれらしいことが書いてあるんだけどURLが長すぎて貼れない。

566 :デフォルトの名無しさん:2014/09/15(月) 18:22:08.46 ID:x1p5pPK5
>>559
元はMSのAnonymous Structuresという拡張機能
c++11で使えるようになったのかは知らぬ

567 :デフォルトの名無しさん:2014/09/15(月) 18:43:52.38 ID:MqSKJgQN
>>566
そうでありましたか。
どうもです。

568 :デフォルトの名無しさん:2014/09/15(月) 19:14:50.51 ID:72FXpoxU
>>560は嘘つき
戻り値のテンポラリオブジェクトへのコピーが発生する恐れがある

569 :デフォルトの名無しさん:2014/09/15(月) 20:42:09.08 ID:RaAG/ymv
LINUXでチャットのプログラムを作成してるんですけど、
ブラックリストってどう作ればいいのでしょう?

570 :デフォルトの名無しさん:2014/09/15(月) 22:09:21.95 ID:lVCjgFoQ
>>569
std::set<std::string>

571 :デフォルトの名無しさん:2014/09/15(月) 22:10:22.73 ID:PW8m4k3j
>>569
ユーザーの管理はどうやってんだ

572 :デフォルトの名無しさん:2014/09/16(火) 00:40:21.05 ID:lWmjzWkl
>>569
それはLinux板で聞いたほうが良いね

573 :デフォルトの名無しさん:2014/09/16(火) 00:56:03.54 ID:ey59FGwO
ブラックリストというコンテナがあるのか

574 :デフォルトの名無しさん:2014/09/16(火) 01:39:43.61 ID:zOHXRsLm
フィールド名付きのタプルを作る方法についてあっしにひとつ講釈しちゃあくれやせんかね旦那

575 :デフォルトの名無しさん:2014/09/16(火) 10:57:10.52 ID:zSFpHmgt
タプルにフィールド名つけられるか知らないけど
フィールド名欲しいなら最初からstructで定義しろよ

576 :デフォルトの名無しさん:2014/09/16(火) 11:05:18.16 ID:ulh/aKDY
typedef struct _tag { char tagName[256]; int tagValue; } TAG;
class CTAG : public TAG { public: CTAG(); operator TAG*() { return this; }; };

上記のようなコードで、コンストラクターCTAG()内で
memset((TAG*)&(*this),0,sizeof(TAG)); とするのと、
memset(&this->tagName[0],0,sizeof(TAG)) とするのは同じなのでしょうか?
逆アセンブルして確認してみたら、どちらもほぼ同じコードになってました

577 :デフォルトの名無しさん:2014/09/16(火) 11:16:29.28 ID:/tSEc1VM
コンパイラ依存だろうがほぼ同じでいいのでは

578 :デフォルトの名無しさん:2014/09/16(火) 11:18:57.46 ID:W9IKCWI1
>>574
http://stackoverflow.com/questions/13065166/c11-tagged-tuple

579 :デフォルトの名無しさん:2014/09/16(火) 11:23:49.68 ID:G4Dhs87q
>memset(&this->tagName[0],0,sizeof(TAG))
この例の先頭属性のアドレス参照するばあいは結果的にどの処理系でも行けると思うけどあまり好ましくない
クラスの属性は特に指定しないとコンパイラの最適化で圧縮かかって属性の配置を並び替えることがあるから

580 :デフォルトの名無しさん:2014/09/16(火) 11:53:38.21 ID:/RtNzaYT
あるクラスを=(double)で初期化は許可するが、=(int)で初期化は許可しないように出来ますか?
class A
{
public:
A(const double&){} // =(int)でも初期化してしまう
// explicit A(const double&){} // =(double)で初期化できない
};

581 :デフォルトの名無しさん:2014/09/16(火) 12:00:25.66 ID:/RtNzaYT
自己解決
private:
A(const int&){}
を付け加えて実現できました

582 :デフォルトの名無しさん:2014/09/16(火) 12:02:45.23 ID:xCICRn64
おめでとう

583 :デフォルトの名無しさん:2014/09/16(火) 15:40:25.24 ID:ulh/aKDY
>>577,>>579
ありがとうございました

584 :デフォルトの名無しさん:2014/09/16(火) 16:24:20.15 ID:aL5tuO4b
>>580
参考にお聞きしたいのですが、
どういう場合にダブルで初期化するが
intで初期化したくない状況になるのですか?
何をするプログラム何ですか?

585 :デフォルトの名無しさん:2014/09/16(火) 17:33:58.31 ID:/RtNzaYT
>>584
既存のglslコードをcppコードに見立ててVisual Studio上で編集するためのライブラリです
(つまり、今のところ実際に何かするプログラムではないです)
glslでは、GPU次第でもありますが
float x = 1; //これはダメ
float x = 1.0; //これはOK
となります。それの再現ということになります。

586 :デフォルトの名無しさん:2014/09/16(火) 18:35:19.12 ID:aL5tuO4b
>>585
詳しい解説ありがとうございました。

587 :デフォルトの名無しさん:2014/09/16(火) 18:49:40.69 ID:hzlXvld1
ブックオフで、2004年発行のBoostの本買ってきたんやけど、本と同じの1.33(約20バイト)のバージョンを
落としてきて、コンパイルしたんですわ。わしのCeleronD2.93GHzのPCで約1時間かかりましたわい。

ためしに現在のバージョン見たら、サイズが150mバイトですわ。わいのPCだと、コンパイルし終わるのに、どんくらいかかるんでっしゃろな?

588 :デフォルトの名無しさん:2014/09/16(火) 18:51:41.68 ID:ZkB0HEzb
20byteのboostってすげえな

589 :デフォルトの名無しさん:2014/09/16(火) 19:09:37.69 ID:AJgGs2AR
boostコンパイルして置きっぱなしにしてたディレクトリが4GBくらい行ってたな

590 :デフォルトの名無しさん:2014/09/16(火) 19:27:18.45 ID:W9IKCWI1
Sandy以上のCPUなら並列コンパイルしたら20分もかからないよ
CeleDの場合は窓から投げ捨てろ

591 :デフォルトの名無しさん:2014/09/16(火) 20:03:34.00 ID:zuELja3f
必要な分だけ取得・使用できないライブラリは窓から投げ捨てろ

592 :587:2014/09/16(火) 21:06:59.87 ID:hzlXvld1
いや。小生、パソコンを買い換える金がないんで、このままで行きます。

Sandyって何かなと思ったら、Core i 3ですね。とても買えないです(><;)。

まぁ、ぼちぼちやっていきますわ。みなさん、ありがとうございました。

593 :デフォルトの名無しさん:2014/09/16(火) 23:19:28.75 ID:zN7HPElZ
あるクラスのデストラクタでSingletonオブジェクトを参照しているのですが、
どうも先にSingletonオブジェクトが解放されてしまっているようで、
それが保持しているstd::listクラスの要素が勝手に0になってしまっていました。
開発環境はVC++2013なんですが、この解放順序を明示的に指定することとかできないんでしょうか?

594 :デフォルトの名無しさん:2014/09/17(水) 00:09:54.43 ID:epONY4U2
可能性としてvectorなどのオブジェクト再配置するコンテナにメンバにポインタを持ってデストラクタでポインタを解放するクラスを指定する場合は注意
コピーコンストラクタや代入演算子でコピー先にポインタコピーしたらコピー元をnullptrにするとか、
コピー先にnewで新しいオブジェクト作り直さないとダメ
そうしないと再配置するたびにコピー元オブジェクトがデストラクタでポインタ解放して無効になってしまう
別の解決策はboost::svectorなどのオブジェクトそのものを別領域に確保して再配置しないコンテナ使うかclear、erase、resize等するときに注意してクラスポインタをコンテナ引数に指定する

595 :デフォルトの名無しさん:2014/09/17(水) 00:14:26.60 ID:epONY4U2
boost::static_vectorだった

596 :593:2014/09/17(水) 00:28:33.45 ID:6XbTGR65
>>594
ありがとうございます。
Singletonオブジェクトの保持しているstd::listをstaticメンバ変数にしてみたところ、
後のほうに解放されるようになったようで、
他クラスのデストラクタからの参照時も生きたままでした。
その、Singletonを参照するクラスはnewで生成されるものなので、ヒープ領域に確保されます。
staticメンバ変数はヒープ領域の解放より後になるので順序が保証されるということになるでしょうか。

597 :デフォルトの名無しさん:2014/09/17(水) 02:55:00.71 ID:epONY4U2
ポインタをメンバにもってデストラクタで解放するクラスを作るときは基本的にこういうふうにしなきゃダメ
class A {
public:
 A() : c(nullptr) {}
 A(const A& a) : c(a.c ? new C(*a.c) : nullptr) {}
 virtual ~A() { if(c) delete c; }
protected:
 C* c;
}

ただポインタ値をコピーするだけの実装だとコピー発生すると同じポインタを持つオブジェクトが複数出来上がって同じポインタをコピー解放しようとすんの
それかコピーコンストラクタでコピー元の無効にしてやること
A(A& a) : c(a.c ) { a.c =nullptr;}
A(A&& a) : c(a.c ) { a.c =nullptr;}
A(const A& a) は削除

598 :デフォルトの名無しさん:2014/09/17(水) 02:56:46.17 ID:WEhe6VRz
そもそもナマポで持つなよ

599 :デフォルトの名無しさん:2014/09/17(水) 07:27:57.59 ID:4yvv7VNe
Singleton だったらコピー出来るようにしたらだめだろ。

600 :デフォルトの名無しさん:2014/09/17(水) 07:28:37.29 ID:aZrMUnZ0
生ってダメなの?

601 :デフォルトの名無しさん:2014/09/17(水) 09:28:08.84 ID:7oTy7nJ/
ダメじゃない

602 :デフォルトの名無しさん:2014/09/17(水) 11:55:33.95 ID:tOt923cX
boostってテンプレートばっかじゃないの?
単体でコンパイルして、あとでリンクするもんなの?

603 :デフォルトの名無しさん:2014/09/17(水) 11:56:18.17 ID:0TZmlqiL
テンプレートじゃないのもある

604 :デフォルトの名無しさん:2014/09/17(水) 13:05:13.69 ID:VO9mnQuV
ノートならCPUが燃えないように省電力機能で
クロック落として寝てるときにビルド

朝起きると途中で失敗して止まった画面が!

605 :デフォルトの名無しさん:2014/09/17(水) 14:13:12.41 ID:or6PO8CM
失敗してたら起こしてくれる機能があるといいね

606 :デフォルトの名無しさん:2014/09/17(水) 15:59:53.15 ID:L31h4bAY
>>597
俺はこうしているな。
virtual ~A() { delete c; c =nullptr; }

607 :デフォルトの名無しさん:2014/09/17(水) 16:13:55.56 ID:pzZaxrRp
>>606
それなんか意味あんのか?

608 :デフォルトの名無しさん:2014/09/17(水) 16:34:49.88 ID:L31h4bAY
>>607
デストラクタは何回でも呼べちゃうので、2重デリート防止にヌルポ突っ込むことにしているんだお。
因みにデリート前のヌルチェックは全くの無意味なのでやらないお。

609 :デフォルトの名無しさん:2014/09/17(水) 16:48:43.03 ID:LYPdYoct
勉強不足でスマンが、ケアレスミス
 p = new A()
  ...
 delete p;
  ....
 delete p;
以外で、1つのインスタンスに対して複数回デストラクタが呼ばれることってありえる?

610 :デフォルトの名無しさん:2014/09/17(水) 17:03:06.26 ID:or6PO8CM
ある

611 :デフォルトの名無しさん:2014/09/17(水) 17:04:17.18 ID:jpP7WsCY
pにヌルポを代入すれば呼ばれなくなる

612 :デフォルトの名無しさん:2014/09/17(水) 17:15:20.55 ID:pzZaxrRp
>>610
どういうケースで?

613 :デフォルトの名無しさん:2014/09/17(水) 17:28:05.00 ID:jpP7WsCY
>>612
横だが

a = A();
p = &a;

delete p;

ただ、環境によってはエラー落ちした

614 :デフォルトの名無しさん:2014/09/17(水) 17:42:57.71 ID:pzZaxrRp
>>613
いや、そんなアホなことすりゃそうなるのはわかるけど...
それこそ、それなんか意味あんのか?

615 :デフォルトの名無しさん:2014/09/17(水) 17:45:04.27 ID:WEhe6VRz
Aのポインタを持ってるのはpだけとは限らんやろ

616 :609:2014/09/17(水) 18:11:17.84 ID:Te3fcaJr
生ポの行きの過程で多重に delete しちゃった テヘッ ぐらいしかないってこと?

>>606 記述のご利益よりも、
もっと根本的なところで工夫したほうが良いんでないの?って疑問から >609 な質問に至ったんだけども

617 :デフォルトの名無しさん:2014/09/17(水) 18:52:34.01 ID:4yvv7VNe
まともにやっててデストラクタが二度呼ばれることはない

でもナマポ使うならdeleteした後nullポインタ入れる習慣付けといて損はないよ。

>>609 の例だと最初のdelete p;の後にp=0;しとけば問題ないし。
まぁ生ポインタ使うこと自体殆ど無いけど

618 :デフォルトの名無しさん:2014/09/17(水) 18:57:28.21 ID:Te3fcaJr
ありがとう
すっきりした

619 :デフォルトの名無しさん:2014/09/17(水) 18:59:10.26 ID:HcKN6G5K
初心者は既成品のデスクラクタが組み込まれているクラスを使えばいい。

620 :デフォルトの名無しさん:2014/09/17(水) 19:18:53.62 ID:L31h4bAY
>>609
デストラクタは明示的に呼び出せるんだお。
p->~A();

これはp自体に割り当てられたメモリの破棄とは無関係な合法処理だお。
2回deleteは非合法なので、そんなケースは気にしなくて良いお。

やるかやらないかは置いといて、合法的に出来てしまうことが問題なんだお。
だから汎用的に使われるライブラリ程、合法範囲内でどのような使われ方をしても耐えられる作りにしとく心構えでいるお。

621 :デフォルトの名無しさん:2014/09/17(水) 19:25:50.95 ID:L31h4bAY
何か矛盾している感じのレスになってしまったお。。。
>>608で言っている2重deleteは自クラス A 内の話だお。
>>620で言っている2重deleteは p=new A; とた時の、pにたいするdeleteだお。
クラスAを設計するにあたって気にするのは、前者であって後者ではないという話だお。

622 :デフォルトの名無しさん:2014/09/17(水) 19:30:20.33 ID:5+wVAwUV
スマポ使ってdeleteなんて書くなよ

623 :デフォルトの名無しさん:2014/09/17(水) 19:36:25.46 ID:g3uDlx/D
ま、スマポ使えるならナマポ使う話は出てこないわな

624 :デフォルトの名無しさん:2014/09/17(水) 20:16:54.15 ID:kQQOaj3C
最近>>597のケースでunique_ptrを使う事を覚えた俺に隙は無かった
(隙はあるかもしれない)

625 :デフォルトの名無しさん:2014/09/17(水) 20:20:48.22 ID:6XbTGR65
shared_ptr覚えてからはdelete使うことは、よっぽどの例外がない限り、なくなりましたね。

626 :デフォルトの名無しさん:2014/09/17(水) 22:00:57.42 ID:HcKN6G5K
>>625
そんなことはないだろ。そしたらガベージコレクション対応言語でいいわけで。
パフォーマンスは確実に落ちている。

627 :デフォルトの名無しさん:2014/09/17(水) 22:15:13.58 ID:HcKN6G5K
shared_ptrの構築・破棄におけるパフォーマンス測定【やってみた】


測定は、Windows XP/Core 2 DuoのPCで行った。
shared_ptrに付け加え、自動変数・new/delete・auto_ptr・CAutoPtr・vector<shared_ptr>・CAutoPtrArrayについてCStringのオブジェクトの構築・破棄に対して調査した。

自動変数として使用する場合と比べ、shared_ptrの構築・破棄に10倍以上のクロック数がかかっている。また、CAutoPtrやauto_ptrに比べ2.3倍のクロック数がかかっていることがわかる。

複数のオブジェクトの構築・破棄
5つのオブジェクトを構築しそれをスマートポインタのリストに追加するようなコードの測定。
CAutoPtrArrayと比べvetor<shared_ptr>の構築・破棄に約3倍のクロック数がかかていることがわかる。

結果としては、何度も構築・破棄するようなオブジェクトは自動変数で割り当てるのがもっとも速度が早いことがわかる。
また、一度しか構築しないものについてはそれぞれクロック数に差はあるものの全般的に大したクロック数ではないので、好きなものを選択するのがよいことがわかる。

http://soundengine.jp/wordpress/tips/try/744/

628 :デフォルトの名無しさん:2014/09/17(水) 22:18:59.91 ID:6XbTGR65
>>627
参考になりますね。

>>626
たしかにパフォーマンスは落ちるんですが、
頻繁に解放するようなことがない使い方ばかりなので、
今のとこ問題になってない、という感じです。

629 :デフォルトの名無しさん:2014/09/17(水) 22:22:54.66 ID:jpP7WsCY
make_sharedやemplace_backじゃないのか

630 :デフォルトの名無しさん:2014/09/17(水) 22:40:16.76 ID:pzZaxrRp
>>626
> そしたらガベージコレクション対応言語でいいわけで。

えっ?

>>627
自動変数と比較されても...
shared_ptr にオーバーヘッドがあるのは事実だけど、必要なコストだと思うぞ

631 :デフォルトの名無しさん:2014/09/18(木) 00:45:48.19 ID:35lAY0T2
たぶん、ムーブが使えると大幅に逆転する場面が出てくるんでない。

632 :デフォルトの名無しさん:2014/09/18(木) 01:38:36.50 ID:DWdPBU7A
いやあ、メンバは生ポインタとカウンタ位だから大差ないと思うぞ、実測してないけど

633 :デフォルトの名無しさん:2014/09/18(木) 01:58:11.27 ID:35lAY0T2
でもポインタを取り扱うってことは、受け渡す必要が有るからでしょ。

void hoge()
{
  string *s = new string("...");
  // Do something.
  delete s;
}

こういう事はしないよね?
するとスマポやムーブが生きてくる場面は多いと思う。

634 :デフォルトの名無しさん:2014/09/18(木) 02:09:37.57 ID:qu4CN4ax
hドライブの「honda」フォルダ内のファイル:本田_10.TXTを読み込み、英大文字を英小文字に変換、英小文字を英大文字に変換、その他はそのままで表示


これどうやったらええの?

635 :デフォルトの名無しさん:2014/09/18(木) 04:01:47.99 ID:tANsH2Ld
ASCII英字は第5ビットが違う(0:大文字、1:小文字)ので、
第5ビットを反転すると、大文字・小文字変換できる
または大文字に、0x20(32)を足すと小文字になる

RubyのStringクラスには、
小文字を大文字にする upcase
大文字を小文字にする downcase
大文字と小文字を入れ替える swapcase がある

Linuxの、tr(TRansfer)コマンドにも、
lower, upper (小文字・大文字)がある
sed コマンドでもできる

636 :デフォルトの名無しさん:2014/09/18(木) 05:49:02.48 ID:xGrJvmYs
もしかして2ちゃんねるってものすごく若返っているのか?

637 :デフォルトの名無しさん:2014/09/18(木) 08:22:33.48 ID:DWdPBU7A
確かに心は何時でも10代だが

638 :デフォルトの名無しさん:2014/09/18(木) 08:39:29.82 ID:xGGYwGdc
知能レベルの話をしてるなら Yes

639 :デフォルトの名無しさん:2014/09/18(木) 08:57:12.76 ID:iEpcrfFo
知識減らさずに若返れるなら10代に戻りたい

640 :デフォルトの名無しさん:2014/09/18(木) 12:33:28.83 ID:0+D2RILR
知識減ってもいいから時代ごと 10代に戻りたい
なんだかんだ言ってマイコン黎明期のワクワク感はよかった

641 :デフォルトの名無しさん:2014/09/18(木) 12:42:53.85 ID:bb7rxdqO
でもエロは今ほど氾濫してなかったからな

642 :デフォルトの名無しさん:2014/09/18(木) 12:56:22.68 ID:V6UVc7LV
Windowsのプログラミングに詳しい人がいたら教えてほしいのですが、
VC++で使えるWindowsの構造化例外とC++の例外の使い分けってどうすればいいのでしょうか?

__try{ z = x / y; /* ゼロ除算かも */ }__except(EXCEPTION_EXECUTE_HANDLER){ z = 0; } // 構造化例外
try{ z = x / y; }catch(...){ z = 0; }

xに適当な値を、yにゼロを代入して実行すると、上記のコードのどちらでも例外を捕捉できます
この例の場合、どちらでも捕捉できるので互いに取り替えても問題はないように思いますが、取り替えると問題が発生する例などはありますか?
どちらかに統一した方が無難だとは思うのですが、取り替えると問題が発生する例や、取り替えが不可能なケースについて教えてください

643 :デフォルトの名無しさん:2014/09/18(木) 12:58:02.31 ID:WD6xtm/l
>>642
SEHでクラスのデストラクタ呼べるかね?

644 :デフォルトの名無しさん:2014/09/18(木) 13:10:53.41 ID:kxzq7V59
普通はC++の例外使うわな

645 :デフォルトの名無しさん:2014/09/18(木) 13:15:24.80 ID:EFTdZhpF
http://msdn.microsoft.com/ja-jp/library/swezty51.aspx
ここに全部書いてあるでしょ

646 :デフォルトの名無しさん:2014/09/18(木) 13:22:36.33 ID:R7gYP1+N
例外を握りつぶすだけで満足してそう

647 :デフォルトの名無しさん:2014/09/18(木) 13:30:55.51 ID:V6UVc7LV
>>643
ありがとうございます。クラスについては試してなかったので気がつきませんでした
__tryブロック中でクラスのオブジェクトを作成するとコンパイルエラーになりました
調べてみたら、デストラクターが呼ばれないみたいですね。。。

648 :デフォルトの名無しさん:2014/09/18(木) 16:55:45.85 ID:jjPwyWVa
金玉を握り潰すだけでも十分効果があるな

649 :デフォルトの名無しさん:2014/09/18(木) 17:05:45.97 ID:DhLCrg/X
どこに金玉の話が

650 :デフォルトの名無しさん:2014/09/19(金) 14:21:16.45 ID:sk7TrVPk
金玉落しの谷

651 :デフォルトの名無しさん:2014/09/19(金) 14:44:39.24 ID:ekAzeS7d
struct hoge {
int a;
char **b;
};

struct hoge fuga[] = {
{1, {"ab", "cde", "fg"}},
{2, {"hij", "klmn", "o", "pq"}},
{3, {"rst", "uv"}}
};

みたいな初期化をしたいのですが
コンパイルエラーになります
どこを治せばいいですか?

652 :デフォルトの名無しさん:2014/09/19(金) 14:56:30.87 ID:SPtzgkMd
>>651
*fuga

653 :デフォルトの名無しさん:2014/09/19(金) 14:59:15.67 ID:/8ISHZQs
char **b
は配列じゃないからそういう初期化はできない

654 :デフォルトの名無しさん:2014/09/19(金) 15:02:15.45 ID:uKCerjSn
std::stringをstd::wstringに変換する方法を教えて下さい。

655 :デフォルトの名無しさん:2014/09/19(金) 15:06:25.95 ID:kBCWl9e1
言語として保存したいならエンコード、
ビットデータとして保存したいならそのままコピー。memcpyとか。

656 :デフォルトの名無しさん:2014/09/19(金) 15:11:04.98 ID:ekAzeS7d
>>652
それは駄目でした

>>653

struct hoge {
int a;
char *b[];
};

struct hoge fuga[] = {
{1, {"ab", "cde", "fg"}},
{2, {"hij", "klmn", "o", "pq"}},
{3, {"rst", "uv"}}
};

これでも駄目なんですよねー

657 :デフォルトの名無しさん:2014/09/19(金) 15:14:35.61 ID:/8ISHZQs
char *b[]; は char **b;と一緒だから
char *b[4]なら通る

658 :デフォルトの名無しさん:2014/09/19(金) 15:19:01.71 ID:ZKmo/Yor
>>651
キャストしろ
http://ideone.com/iAubL0

659 :デフォルトの名無しさん:2014/09/19(金) 15:38:41.98 ID:XWJT9E3N
色々ありがとうございます

>>657
出来ました

char *b[] = {"a", "bc", "def"};
なら可変長?に出来るのに
ネストしてると駄目なんですねー

>>658
うちのコンパイラだと訳の判らないエラーが出たのでそちらは諦めます

660 :デフォルトの名無しさん:2014/09/19(金) 15:44:04.51 ID:/8ISHZQs
構造体の中だからダメなんだ
構造体の名前は同じなのにひとつひとつサイズが異なっていたら困るだろ

661 :デフォルトの名無しさん:2014/09/19(金) 15:50:32.09 ID:xrbpMaRf
ポインタだから構造体のサイズは同じじゃないの

662 :デフォルトの名無しさん:2014/09/19(金) 15:52:48.18 ID:/8ISHZQs
char *b[] = {"a", "bc", "def"};
これはポインタの配列だから配列分のサイズが必要

663 :デフォルトの名無しさん:2014/09/19(金) 16:12:24.27 ID:bg8wROT5
最終メンバだから許されてる不定長配列って奴なんじゃ…

古いCで
struct A {
 int a; char *b[1];
} *p = malloc(sizeof(struct A) + sizeof(char*) * 10);
p->b[0] .. p->b[10] まで確保する的な感じの

664 :デフォルトの名無しさん:2014/09/19(金) 16:22:00.55 ID:/8ISHZQs
構造体を配列にしてるからそれはダメでしょ

665 :デフォルトの名無しさん:2014/09/19(金) 16:35:35.73 ID:xrbpMaRf
>>662
なるほど
それだと

>>658
のコードは
ポインタはどこに確保されてんの?

666 :デフォルトの名無しさん:2014/09/19(金) 16:38:46.47 ID:bg8wROT5
>>664 そうだね

sizeof(fuga[0]) と sizeof(fuga[1]) と sizeof(fuga[2]) が
変わるような初期化なんて出来ないというところからスタートしないとね。

#余談
 終端記号 NULL が来るまでって方式じゃないっぽいのに
 >>651 は メンバ b の実要素数をどうやって得ようとしてたのだろう?

fuga[0].b ⇒ 3個
fuga[1].b ⇒ 4個
fuga[2].b ⇒ 2個

667 :デフォルトの名無しさん:2014/09/19(金) 16:42:37.74 ID:/8ISHZQs
>>665
キャストだから確保されてない
たまたま動くかもしれないが危険なコード

668 :デフォルトの名無しさん:2014/09/19(金) 16:44:00.88 ID:bg8wROT5
>>665
コンパイラさんが気をきかせて noname でやってくれているかもしれない

char* noname_0[] = {"a", "bc", "def"};
char* noname_1[] = {"hij", "klmn", "o", "pq"},
char* noname_2[] = {"rst", "uv"};
struct hoge huga[] =
{ 1, (char**)noname_0 },
{ 2, (char**)noname_1 },
{ 3, (char**)noname_2 },
};

環境依存?  C○○以降?

669 :デフォルトの名無しさん:2014/09/19(金) 16:48:28.05 ID:xrbpMaRf
>>667-668
了解
勉強になるわこのスレ

670 :デフォルトの名無しさん:2014/09/19(金) 17:02:17.50 ID:ZKmo/Yor
>>667
どこが危険?
C99の複合リテラル知らないの?

671 :デフォルトの名無しさん:2014/09/19(金) 17:12:25.57 ID:/8ISHZQs
>>670
char**のポインタが有効なのはブロック内だけだから

672 :デフォルトの名無しさん:2014/09/19(金) 17:34:12.72 ID:ZKmo/Yor
>>671
グローバルで宣言してるのに、ブロック内とか、わけがわからないよ。

673 :デフォルトの名無しさん:2014/09/19(金) 17:34:18.97 ID:bg8wROT5
>>671
俺の認識では初期化中のブラケット { } は 記憶ブロックの区切りじゃないんだが、そこが誤りということなのか。。。
例だと fuga[] と同一のスコープに複合リテラルが置かれているんだが( だから >>668 な解釈 )

 { (ここからスコープが始まって)
  1,
   (char**){ } (複合リテラルをこのスコープ内に作って)
 }, (スコープ抜けるから 作った複合リテラルの存在はあぶねーぞ!)
こういうこと?

674 :デフォルトの名無しさん:2014/09/19(金) 17:39:24.40 ID:T5wmPk5I
>>672
なぜコンパイルで満足したのか
http://ideone.com/7FtX6x

675 :デフォルトの名無しさん:2014/09/19(金) 17:42:37.59 ID:/8ISHZQs
>>672
>>656のコードだけでグローバルに置かれてると考えるのはおかしいし
グローバルでなければ寿命に気を付けなければならない
>>658のパターンはいつでも適用できるものじゃない

>>673
char* noname_0[] = {"a", "bc", "def"};の寿命はブロック内だけ
だから危険なことがある

676 :デフォルトの名無しさん:2014/09/19(金) 17:46:02.17 ID:NVtLlsbn
だからreinterpret_cast相当のキャストは止めろとあれほど

677 :デフォルトの名無しさん:2014/09/19(金) 17:52:42.36 ID:3fL0IB09
>>675
>>658はグローバルで宣言してるのに
って意味だろ

678 :デフォルトの名無しさん:2014/09/19(金) 18:00:31.50 ID:s9RvZcra
>>674 見る限り
>>677 の負け

679 :デフォルトの名無しさん:2014/09/19(金) 18:02:48.22 ID:/8ISHZQs
>>677
>>658の場合はってことか
専用に領域が確保されていないので
コピーしてコピーしたものを変更したのにコピー元も変更される危険性がある

680 :デフォルトの名無しさん:2014/09/19(金) 18:06:13.63 ID:auM1uAiy
コンパイルが通ってエラーになる理由がわからん
コンストラクタ直後で死んだってこと?

681 :デフォルトの名無しさん:2014/09/19(金) 18:19:33.77 ID:IiQJjksO
C99の複合リテラル奥深いな
一見、簡単にいけそうにみえるところがやっかいだわ (寿命の面で)

682 :デフォルトの名無しさん:2014/09/19(金) 18:25:49.11 ID:ZKmo/Yor
>>647
あぁ、すまん。キャスト式を間違えてたわ。
http://ideone.com/9DFdUE
寿命の問題じゃない。

683 :デフォルトの名無しさん:2014/09/19(金) 18:26:55.94 ID:ZKmo/Yor
レス間違えた
>>647じゃなくて>>674

684 :デフォルトの名無しさん:2014/09/19(金) 18:41:32.07 ID:s9RvZcra
勉強になるきのこスレ

685 :デフォルトの名無しさん:2014/09/19(金) 19:14:34.77 ID:2U+EgtpR
使いどころがないけどね

686 :デフォルトの名無しさん:2014/09/19(金) 21:12:58.81 ID:sk7TrVPk
ちっちゃいおっぱいみたいだな。

687 :デフォルトの名無しさん:2014/09/19(金) 22:40:31.02 ID:+TddXvRn
>>686
ちっちゃいおっぱい好きのおっぱい星人もいるんだぞ

688 :デフォルトの名無しさん:2014/09/19(金) 23:57:36.62 ID:QPzMJwwt
ちっちゃいおっぱいの意義が理解できない

689 :デフォルトの名無しさん:2014/09/20(土) 00:00:57.92 ID:526ppMDR
>>675
んなこたーない

690 :デフォルトの名無しさん:2014/09/20(土) 09:19:44.95 ID:6Ap44xtF
>>688
んなこたーない

691 :デフォルトの名無しさん:2014/09/20(土) 12:05:07.11 ID:fKGoQmCZ
c++のファイルの命名規則がよくわからないんですが、「Days Between New Years」.cppとしたい場合、
「Days Between New Years」の部分はどうするのが、いいんですか?ちなみにboostの命名規則みたいなのに従うと
どんな感じになるんでしょうか・・

692 :デフォルトの名無しさん:2014/09/20(土) 12:17:05.87 ID:fBC4gG8p
好きにすりゃええ
そんなことに頭使うよりコード書け

693 :デフォルトの名無しさん:2014/09/20(土) 13:34:03.66 ID:3c0Na2Dy
統一されてれば別に良いとは思うが、
Windowsだと大文字小文字無視するしGitだとファイル名変更時に大文字小文字の変換だけだと認識されない罠に嵌るしで
スネークケースの方が無難

694 :デフォルトの名無しさん:2014/09/20(土) 13:34:21.94 ID:O+5MHM3j
いちおう標準ライブラリとboostでは全部小文字、スペースは使わずアンダーバーでといった形式だな
といっても別にC++全般での標準的な命名規則があるわけではない

695 :691:2014/09/20(土) 18:17:19.67 ID:fKGoQmCZ
みなさん、どうもありがとうございます。

自分のやった本がアンダーバーを良く使っているので、自分的には
あまりスマートじゃないとおもうのですが、days_between_new_years.cppにします。

みなさんの多様なアドバイス、とても参考になりました。c++は命名規則がないんですね。
Javaは規則があるみたいですが、好きじゃないです。プログラムが一応組めるようになったので、
そろそろスマートなネーミングをと思い、質問させていただきました。皆さんの意見、とても参考になりました。

ありがとうございました。

696 :デフォルトの名無しさん:2014/09/21(日) 07:52:04.84 ID:NKaa3KrO
strtok って delimiter が見つかった場所を '\0' に書き換えるんですか?

697 :デフォルトの名無しさん:2014/09/21(日) 10:51:56.92 ID:VuBZbVHD
YES

698 :デフォルトの名無しさん:2014/09/21(日) 10:58:36.00 ID:OYwJke1V
char *w = hage();
if(w){
if(strncmp(token, w, strlen(w))) hoge();
}

みたいなときって
if(w && strncmp(token, w, strlen(w))) hoge();
と書いても問題ないですか?
左から順に評価することは保証されていますか?

699 :デフォルトの名無しさん:2014/09/21(日) 11:28:48.75 ID:kN+zAVE7
普通は問題ない
operator&&がオーバーロードされていると
不味い

700 :デフォルトの名無しさん:2014/09/21(日) 11:31:58.75 ID:14Np6+sv
>>698
通常はYES
ただし、operator&& を定義しているときはその限りではない

701 :デフォルトの名無しさん:2014/09/21(日) 11:32:58.29 ID:qxinH3m8
プリミティブ型のoperator&&ってオーバーロードできないよね?

702 :デフォルトの名無しさん:2014/09/21(日) 11:35:19.71 ID:OYwJke1V
ありがとうございます

703 :デフォルトの名無しさん:2014/09/21(日) 12:50:42.64 ID:HNtPVZ/K
>>674 >>682
意外と奥が深いですね。
これって前者がコンパイル時に警告出すようにはできますか?

704 :デフォルトの名無しさん:2014/09/21(日) 13:23:01.92 ID:NRylaSk2
弱参照スマポ以外に相互参照に対応したスマポは有りませんか?
AとBが互いに直接あるいは間接的に相互参照していてAとBは共にその他のオブジェクトからも参照されています
その他のオブジェクトからの参照が全てなくなった段階でAとBをすぐに解放したい
AとBの解放順序はどちらが先でも良い

705 :デフォルトの名無しさん:2014/09/21(日) 13:44:42.27 ID:1wzJMzSq
無い
そんなアホな設計はやめろ

706 :デフォルトの名無しさん:2014/09/21(日) 13:53:32.45 ID:NRylaSk2
>>705
生産性の高い現代的なプログラムでは相互参照は必須だと想いますが?

707 :デフォルトの名無しさん:2014/09/21(日) 13:58:55.85 ID:kN+zAVE7
>>704
すぐに開放という条件がなければ
GCのライブラリでも使えばいい。

その条件を完全に満たすようなGC言語が
存在していない事を考えると
今のハードではまともな速度で動くものが実装不能なのだろう。

まあ量子コンピュータならどうにかなるのかもしれないが

708 :デフォルトの名無しさん:2014/09/21(日) 14:34:31.74 ID:14Np6+sv
GCでも、相互参照はすぐに解放できなかったり、まったくしなかったりするな

709 :デフォルトの名無しさん:2014/09/21(日) 15:25:14.24 ID:IWHmIvvT
C#というか.net frameworkのガベコレだと、ルートから参照を辿れるかどうかだから、
相互参照でも全く関係なく開放される

710 :デフォルトの名無しさん:2014/09/21(日) 16:24:40.57 ID:wB7BYq1/
相互参照、というよりも循環参照というべきか
参照に強弱をつけるやりかたもあるようだが、なかなかうまくいかないね‥
BoehmGC でいいと思うよ‥

711 :デフォルトの名無しさん:2014/09/22(月) 00:12:18.72 ID:9pHn0j6v
メンバ関数内でインスタンス化したメンバ変数を、
別のメンバ関数内で自殺した後にメンバ変数を返すという処理を作りたいのですが、
deleteされているのでメンバ変数がnullになります

なので、メンバ変数ではなく、クラスを指定して自殺した直後にインスタンス化してそれを返そうと思うのですが、
型を変数に代入し、それを元にインスタンスを作ることは可能なのでしょうか?

712 :デフォルトの名無しさん:2014/09/22(月) 00:18:13.55 ID:udgTuvtS
日本語で話せ

713 :デフォルトの名無しさん:2014/09/22(月) 00:22:07.21 ID:9pHn0j6v
あ、delete thisとメンバ変数をreturnで返せる方法があればその方がいいです
別にローカル変数に参照を避難させてもいいんですが、方法があるなら知りたいです

714 :デフォルトの名無しさん:2014/09/22(月) 00:24:29.10 ID:1b5tK9XE
メンバ変数の型は?

715 :デフォルトの名無しさん:2014/09/22(月) 00:24:47.05 ID:9pHn0j6v
>>712
「自殺した」を「インスタンスが自殺した」と補足すればわかりやすいかもしれません

716 :デフォルトの名無しさん:2014/09/22(月) 00:28:16.17 ID:9pHn0j6v
>>714
そのインスタンスの親クラスのポインタです
つまりそのインスタンスと、メンバ変数の型は兄弟で、
そのメンバ関数は自分を返すか、自殺してメンバ変数を返すか
のどちらかです

717 :デフォルトの名無しさん:2014/09/22(月) 00:34:37.31 ID:9pHn0j6v
return hoge,if(hoge!=this)delete this;
って書ければ楽なんですが

718 :デフォルトの名無しさん:2014/09/22(月) 00:39:57.43 ID:1b5tK9XE
ThisClass *p = hoge;
hoge = NULL;
if(p!=this)
{delete p;
return this;
}else{return p;}
こんな感じか

719 :デフォルトの名無しさん:2014/09/22(月) 00:52:08.20 ID:1b5tK9XE
設計をやり直せ

720 :デフォルトの名無しさん:2014/09/22(月) 00:52:30.19 ID:NMG+AC3L
>>713
単なるポインタ値を
ローカル変数に待避させないで
書きたいという意図がわからない。

721 :デフォルトの名無しさん:2014/09/22(月) 08:51:27.43 ID:9pHn0j6v
呼び出し元で呼び出すインスタンスを綺麗に入れ替えることが出来るので設計はこれでいいかなーと・・・


ローカル変数はごちゃごちゃした計算を簡単にするためだったり、入力バッファのためとか、メソッドチェーンが長くなりすぎたりした場合は仕方なく使うんですが
一目でわかるような値に別の変数付けたくないです
コード行が無駄に長くなって逆に見難いですし

722 :デフォルトの名無しさん:2014/09/22(月) 09:06:09.05 ID:9pHn0j6v
>>718
コンストラクタでメンバ変数hogeにthisを代入して、メンバ関数ではそれを延々と返す処理があります
このhogeは、次呼び出して欲しいクラスです
メンバ関数内の任意のタイミングでhoge = new NextThisClass()ってすると、
次呼び出されるのはNextThisClassで、前のインスタンスは呼び出し元から参照が無くなるので、
返す直前に自殺しよう、という設計です

つまり
PrevThisClass::PrevThisClass():hoge(this){}
ThisClass* PrevThisClass::Update(){
if(hoge!=this)delete this;
return hoge;
}
void PrevThisClass::SetHoge(ThisClass* thisClass){
hoge =thisClass;
}
今、こんな感じなんですが、>>711の前半に記述してある問題が・・・

723 :デフォルトの名無しさん:2014/09/22(月) 11:25:52.91 ID:ugRYEwXz
単に
>呼び出し元
でdeleteすれば良いのではないでしょうか

724 :デフォルトの名無しさん:2014/09/22(月) 11:44:57.23 ID:PrGWKMYd
違うことを1度にしようとしてアホなことになってる気がする

725 :デフォルトの名無しさん:2014/09/22(月) 13:01:10.12 ID:SQ8Z5Rnx
なんかオブジェクトの寿命、ポインタ自身の寿命とポインタがさしている領域の寿命とかの基本が理解できてない感じがする

726 :デフォルトの名無しさん:2014/09/22(月) 13:18:07.81 ID:K+SrcL5V
自殺というのはたぶん自分をdeleteすることを言ってるようだけど、そう書かないのは
そう書くと明らかにダメだと分かるから、自殺という造語を使ってるんだよね?

727 :デフォルトの名無しさん:2014/09/22(月) 15:27:18.42 ID:tOpZiXgL
>>725 わしゃ、外部のもんじゃけど、独学でやってるとその辺のとこすら危うい。
全然、知識がうまってかない・・ でも、働いてた頃は、俺よりいくらでもレベルが下のやつがいた。。

どうなってるの?この業界・・

728 :デフォルトの名無しさん:2014/09/22(月) 15:30:27.04 ID:xorcTHrm
自分の寿命を気にした方が良いレヴェル

729 :デフォルトの名無しさん:2014/09/22(月) 15:43:32.59 ID:ugRYEwXz
その自殺クラスはデストラクタ内でdelete hogeすべきかどうか
まわりくどい判定とか書いてるのだろうか…

730 :デフォルトの名無しさん:2014/09/22(月) 16:06:22.40 ID:NMG+AC3L
delete thisなんて必要になるようなのは
物凄く筋の悪い設計

意味的に別変数への待避が必須な
コードでローカル変数を使いたがらず
破壊後のメンバ変数を参照する
コードが書きたいと無茶をしようとする。

自殺した後に、自分の脳内にある遺言を
伝えたいなら自殺前に遺書を作っとけと。

731 :デフォルトの名無しさん:2014/09/22(月) 16:11:20.91 ID:nZL1MVjh
調べてみたらdelete this自体は問題ないんだな
だったら、
ThisClass *retObj = hoge;
delete this;
return retObj;
でいいんじゃないの?

ただ、thisにアクセスしてるアクセス元がthisがdeleteされたことをどうやって知るかを考えないとその後deleteされたインスタンスにアクセスしそうな気がするが

732 :デフォルトの名無しさん:2014/09/22(月) 16:15:24.73 ID:LzfcZpmP
ステートマシンのごとく
戻りが次の作業を行ってくれるオブジェクトになってて欲しい ってだけなら
呼び出し元側で delete するほうがスマートだと思うけど…

# new で生成したオブジェクトじゃないかもしれないから、
 delete this と自殺記述しても、うまく機能できるとは限らないような

733 :デフォルトの名無しさん:2014/09/22(月) 16:34:51.37 ID:bP9pMLbp
基底クラスとして宣言されたポインタを
派生クラスとしてnewした場合
deleteで派生クラスのデストラクタ働くけど

deleteは型をどうやって知ってるん?

734 :デフォルトの名無しさん:2014/09/22(月) 16:37:47.36 ID:LzfcZpmP
vtable でぐぐれ
virtual 宣言されてるメンバ関数も同じ機構で解決してる

735 :デフォルトの名無しさん:2014/09/22(月) 16:44:47.29 ID:bP9pMLbp
ありがとう!

736 :デフォルトの名無しさん:2014/09/22(月) 17:31:20.59 ID:w+/ONFEY
C言語の関数の呼び出しについておたずねしたいのですが、

int func(int* p) { int n = 0; /* do something */ *p = n; return n; }
int main() { int n = 0,arrays[16]; arrays[n] = func(&n); }

上記のようなコードを実行した場合、関数funcに渡した実引数nはいつ変更されるのでしょうか?
関数funcからmainに処理が戻った時点で(関数の戻り値が配列に代入される前に)nが変更されている保証はあるのでしょうか?

737 :デフォルトの名無しさん:2014/09/22(月) 17:34:26.29 ID:xorcTHrm
*p = n のときに中身が変更される

738 :デフォルトの名無しさん:2014/09/22(月) 17:36:33.91 ID:xorcTHrm
arrays[n] の位置がどこになるかって話なら実装依存かも知れない

739 :デフォルトの名無しさん:2014/09/22(月) 18:05:05.94 ID:w+/ONFEY
>>737>>738どっちが本当なんでしょうか?

740 :デフォルトの名無しさん:2014/09/22(月) 18:11:10.55 ID:n1hPNMnk
根拠レスだけど
副作用完了点の話 a[n] = n++; と同じパターンに見えるな
この例だと 環境依存 〜 (未定義により)鼻から悪魔

741 :デフォルトの名無しさん:2014/09/22(月) 18:25:59.36 ID:fydTYVwl
まずもってそういうコードは書くべきでないと思うけど
そうしなければならない理由があるのか
それとも単に興味で聞いているのか

742 :デフォルトの名無しさん:2014/09/22(月) 18:27:37.55 ID:w+/ONFEY
問題を箇条書きにしますと、
1. arrays[n]の位置の決定
2. 関数funcの評価
3. 決定した配列の位置への値の代入

がどういう順番になるかで実行結果がどうなるかが違ってくると思います

arrays[n]の位置が関数の呼び出し前に決定されると誤った位置に値が代入されるか又はアクセス違反になるかも?
arrays[n]の位置の決定が関数の呼び出しの後だとしても、最適化の問題等により[]演算子の評価の後にnが更新されるかも?
fun()を呼び出した際に確実にnが変更されて、その後に配列にアクセスしないとアクセス違反であぼーんしそう
式の評価順がどうとか、副作用完了点がどうとか、調べても分かりません・・・

743 :デフォルトの名無しさん:2014/09/22(月) 18:34:03.27 ID:NMG+AC3L
副作用完了点の問題で未定義になるから
そんなことすんなって話で終わり

744 :デフォルトの名無しさん:2014/09/22(月) 21:14:40.46 ID:yKFZsvSQ
>arrays[n] = func(&n);
これは実装依存だからやめておいたほうがいい

745 :デフォルトの名無しさん:2014/09/23(火) 00:06:16.20 ID:49Grt2TR
そういやこれもvarの値funcbで変えられてもfuncaにうまく渡らない@VC最適化
int var = 0;
funca(funcb(&var), var);

746 :デフォルトの名無しさん:2014/09/23(火) 02:29:37.58 ID:pv/quczD
>>742
単純に順序不定
func呼び出し前のnの値に応じた位置に代入されるか呼び出し後の値の位置になるかはわからない
ある環境で実際に観測して不変の結果が得られたとしても規格上はたまたまそうなったというだけで保証はない

747 :デフォルトの名無しさん:2014/09/23(火) 02:46:45.53 ID:rMNwwcoj
だいてる親子の3分冊のC++の本がほしいです。

748 :デフォルトの名無しさん:2014/09/23(火) 03:07:01.81 ID:yMrOu5W9
743の日本語が読めないばかはプログラムを書くべきではないな
ISO/IEC 14882:2011では1.9 Prgram executionの段落15によりundefined behavior

749 :デフォルトの名無しさん:2014/09/23(火) 03:45:00.68 ID:yTWN5vXQ
実装依存と環境依存は意味が違いますか?

750 :デフォルトの名無しさん:2014/09/23(火) 10:37:39.40 ID:Vv8EEbvC
>>748
どこが?
式自体にはnに対する直接の副作用はないし関数内での副作用は関数内で完結するでしょ

751 :デフォルトの名無しさん:2014/09/23(火) 11:25:20.77 ID:FmXDqaTJ
関数完了と代入操作完了の順序関係は決まっていても、この場合の関数引数や演算子オペランドの評価順序は未定義

752 :デフォルトの名無しさん:2014/09/23(火) 11:54:09.71 ID:2aQUya+P
unspecifiedじゃなくてundefinedだもんな

鼻から悪魔ってこと

753 :デフォルトの名無しさん:2014/09/23(火) 12:25:54.70 ID:FmXDqaTJ
仮に>>736のコードを合法化するような
規格の変更を考えるとしても
副作用の順序が>>736の望むようになるのは
あり得ないだろう。

実行途上の副作用はオペランドや引数の
評価に影響せず、文開始時点の状態で
各オペランドや引数を評価したのと
同等にするとかが落とし所じゃね。

これなら関数内部を知らなくても
呼び出し側コードをみれば
大枠の動作が把握できる。

逆は悪夢だよ。

754 :デフォルトの名無しさん:2014/09/23(火) 13:05:08.07 ID:RZgQ8Ezi
>>749
実装依存は開発に使ったコンパイラ・ライブラリの種類で動きが決まる
環境依存は動かすOSの種類・設定やCPUに左右される(ファイルパスやユーザー権限やロケールやプロセスの挙動やもろもろ)

755 :デフォルトの名無しさん:2014/09/23(火) 13:17:30.52 ID:Vv8EEbvC
>>751
ますますなにをいっている?
評価順序は不定であって評価順序が未定義とはいわない
また評価順序が不定であることがそれだけで未定義動作になるわけではない

756 :デフォルトの名無しさん:2014/09/23(火) 13:21:42.02 ID:1MrULCsV
>>755
よくわからんが
> func(&n)
これはnに対して直接的な副作用あるんじゃないの?

757 :デフォルトの名無しさん:2014/09/23(火) 13:38:21.81 ID:n40GWKtf
般 僧 掲 若 咒 咒 菩 波 夢 罫 依 智 老 識 色 無 垢 舎 空 利 時 観  摩
若 掲 諦 波 能 是 提 羅 想 礙 般 亦 死 界 声 受 不 利 空 子 照 自  訶
心 諦   羅 除 大 故 蜜 究 故 若 無 亦 無 香 想 浄 子 即 色 見 在  般
経   掲 蜜 一 明 知 多 竟 無 波 得 無 無 味 行 不 是 是 不 五 菩  若
   菩 諦 多 切 咒 般 故 涅 有 羅 以 老 明 觸 識 増 諸 色 異 蘊 薩  波
   提   咒 苦 是 若 得 槃 恐 蜜 無 死 亦 法 無 不 法 受 空 皆 行  羅
   薩 波 即 真 無 波 阿 三 怖 多 所 尽 無 無 眼 減 空 想 空 空 深  蜜
   婆 羅 説 実 上 羅 耨 世 遠 故 得 無 無 眼 耳 是 相 行 不 度 般  多
   訶 掲 咒 不 咒 蜜 多 諸 離 心 故 苦 明 界 鼻 故 不 識 異 一 若  心
     諦 曰 虚 是 多 羅 佛 一 無 菩 集 尽 乃 舌 空 生 亦 色 切 波  経
         故 無 是 三 依 切 罫 提 滅 乃 至 身 中 不 復 色 苦 羅
     波   説 等 大 藐 般 顛 礙 薩 道 至 無 意 無 滅 如 即 厄 蜜
     羅   般 等 神 三 若 倒 無 侘 無 無 意 無 色 不 是 是 舎 多

758 :デフォルトの名無しさん:2014/09/23(火) 14:17:29.62 ID:rMNwwcoj
Cは「C言語なら俺に聞け(入門編)」みたいなスレがあるから、
本当に入門レベルの人が頭がこんがらがったりしてるときに
何聞いてもおkだけど、C++には、そういうスレッドがない。

759 :デフォルトの名無しさん:2014/09/23(火) 14:19:34.41 ID:rMNwwcoj
C++の方が仕様が細かい部分でややこしいから、入門者の人が
頭がこんがらがったりしたときに聞けるスレがほしい。ここで聞くと、まともに答えてくれなく、
起こられる場合がある。

760 :デフォルトの名無しさん:2014/09/23(火) 14:21:04.69 ID:kMVz7lc3
std::is_pod を車輪の再発明してみたいんだけど、どう書けばいいのか教えてください

761 :デフォルトの名無しさん:2014/09/23(火) 15:22:22.68 ID:Y91BvWUL
>>760
人に聞いたら発明じゃなくね?

762 :デフォルトの名無しさん:2014/09/23(火) 16:10:20.93 ID:49Grt2TR
ま、関数の引数に関数、演算書いたりするのは気をつけてなってことだ
一番いいのは処理独立させること
パラメタ評価の順も__cdecl、__stdcall、__fastcallで違ってくるみたいだし

763 :デフォルトの名無しさん:2014/09/23(火) 16:19:40.38 ID:yKq0QWup
C++ だと rvo とか nrvo とか説明だけでも疲れるわな

764 :デフォルトの名無しさん:2014/09/23(火) 19:27:31.54 ID:EJJzNOFK
__cdecl、__fastcall

いまどきこんなの使ってる奴いるの?

765 :デフォルトの名無しさん:2014/09/23(火) 19:33:54.76 ID:pZL3aStB
>>748
C++のそのルールによれば>>736のケースでmain()のnに対するfunc()内外の2つの
副作用は"indeterminately sequenced"でしょ。

順序がどうなるかわからんけども未定義動作というわけじゃない。

766 :デフォルトの名無しさん:2014/09/23(火) 20:21:34.35 ID:49Grt2TR
>>764
外向けは当然stdcallだけどローカルリンクする閉じた世界では何に使っても自由だからな

767 :デフォルトの名無しさん:2014/09/23(火) 20:35:03.83 ID:RZgQ8Ezi
可変長引数

768 :デフォルトの名無しさん:2014/09/23(火) 20:36:50.41 ID:AOVORc3c
>>764
x64は基本__fastcallだが。

769 :デフォルトの名無しさん:2014/09/23(火) 22:32:46.27 ID:cbaGokBl
処理系依存のキーワードをわざわざ使う人居るのか?って話じゃないの?

>>768
どのプラットフォームの話?

770 :デフォルトの名無しさん:2014/09/24(水) 00:09:04.64 ID:iGXOy7yj
>>769
amdがx64作った時にABI決めたから、どのプラットフォームでも同じなんだよ、ボクチン。

771 :デフォルトの名無しさん:2014/09/24(水) 00:18:05.96 ID:TaWVN6KI
IA-64…

772 :デフォルトの名無しさん:2014/09/24(水) 01:51:52.96 ID:Xz0lTI1r
>>770
レジスタ使う事しか一致してねえじゃん。
ここまで自信満々に間違った事言われると逆に清々しいな。

773 :デフォルトの名無しさん:2014/09/24(水) 07:01:22.72 ID:2siJ58rQ
std::shared_ptrについて質問します。

std::shared_ptrの実装は、リンクリストを用いていますか?
それともカウンタを使っていますか?

774 :デフォルトの名無しさん:2014/09/24(水) 07:23:22.46 ID:psEUFh+R
少なくともMSはx64 ABIの呼び出し規約を__fastcallモデルと呼んでいるが。
http://msdn.microsoft.com/ja-jp/library/ms235286.aspx

775 :デフォルトの名無しさん:2014/09/24(水) 07:23:32.45 ID:PEJogInR
図解
【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚

776 :デフォルトの名無しさん:2014/09/24(水) 08:09:48.03 ID:TNcMX0Sc
>>773
規格では実装方法まで規定されていないので、実装によってどちらもあり得る。
ただ、テンプレートなのでヘッダに実装まで書いてあるだろうから、知りたければヘッダを見に行けばいい。

777 :デフォルトの名無しさん:2014/09/24(水) 08:19:05.15 ID:2siJ58rQ
>>776
カウンタ、ポインタ、デリータを搭載したオブジェクトへのポインタを
保持していました。

778 :デフォルトの名無しさん:2014/09/24(水) 08:27:33.42 ID:2siJ58rQ
enum classは一般的に実装されていますか?

779 :デフォルトの名無しさん:2014/09/24(水) 08:44:17.31 ID:P3nVXP+t
>>774
そのABI、Windowsだけな。

780 :デフォルトの名無しさん:2014/09/24(水) 14:05:42.59 ID:qzC/IE+H
プログラム趣味レベル1年なんですがandroidなどをいじってるぐらいで
Cもそこそこつかえてるとき
VBって覚えるのどのくらいかかるものなんですか?動かし方覚えるのに1ヶ月ぐらいですか?

781 :デフォルトの名無しさん:2014/09/24(水) 14:11:10.40 ID:LGwwScCf
VBスレへ

782 :デフォルトの名無しさん:2014/09/24(水) 14:12:24.51 ID:qzC/IE+H
VBってよくわかってないですがとりあえず移動

783 :デフォルトの名無しさん:2014/09/24(水) 15:50:00.10 ID:N4m844gX
今の人はVBってのは逆に古いのかもね

784 :デフォルトの名無しさん:2014/09/24(水) 17:15:03.76 ID:EKbXeXYy
VBって今でも生きてるの?
十何年か前にバージョン6.0を見たのが最後なんだが

785 :デフォルトの名無しさん:2014/09/24(水) 17:16:49.05 ID:TaWVN6KI
vb.netになって復活したよ

786 :デフォルトの名無しさん:2014/09/24(水) 17:40:45.13 ID:LEs4bhE4
VBはオワコン

787 :デフォルトの名無しさん:2014/09/24(水) 18:15:57.57 ID:9fVabsZY
あるメソッドfへの参照渡し
f(SomeClass& sc)
って、インスタンスscにアドレス解決演算子&を施した結果のアドレスが引数として渡されるという意味ですか?

788 :デフォルトの名無しさん:2014/09/24(水) 19:48:12.55 ID:8WLT/KOc
>>787
その & はアドレス云々とは関係ないと思っていたほうがよい
f(SomeClass &sc); というプロトタイプであっても、実際の呼び出しは rf(sc) と記述する。

じゃ、何が渡されるのか?
>&を施した結果のアドレスが引数として渡される
はほぼ正解

789 :デフォルトの名無しさん:2014/09/24(水) 20:26:35.21 ID:9fVabsZY
うーん・・・
関係ないのにほぼ正解っていうのが不思議ですが
色々試してみて自分なりに納得できる方法を見つけてみようと思います。

790 :デフォルトの名無しさん:2014/09/24(水) 21:06:45.87 ID:N4m844gX
オブジェクトへの参照を引数とする ってだけじゃないの?
勘違いしてる?

791 :デフォルトの名無しさん:2014/09/24(水) 21:14:15.45 ID:4awcA0eB
配列じゃなくても最強ポインタさん召喚というのを避けるのに使う

792 :デフォルトの名無しさん:2014/09/24(水) 21:17:35.38 ID:GROxL/lv
&がアドレス演算子という思い込みを一旦忘れなきゃダメ

793 :デフォルトの名無しさん:2014/09/24(水) 22:29:24.12 ID:7MHxQfHz
呼び出し元の変数が
スコープの違う呼び出し先でも使える

794 :デフォルトの名無しさん:2014/09/25(木) 02:13:05.13 ID:N54LjUIZ
稀にアンダースコアを多用したライブラリやらフレームワークのヘッダを見るんですがあれは何が由来というか、どうしてああなるんですか?

795 :デフォルトの名無しさん:2014/09/25(木) 02:23:42.09 ID:kvBgFkpg
アンダースコアは規格で予約されたものだから
ライブラリやフレームワークが多様してるんだろう

796 :デフォルトの名無しさん:2014/09/25(木) 06:22:15.15 ID:/NVqQrO0
ヘッダーにクラスメンバの定義を書くとDLLとDLLを使う側の両方に実体ができることが
有ったような気がするのですが、どうでしたっけ?

797 :デフォルトの名無しさん:2014/09/25(木) 06:25:12.71 ID:Y/FZoDJC
>>796
inlineなものにstaticな定義があったときですかね

798 :デフォルトの名無しさん:2014/09/25(木) 08:26:04.64 ID:/NVqQrO0
>>797
どうもです。

http://ideone.com/PfaqjK
この、b = a + 1,は合法ですか?
コンパイルは普通に通るし、インテリセンスも下線付かないんですが。

799 :デフォルトの名無しさん:2014/09/25(木) 08:27:34.55 ID:PV5IkNGZ
>>794
以下のようなプログラムも問題なくコンパイルできるようになっている。

#define a "a"
#incluce <stdio.h>
int main() { puts(a); return 0; }

もし stdio.h など標準ライブラリ内の宣言に、たとえローカル変数であっても a という名前が
そのまま使われていた場合、ユーザーのマクロ定義の影響を受けてコンパイルできなくなってしまう。


これに対して、以下のように予約名を不正にユーザー定義しているプログラムの面倒を見てやる義理は無い。

#define __a "a"
#incluce <stdio.h>
int main() { puts(__a); return 0; }

800 :デフォルトの名無しさん:2014/09/25(木) 08:36:29.96 ID:PQH/RCDK
incluce はコンパイルエラー

801 :799:2014/09/25(木) 09:33:29.01 ID:PV5IkNGZ
あ、ごめん。もちろん #include ね。

802 :デフォルトの名無しさん:2014/09/25(木) 10:24:34.54 ID:Qu2+zU7G
>>798
なにが疑問なんだ?
enumの列挙子(要素)の初期化には定数式が使える
宣言済みの列挙子(の値)は定数式

803 :デフォルトの名無しさん:2014/09/25(木) 10:33:59.77 ID:aCIY3SmK
非関数のオーバーライドだべ

804 :デフォルトの名無しさん:2014/09/25(木) 11:38:26.62 ID:/NVqQrO0
>>802
どうもです。

805 :デフォルトの名無しさん:2014/09/25(木) 12:19:14.95 ID:/NVqQrO0
LCDのリフレッシュ・レートを60Hzに設定しています。

画面の描画を背景から順番に図形を重ね書きしていきます。
この時、図形の数を増やしていくと、いつかちらつきが起こるようになります。

ちらつきが起こっていないときは、1/60秒以内に描画が完了していると考えることは
できますか?

806 :デフォルトの名無しさん:2014/09/25(木) 12:27:15.94 ID:8NoETdMr
ダブルバッファ使えよ

807 :デフォルトの名無しさん:2014/09/25(木) 12:37:04.55 ID:6cgJXjHh
ちらつきが起きてるように見えるかどうかは人による
2フレームで描画しててもちらついていないと感じる人もいるかもしれないのでそれじゃだめじゃない

808 :デフォルトの名無しさん:2014/09/25(木) 13:38:16.22 ID:BazMlqYk
>>799
これって二つ以上の外部ライブラリが競合することってないんですか?

809 :デフォルトの名無しさん:2014/09/25(木) 14:07:14.87 ID:/NVqQrO0
>>808
結構困ってます。

810 :デフォルトの名無しさん:2014/09/25(木) 15:25:57.69 ID:A8OlsiHN
趣味グラマですが、C++で実践的なサンプル載ってる洋書を知ってる人がいたら、おしえてください。

Amazonで買いたいと思います。

811 :810:2014/09/25(木) 15:27:11.65 ID:A8OlsiHN
また、夜、見に来るので、暇な人は宜しくお願いします。

812 :デフォルトの名無しさん:2014/09/25(木) 15:36:56.72 ID:QMPPpq5i
了解

813 :デフォルトの名無しさん:2014/09/25(木) 17:51:39.48 ID:loQAbhB7
class Hoge
{
public:
template<class T,class U>
Hoge(T t,U u){}
};

Hoge* pt = new Hoge<int,int>(2,3);
としようとするとエラるんですが誰か理由分かりますか?
ちなみにエラー内容は「型intは不要です」とでました

814 :デフォルトの名無しさん:2014/09/25(木) 17:54:26.86 ID:45t2KkEq
詳しくないし動作確認してないが。template<class T,class U>の位置がおかしいのでは。

815 :デフォルトの名無しさん:2014/09/25(木) 18:16:55.96 ID:qQtrFYGh
intはclassじゃない。プリミティブ型のテンプレートはtypename

816 :デフォルトの名無しさん:2014/09/25(木) 19:57:53.28 ID:ifGKHF6I
テンプレートコンストラクタの
テンプレート引数を直接明示的に
与える手段は文法上存在しない

似たような事するやり方はあるけど

817 :デフォルトの名無しさん:2014/09/25(木) 20:04:15.42 ID:uEhi6Lrs
http://ideone.com/Nzlfsf

こういう事をしたいのか?

818 :デフォルトの名無しさん:2014/09/25(木) 20:10:21.81 ID:uEhi6Lrs
http://ideone.com/pSSbLi

それともmul2みたいな事をしたいのか

819 :デフォルトの名無しさん:2014/09/25(木) 22:18:27.43 ID:/NVqQrO0
http://ideone.com/VyAagU

これはなぜ1なんですかね?

820 :デフォルトの名無しさん:2014/09/25(木) 22:22:17.31 ID:kvBgFkpg
0だと配列作ったりアドレス比較するときに困るだろ

821 :デフォルトの名無しさん:2014/09/25(木) 22:34:17.41 ID:+tpWRwOH
ダークエネルギーがある

822 :デフォルトの名無しさん:2014/09/25(木) 22:41:24.84 ID:/NVqQrO0
>>820
どうもです。

823 :デフォルトの名無しさん:2014/09/26(金) 00:36:35.68 ID:8HWCFb8d
>>818
hoge2の方っす

824 :デフォルトの名無しさん:2014/09/26(金) 01:26:28.66 ID:YOGKKWNY
>>823
メンバ関数を呼び出す時templateが妙な所に付いてるだろ?
これは
§14.2.4
When the name of a member template specialization appears after . or -> in a postfix-expression
or after a nested-name-specifier in a qualified-id, and the object expression of the postfix-expression
is type-dependent or the nested-name-specifier in the qualified-id refers to a dependent type, but
the name is not a member of the current instantiation (14.6.2.1), the member template name must be
prefixed by the keyword template. Otherwise the name is assumed to name a non-template.

これに倣ったものだ
gcc4.8.1だとtemplate無しでもなぜかエラーにならないけど

825 :デフォルトの名無しさん:2014/09/26(金) 01:28:57.79 ID:YOGKKWNY
悪い
§14.2.4だった

826 :デフォルトの名無しさん:2014/09/26(金) 01:34:14.23 ID:7RWtUm75
>>808
なるべくそういうことが起こらないように、ヘッダで定義しないといけないマクロはライブラリ固有の
プリフィックスを含む長い名前を使う、などの慣習がある。

827 :デフォルトの名無しさん:2014/09/26(金) 01:35:47.13 ID:YOGKKWNY
酔ってて済まぬ
今まで寝てたからなあ
また寝るおやすみ

828 :デフォルトの名無しさん:2014/09/26(金) 03:35:29.72 ID:6LjTafoV
ATLをタダで使いたいのですがビジュアルスタジオExpressには付いてません
無料のインストーラなどは無いのですか?

829 :デフォルトの名無しさん:2014/09/26(金) 03:37:04.68 ID:DAYyQfhm
ないです

830 :片山博文MZ次期CEO ◆T6xkBnTXz7B0 :2014/09/26(金) 06:08:53.55 ID:TOWrwa9l
>>828
Windows Driver Kitに付いてるよ

831 :デフォルトの名無しさん:2014/09/26(金) 07:00:34.12 ID:gYh0NGrK
時々見えないレス番号があるんだけどなんなの?

832 :デフォルトの名無しさん:2014/09/26(金) 11:35:37.02 ID:sGpJ75yo
NG宣言とか久しぶりに見た

833 :デフォルトの名無しさん:2014/09/26(金) 13:03:30.66 ID:dz5SWLeo
跳んだ番号がいちいち気になるひとってなんなの?

834 :デフォルトの名無しさん:2014/09/26(金) 13:19:48.25 ID:+PXOt4X8
A型なんじゃない?

835 :デフォルトの名無しさん:2014/09/26(金) 13:29:31.79 ID:BPZIlMAB
http://ideone.com/3uN9Av

it1 == it2、v1.end() == it1は正しいですか?

836 :デフォルトの名無しさん:2014/09/26(金) 13:30:20.30 ID:ddgt8ybY
いいえ

837 :デフォルトの名無しさん:2014/09/26(金) 13:32:45.41 ID:qVbsgB3M
どのレスが見えなかったんだろう
831を書く前に気が付いたんだから830が見えなかったわけではないってことだよね

838 :デフォルトの名無しさん:2014/09/26(金) 16:17:26.96 ID:b+KrCLWd
http://stackoverflow.com/questions/2342162/stdstring-formatting-like-sprintf
の8番目のソースコードをVS2013のC++で使おうとしたら、
vsnprintf(buffer, size, fmt, vl);
で警告が出たので
vsnprintf_s(buffer, size, _TRUNCATE, fmt, vl);
に変えたらビルド出来て動いたのですが、これで問題無いでしょうか?
それと、そもそもこのソースでは vsnprintf を二回使っていますが、
一回にすることは出来ませんか?

839 :デフォルトの名無しさん:2014/09/26(金) 18:07:40.09 ID:qY859vRI
>>838
sizeを超えた時の動作が異なる。
エラーハンドラーで無視すれば同じ動作になる。
戻り値も違ったような気がする。

840 :デフォルトの名無しさん:2014/09/26(金) 18:14:12.60 ID:qY859vRI
>>838
_TRUNCATE指定してたか。訂正。
戻り値使ってなければ、同じ動作だね。

841 :デフォルトの名無しさん:2014/09/26(金) 18:56:50.88 ID:8HWCFb8d
高機能なソースの事前処理ってどうやったら実現できますか?(ファイルからデータを読み込む等)

842 :デフォルトの名無しさん:2014/09/26(金) 19:08:23.48 ID:8tItaSRz
makefile とか MSVC のプロジェクト設定とかで
そういうツールやスクリプトを呼べばいい

843 :デフォルトの名無しさん:2014/09/26(金) 20:38:31.38 ID://4m5n2I
autoにもインテリセンスが効くので、typedefやめてautoにしちゃおうと思うのですが、
まずい部分や気を付けないといけないことってありますか?

844 :デフォルトの名無しさん:2014/09/26(金) 20:58:03.83 ID:sQacnu/5
ちょっと古いgccだとautoがコンパイルできないので互換性が低くなる

845 :デフォルトの名無しさん:2014/09/26(金) 20:59:29.10 ID:sGpJ75yo
VisualStudioでは、typedefでつけられた型の名前から得られる情報が欠落することがある。
たとえばHRESULT型(longのtypedef)を返す関数DoSomethingがあるとして
 auto result = DoSomething();
として戻り値を受けるようにした場合、resultにカーソルを合わせると、型はlongと表示される。
なのでresultがHRESULTの値であるということがパッと見で分からなくなる。

846 :デフォルトの名無しさん:2014/09/26(金) 21:01:33.46 ID:sQacnu/5
>>844
移植性と言うべきか

847 :デフォルトの名無しさん:2014/09/26(金) 21:16:19.86 ID://4m5n2I
>>845
それではEclipseにしたほうが良いですかね。

848 :デフォルトの名無しさん:2014/09/26(金) 22:32:32.46 ID:HL065XcY
>>845
HRESULT型 で表示したら、パット見で元の型わからんとか言う奴が...

849 :デフォルトの名無しさん:2014/09/27(土) 00:26:00.72 ID:lZc14wWH
自作のライブラリを作ったりする時に、関数の戻り値を
どうするか迷うのですが、皆さんどうしています?
WindowsならHRESULT 型が良いのでしょうか?
何かお勧めの方法があれば教えてください。

850 :デフォルトの名無しさん:2014/09/27(土) 00:26:59.87 ID:LFDE+RdC
戻したい型で。

851 :デフォルトの名無しさん:2014/09/27(土) 00:30:25.99 ID:Rzo+82xO
http://sites.google.com/site/faithandbrave/error_handling
ここら辺り見て好きにする

852 :デフォルトの名無しさん:2014/09/27(土) 00:51:59.62 ID:lZc14wWH
>>851
情報有難うございました。
ザッと読んでみたのですが30%くらいしか理解できませんでした。
例えば851さんは、成功か失敗かのどちらかを返す関数を作る場合、
戻り値はどうしていますか?

853 :デフォルトの名無しさん:2014/09/27(土) 00:58:55.38 ID:Es6Y0cNh
関数の挙動による
成功失敗ならBOOL boolでいい

854 :デフォルトの名無しさん:2014/09/27(土) 01:24:25.88 ID:ub60pjbZ
例外使ってもいいなら throw! throw!
戻り値で成功・失敗返すと、呼ぶ側いちいち if 文いるからメンドイ
まあそういうの多いけど

855 :デフォルトの名無しさん:2014/09/27(土) 08:40:17.22 ID:X9fNrSMz
>>847
くそ

856 :デフォルトの名無しさん:2014/09/27(土) 09:25:18.60 ID:dBgfCEST
>>824
http://ideone.com/IxySyO
基本x.fooが何物か特定不明の場合につける必要があるんじゃ
無かったっけ?

857 :デフォルトの名無しさん:2014/09/27(土) 21:33:35.08 ID:pzkKNcsN
以下の通り実行したい関数をregistで登録し、executeで実行したいです

regist(func1(a));
regist(func2(a,b));
execute();

このとき、registに渡される関数は引数も戻り値も不定なのですが、この場合registの引数の型はどうすればよいでしょうか?
環境はvs2012(C++)です

858 :デフォルトの名無しさん:2014/09/27(土) 21:39:53.55 ID:Rzo+82xO
>>857
http://ideone.com/vxgmfI

859 :デフォルトの名無しさん:2014/09/28(日) 00:01:16.55 ID:ek6vZCkr
>>858
なるほど、ラムダと関数オブジェクト便利ですね
ありがとうございます

860 :デフォルトの名無しさん:2014/09/28(日) 05:01:25.56 ID:dnjLo0or
>>856
そういう事かサンクス

861 :デフォルトの名無しさん:2014/09/28(日) 18:20:57.47 ID:8S35qKl3
ロベール読み終わった後、楽しく読めるcpp本なにかあるでしょうか。ジャンルはといません
もうhogehugaの連続にはうんざりです…

862 :デフォルトの名無しさん:2014/09/28(日) 18:30:19.85 ID:VNlOWu8X
ロベール終わったんならさっさとプログラム組んでしまおう

863 :デフォルトの名無しさん:2014/09/28(日) 19:22:23.83 ID:onmSpgmc
>>861
C++の設計と進化

864 :デフォルトの名無しさん:2014/09/28(日) 19:53:11.73 ID:yB4VOdfw
C++11とそれ以前の差分をざっと確認できるようなリファレンス本ないもんかな。
cpprefjpやcplusplus.comを紙にしたようなんでいいんだが。

865 :デフォルトの名無しさん:2014/09/28(日) 19:58:46.15 ID:Fx/zPgDX
>>864
C++ポケットリファレンス

866 :デフォルトの名無しさん:2014/09/28(日) 20:17:44.75 ID:yB4VOdfw
C++11対応のリファレンスってそれくらいしかないから見てみたが、ライブラリ部が逆引きだから
リファレンスの記述がどこにあるのかわからなくて恐ろしく引きにくかった。
仕方なく索引から引くんだが、複数ページあると外れもあるし。

867 :デフォルトの名無しさん:2014/09/28(日) 21:17:02.01 ID:RAKSDySk
俺も、ライブラリを基準に書いてあるものだと期待して本屋で手に取ったら
逆引きで書かれていたからがっかりした憶えがある。>ポケットリファレンス
C++を使うに当たってのとっかかりには悪くない本なんだろうけど・・・

868 :デフォルトの名無しさん:2014/09/28(日) 23:58:32.22 ID:SkMDQSso
買ったけどほとんど役に立たないな。

869 :デフォルトの名無しさん:2014/09/29(月) 00:03:20.88 ID:qys/q/RJ
仕様書をダウンロードしてgrepでいいじゃん

870 :デフォルトの名無しさん:2014/09/29(月) 00:07:18.79 ID:s6GohK/v
仕様はユーザー向けに書かれていないからリファレンスには向いてないな。

871 :デフォルトの名無しさん:2014/09/29(月) 01:57:49.51 ID:wzhhA1qS
そうそう。規格はいわば辞書のようなものでそれ単体で読んでもあまり学習の役に立たない

872 :デフォルトの名無しさん:2014/09/29(月) 02:38:57.09 ID:ckYTLCL6
cplusplus.com以上のものはないしあれで十分
ほかは何かが足りない

873 :デフォルトの名無しさん:2014/09/29(月) 15:06:55.51 ID:Vd5Mo6Qu
cplusplus.comってのは規格書からピックアップしてきただけじゃないか?
規格書自体はみたことがないが。そうだっら規格書のほうが上だが。

874 :デフォルトの名無しさん:2014/09/29(月) 20:08:12.91 ID:ldEBn8mU
日本では11,14ハブられすぎ・3・)<どんだけ

875 :デフォルトの名無しさん:2014/09/29(月) 20:27:13.68 ID:bm2ucN1b
アメリカでもC++11は拒否られ傾向

876 :デフォルトの名無しさん:2014/09/29(月) 21:35:24.89 ID:C8ojmzYe
14が Stable 相当に成るんかと思てたら Release未満な感じだしなんか先行きヤバイよね

877 :デフォルトの名無しさん:2014/09/29(月) 21:44:28.16 ID:cGDZNOx4
って言うほどなんか問題あんの?

878 :デフォルトの名無しさん:2014/09/29(月) 21:48:12.64 ID:lVua1t90
はぶはぶ

879 :デフォルトの名無しさん:2014/09/30(火) 01:19:47.75 ID:Et9/pZky
イクラちゃんは『ハーイ』 『バブー』 『チャーン』 『アハーン』(鳴き声) しか喋らないと思う

880 :デフォルトの名無しさん:2014/09/30(火) 02:56:22.10 ID:/eg463LS
ばぶばぶ

881 :デフォルトの名無しさん:2014/09/30(火) 20:11:27.60 ID:ikOLIK46
wWv の3文字しか使わない言語 Grass というのもあるのだから、
イクラちゃんが高度なコンピネータ型会話を行っているのは明らか

882 :デフォルトの名無しさん:2014/09/30(火) 20:33:45.83 ID:0L5gMKTL
各種ソートアルゴリズムをウィキペディアにあるコードを見ながら(パクって)実装してるのですが、マージソートが良く分かりません
マージソートって最後に二つに分けたデータを結合しますよね? それの、結合の仕方が分かりません

↓今は適当に比較、交換しながら整列してます
http://ideone.com/iv5fgw

比較、交換しながら整列してるので、マージソートとは名ばかりの、バブルソートと同等のものになってます
どうやって結合すればいいんでしょうか?

883 :デフォルトの名無しさん:2014/09/30(火) 20:35:30.91 ID:2tlu79gE
>>882
URL中身見れないけど

884 :デフォルトの名無しさん:2014/09/30(火) 20:45:37.20 ID:0L5gMKTL
>>883
すいません、設定がおかしかったようです。直しました。

885 :デフォルトの名無しさん:2014/09/30(火) 20:58:17.76 ID:M7qXdw9r
質問なんですが、
strcmpとか
printfとか良く使うんですが、
char版やwchar_t版の関数名がなかなか覚えられないので、使うたびに毎回検索しています。
でも、よく考えたら、
strcmp
wcscmp
って、引数の型が違うんだから、関数名同じstrcmpにして、オーバーロードで定義しておけば
名前の混乱もなくなると思ったのですが、違いますか?他のprintfとかも。

886 :デフォルトの名無しさん:2014/09/30(火) 21:02:27.94 ID:JjKI4EMd
Cにはオーバー道路ない

887 :デフォルトの名無しさん:2014/09/30(火) 21:03:06.26 ID:SnNSAPUG
Cにはオーバーロードがないから

888 :デフォルトの名無しさん:2014/09/30(火) 21:11:07.84 ID:M7qXdw9r
では、C++限定で、どうでしょうか?

889 :デフォルトの名無しさん:2014/09/30(火) 21:12:35.31 ID:onIPhOR3
ガイム、もうすぐ終わるよ

890 :デフォルトの名無しさん:2014/09/30(火) 21:13:59.06 ID:p4Jys04g
試せば一発でわかることを何ごちゃごちゃと

891 :デフォルトの名無しさん:2014/09/30(火) 21:20:30.37 ID:SnNSAPUG
>>888
自分でラッパー作ってもいいのよ

892 :デフォルトの名無しさん:2014/09/30(火) 21:29:03.00 ID:M7qXdw9r
>>891
それは面倒なので、C++の仕様でそうすればいいのに。

893 :デフォルトの名無しさん:2014/09/30(火) 21:38:51.83 ID:LL2el0Wn
やだよ
混乱するのが目に見える

894 :デフォルトの名無しさん:2014/09/30(火) 21:46:52.44 ID:QntTjtgn
VC++のTCHARじゃあかんのか

895 :デフォルトの名無しさん:2014/09/30(火) 22:28:37.67 ID:jrue3ndR
>>882
君がやっているのはin-place mergeというマージソートの変種の一つで素のマージソートじゃない
素のマージソートでの結合は単純に結合結果用の領域を用意してそれを埋めていって
必要があればその内容を元のソート対象のリストに書き戻すだけ

896 :デフォルトの名無しさん:2014/09/30(火) 22:30:01.91 ID:kUI4keUC
stringクラスも含めて文字周りがモノリシックで汎用性がなくなったのは
個々のベンダーとC++の歴史的教条主義のせいだみたいなことを書いていたのは
メイヤーだったかハーブだったか…
まあアレだよ 結論的には

 無 理

897 :デフォルトの名無しさん:2014/09/30(火) 22:52:59.01 ID:0L5gMKTL
>>895
レスThanks

in place merge sortでググったらサンプルソースらしきものが出てきたのでもう少し頑張ってみます

898 :デフォルトの名無しさん:2014/09/30(火) 23:09:33.48 ID:2xIMsJb6
>>888
std::string 使えよ

899 :デフォルトの名無しさん:2014/10/01(水) 01:54:20.39 ID:a/0Pjuck
マージソートなんてデカイファイル内容を省メモリでソートする時しか使わないよね
普段はクイックソートとスリープソートだけあれば充分

900 :デフォルトの名無しさん:2014/10/01(水) 04:48:42.20 ID:bsKpzQI5
>>899
スリープソートに実用性あるのけ?

901 :デフォルトの名無しさん:2014/10/01(水) 05:46:05.45 ID:IDwTE5ky
スリープソート笑ったわ
あんなの実用になんのか

902 :デフォルトの名無しさん:2014/10/01(水) 12:34:22.14 ID:EoNROeAA
一応最小単位がsleep命令の分解能だから突き詰めれば10ms/個までは高速化出来るんだぜ

903 :デフォルトの名無しさん:2014/10/01(水) 12:59:03.36 ID:4fBnRRmy
tickが10msとしても、それはいわばsleepの誤差が10msということなので、安全のため20ms以上で見積もりたい

904 :デフォルトの名無しさん:2014/10/01(水) 13:09:58.15 ID:Tpc7ro4O
マジレスしたら負けな雰囲気

905 :デフォルトの名無しさん:2014/10/01(水) 13:15:34.47 ID:YGQGEKee
音声ファイル(但し同一再生時間)の連続再生の時に便利。

906 :デフォルトの名無しさん:2014/10/01(水) 14:20:51.37 ID:d08nCdaw
データ大杉、仮想リストビュー化したらカラムソートが問題になってクイックソート脱落ってのはある

907 :デフォルトの名無しさん:2014/10/01(水) 21:11:57.62 ID:7LpuTxqg
最適化で質問なのですが、VS2013のC++で
string func(int i){
 string str;
 // do something
 return str;
}
void test(){
 int iEnd = 10000;
 for (int i = 0; i< iEnd; i++)
 {
  string str = func(i);
 }
}
こういう計算して何秒かかるか計測した場合、for内のstrはtest()内のどこでも使われていないので
Releaseビルドで最適化した場合にfunc()の呼び出し自体が行われないなんていう
ことは有りますか?(なので計測結果が物凄く短時間で終わるとか)

908 :デフォルトの名無しさん:2014/10/01(水) 21:17:35.82 ID:YGQGEKee
>>907
func()とtest()が同じソース内にあれば、コンパイル時にfunc()を呼び出す必要がないのが明示的なので、
まともなコンパイラなら最適化で呼び出しどころかループもなくなる。

909 :デフォルトの名無しさん:2014/10/01(水) 21:18:39.92 ID:DTMRbqd/
>>907
funcは絶対呼び出される
NRVOでstringコンストラクタ呼び出しが想定より少ないとかはあり得る

910 :デフォルトの名無しさん:2014/10/01(水) 21:44:28.41 ID:7LpuTxqg
>>908>>909
レスありがとうございます。
実際はfunc1()とfunc2()があって、どちらも同じ機能なのですが、
アルゴリズムが違っていて、どっちの計算速度が速いか調べたいので
こういうforループで計測しようと思ったのですが、もし最適化で
func1や2が呼び出されないんなら比較できないので困ります。
どうしたら良いでしょうか?

911 :デフォルトの名無しさん:2014/10/01(水) 21:48:36.42 ID:IDwTE5ky
逆アセ見て実際に呼ばれてるのか見ればいいんじゃないか

912 :デフォルトの名無しさん:2014/10/01(水) 22:23:42.74 ID:yW4yhB09
string strをグローバル変数にしておけば最適化がかからないはず

913 :デフォルトの名無しさん:2014/10/01(水) 22:38:32.56 ID:DTMRbqd/
>>910
まずはやってみろとしか言えない
もうFAQだが、最適化が関わる問題はやって見なければ何も分からん

914 :デフォルトの名無しさん:2014/10/01(水) 23:06:22.42 ID:ZcNvH3B/
volatileはあかんの?

915 :デフォルトの名無しさん:2014/10/01(水) 23:27:45.68 ID:sjXGh0Eh
消される可能性は有るが、stringのコンストラクターの中身に依らず消してよい
と本気で考える奴は馬鹿

916 :デフォルトの名無しさん:2014/10/01(水) 23:46:11.41 ID:DTMRbqd/
>>915
いや、消していいんだよ
コンストラクタの副作用があろうともRVO/NVROして良いと規格が保証しているんだから
もちろん、やるかどうかはコンパイラ次第

917 :デフォルトの名無しさん:2014/10/01(水) 23:56:22.64 ID:7LpuTxqg
皆さんレスありがとうございました。
結論としては、やってみないと分らない
で良いでしょうか?

918 :デフォルトの名無しさん:2014/10/02(木) 00:22:13.85 ID:B4fYW4YS
普通に最適化するがdead code eliminationはしないようにコンパイルオプションを指定するのが正道

919 :デフォルトの名無しさん:2014/10/02(木) 01:20:30.53 ID:j/17asXl
>>915,916
こういうやりとりを見るたびにアジャイルプラクティスはいい本だったなぁと思うのであった…(゚∀゚)

920 :デフォルトの名無しさん:2014/10/02(木) 03:50:46.52 ID:3VhMTQGG
素直にコンストラクタの前後で計測して処理行われてるか確認のためにcoutに出力したらいいのに
文字数大きかったらハッシュとって二つが同じ処理結果返してるか=で比較するとか

921 :デフォルトの名無しさん:2014/10/02(木) 07:15:22.58 ID:BgcsjDYP
>>916
>コンストラクタの副作用があろうともRVO/NVROして良いと規格が保証して

ソースは?
規格が許可しているのは副作用のあるコピー・移動コンストラクタの省略だったと思ったが

922 :デフォルトの名無しさん:2014/10/02(木) 08:16:08.28 ID:skJRG6ld
>>921
ごめん、 俺が文を省略しすぎた
そこが突っ込みどころだったのなら、その通り

923 :デフォルトの名無しさん:2014/10/02(木) 09:37:54.51 ID:HFWeLqOZ
>>921
12.8 [class.copy] p31
"When certain criteria are met, an implementation is allowed to omit the
copy/move construction of a class object, even if the copy/move
constructor and/or destructor for the object have side effects. ..."

924 :デフォルトの名無しさん:2014/10/02(木) 09:46:56.07 ID:HFWeLqOZ
>>915
ってことで、コンストラクタ呼び出しを最適化で消してよいかどうかって話に
コンストラクタの中身は関係ないよね?

925 :デフォルトの名無しさん:2014/10/02(木) 16:03:24.83 ID:vUTW9S7L
std::listなどのコンテナでは、内部的なノードが動的に確保されているはずだと思いますが、
このメモリ確保の動作を変更することなどはできますか。

実際にしたいことは、listやmapがすでに確保されたメモリを使うようにすることです。

最終目的は、テキストファイルから読み込んだツリー構造が、あらかじめ確保したメモリの中にすべて納まるようにすることです。

926 :デフォルトの名無しさん:2014/10/02(木) 16:18:02.75 ID:zf1rY1mq
自作して実用したことはないが。自作アロケータでは。



C++編(標準ライブラリ) 第28章 アロケータ
C++でプログラムを書いていると、様々な場所でnew/deleteを繰り返し、メモリを動的に確保します。
ところが、このメモリ確保の処理速度は、意外なほど低速です。
これは、標準で用意されているnew/deleteは、いかなる状況であっても、全く同様に扱えるようにするため、
処理速度を犠牲にして、汎用性を高めているためです。

C++標準ライブラリでも、当然様々な場所でメモリ確保を行っている訳ですが、このメモリ確保のためのルーチン(処理)を、プログラマが指定することが可能になっています。
メモリの割当てや解放を行うためのオブジェクトのことを、特にアロケータと呼びますが、このアロケータをプログラマが独自に作成することができるのです。
http://ppp-lab.saku ra.ne.jp/cpp/library/028.html

927 :デフォルトの名無しさん:2014/10/02(木) 16:28:20.79 ID:vUTW9S7L
的確な回答ありがとうございます。
まさにこれでやりたいことができそうです。

928 :デフォルトの名無しさん:2014/10/02(木) 18:07:10.84 ID:vXZHvcc3
std::vector<>は要素がメモリー上で連続していることを保証しています。
これは、C++11でも保証されていますか?

X *x = &vector.front();
::CallWindowsAPI(x, vector.size());

こういう使い方は正しいですか?

929 :デフォルトの名無しさん:2014/10/02(木) 18:56:59.41 ID:2H9v4lU3
もちろん
先頭アドレスが欲しいならvector.data()ってのがある

930 :デフォルトの名無しさん:2014/10/02(木) 19:06:24.03 ID:vXZHvcc3
>>929
どうもです。

931 :デフォルトの名無しさん:2014/10/02(木) 19:51:45.07 ID:FEwT1Plk
すみません知恵をお貸しください
VC++(MFC)のSDIで開発をしています。
やりたいことは、リストを行単位で描画しており、その予定をドラッグで上下入替したいと思っています。
イメージとしては、android端末でアイコンを他のアイコンのそばにドラッグするとにゅるっと?位置を入れ替える動作があると思うのですが、
その要領で行を上下入れ替えるような操作がしたいと思っています。
今までそのようなプログラムは書いたことがなく、今回チャレンジしたいのですが、
一つの行に複数の項目があり、2行で一つの予定になっているので単純に既存のコントロール一つで完結することは難しいです。
何かヒントでもいいので参考になるサイト等ありましたら教えていただけませんでしょうか?

参考までに予定一つにつき、下記のような感じで LineTo, DrawText 等を駆使して描画しています。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
項目1| 項目2 |   項目3 |
ーーーーーーーーーーーーーーーーーーー 予定1
項目4 | 項目5 |
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
項目1| 項目2 | 項目3 |
ーーーーーーーーーーーーーーーーーーー 予定2
項目4 | 項目5 |
ーーーーーーーーーーーーーーーーーーーーーーーーーーー

説明が足らない部分があるかもしれませんが、よろしくお願いいたします。

932 :デフォルトの名無しさん:2014/10/02(木) 20:04:10.45 ID:2H9v4lU3
WM_LBUTTONDOWNでDragDetectを実行してドラッグを検知したら
SetCaptureでマウスの移動を追跡できるようにする
WM_MOUSEMOVEで今マウスの位置がどこにあるかを見て
必要なら並び替える
WM_LBUTTONUPでReleaseCaptureを呼んでマウスの追跡をやめる
だいたいこんな流れになる

933 :デフォルトの名無しさん:2014/10/02(木) 20:32:05.18 ID:45O7cLsu
>>924
オマエ論理的思考が出来ないのか?
923「副作用が有る場合でもコピー/ムーブコンストラクタは省略して良い」
924「それ故、コンストラクタ(デフォルト含む)の中身と最適化の削除は関係ない」
レスが繋がっていないんだが。

934 :デフォルトの名無しさん:2014/10/02(木) 21:08:36.97 ID:FEwT1Plk
>>932
ありがとうございます
教えて頂いたカーソルの追跡についてはなんとかできそうです、ですが
・クリックした場所にあるリストの情報の取得
・行をドラッグした際にその行を透過し、カーソルに追従させたい
・また入替の際のアニメーションのような処理
のイメージがつかめません。
今のようなループでリストの数回して LineTo, DrawText等で描画しているのでは無理じゃないかなと思っているのですが、できるのでしょうか?
行1つをオブジェクトのような形でwindowを作成してメインのwindowにそれぞれ順番に配置したりするのかな、とか考えているのですが、
どういった扱いをするのがよいのでしょうか?
今は1行の項目を構造体で持たせてvectorで複数格納しています。
数にっては画面をスクロールする場合もあります。

935 :デフォルトの名無しさん:2014/10/02(木) 22:06:47.37 ID:2H9v4lU3
>>934
今のリストの描画はどうなってるんだ
CSrollViewを使っているのか?
それならvectorで持ってる構造体の中に項目の位置と大きさをCRectで持てば
PtInRectを使ってマウスの位置にどの項目があるのかが分かる
ドラッグイメージの表示はImageListが使える
アニメーションはSetTimerを使って少しずつ描画をずらすなりすればいい

936 :デフォルトの名無しさん:2014/10/02(木) 22:56:20.79 ID:06qLYu3M
最近C++を始めたもので
もし的はずれな質問をしていたらすみません。

抽象クラスのstd::listを作って、派生クラスを入れてオーバーライドはできますでしょうか
また、これは正しい用法なのでしょうか
よろしくお願いします

937 :デフォルトの名無しさん:2014/10/02(木) 23:05:42.76 ID:Q7xefffp
std::list<抽象クラス*> list;
list.push_back(new 派生クラス);
ならできる

938 :デフォルトの名無しさん:2014/10/02(木) 23:11:56.41 ID:jdzyRUoJ
できるけど入れるのはunique_ptrにしとけよ
std::list<std::unique_ptr<base>>

939 :デフォルトの名無しさん:2014/10/02(木) 23:29:02.99 ID:06qLYu3M
言って頂いた事を中心に調べてみたのですが
>>vectorにポインタで格納できるが、vector の途中に要素を挿入すると、
 挿入した場所以降の要素へのポインタは無効になります。削除も同様です。
とありました。
listも同じような話なのでしょうか...
またスマートポインタではそれが解決できるということでしょうか。
よろしくお願いします。

940 :デフォルトの名無しさん:2014/10/02(木) 23:29:47.30 ID:cBwJNspI
json11 使ってる人います?
はじめてjson使うんだけど、これのソース見てたら添え字演算子がconst制限されてるから
ソースを変更しない限り、json objectの一部をそのまま書きかえるみたいなことはできないんですかね
json_object["key"] = "key_val" みたいな感じでkeyの値を書きかえるみたいな。
なんかソース見ると、json object -> map<string,Json>へconvert -> mapの中身変更  Json new_json(map)
みたいなことをせざるをえんように見えるんだが。。

データ読むのはいいんだけど、書き換えがすごい不自由なような...

941 :デフォルトの名無しさん:2014/10/02(木) 23:32:04.80 ID:Q7xefffp
>>939
ポインタじゃなくてイテレーターじゃない
それにしても話がおかしいけど
deleteしなきゃポインタは無効にならないよ

942 :デフォルトの名無しさん:2014/10/02(木) 23:34:28.90 ID:sGyqHmPN
>>939
無効になるのは「要素へのポインタ」であって格納するポインタじゃない。
なんでその二つを絡めて書いてるかは知らんが。

943 :デフォルトの名無しさん:2014/10/02(木) 23:34:46.36 ID:Q7xefffp
>>940
json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.
って書いてあるから書きかえはあんまり考えてないんじゃないか

944 :デフォルトの名無しさん:2014/10/02(木) 23:59:47.03 ID:9vOPXvtb
ビルの一階にそのビルに入ってる会社の名前のリストとかあるだろ
そのリストの一部が破損しても会社はしかるべき階にちゃんと存在してるだろ
修復したリストの形状は変わるかもしれないけど内容は変わらないだろ

945 :デフォルトの名無しさん:2014/10/03(金) 00:40:47.00 ID:engCVLK6
例え話は話がややこしくなりがちだからメモリマップで実動作を示してくれた方が良いぜ(環境依存の罠がまれに良くあるが)

>>939
vectorは連続したメモリ空間上にある事が保障されてないといけないから、途中への挿入や末尾追加時にcapacity足りない時は新たなメモリ上にコピーされるので、無効になるね
逆にlistは連結リストなので連続してなくても良いから挿入してもポインタは保持される。
http://ideone.com/hHjJNe

ただ、だからと言ってlistを使ってアドレス記憶するってのもlistコンテナにするって制約が発生するのであまりやらない方が良いと思う。

946 :924:2014/10/03(金) 00:56:14.82 ID:Znmj+oh9
>>933
えーと、つまり >>915 の言ってたのは↓こういうことだったのかな?

(コピー・ムーブコンストラクタの呼び出しが)消される可能性は有るが、
stringの(デフォルト)コンストラクター(を、そ)の中身に依らず消してよいと
本気で考える奴は馬鹿

>907-914 に流れで言ってる「コンストラクタ」は全部コピー・ムーブコンストラクタの
ことだと思ってた。

947 :デフォルトの名無しさん:2014/10/03(金) 01:20:14.80 ID:BckNhF3j
アロケータとかイテレータの実装ガイドラインってないのですか?
アロケータのページサイズとかヒントは何に使うとか細かいとこまで書いてある奴がいいです

948 :デフォルトの名無しさん:2014/10/03(金) 01:59:45.35 ID:b15O82N5
そういうのを正しく作りたいなら規格の該当個所を理解できるまで読み込むんじゃないの

949 :デフォルトの名無しさん:2014/10/03(金) 04:46:10.76 ID:uV+ijUmp
アロケータの3つ4つのメソッドオーバーライドするだけだろ
それがすぐわからなければやる能力ない

950 :デフォルトの名無しさん:2014/10/03(金) 04:53:12.65 ID:ON3UZZIk
参照を上書きする方法が言語仕様にないから
アロケータを自前で書く場合は常にマシン語になるって話を誰かしてなかったっけ・3・;

951 :デフォルトの名無しさん:2014/10/03(金) 07:28:13.22 ID:2ixhbIuP
よし理解できるまで読んでくれ
20.6.9.1p6
The use of hint is unspecified, but intended as an aid to locality if an implementation so desires.

952 :デフォルトの名無しさん:2014/10/03(金) 09:05:28.54 ID:Qxdy43ON
特に気にしたことなかったけどなんだこれw

953 :デフォルトの名無しさん:2014/10/03(金) 10:12:56.78 ID:8OTaypIY
ヒントは所詮ヒント

954 :デフォルトの名無しさん:2014/10/03(金) 11:34:14.30 ID:UziybsFR
>>943
あんがと。もともと、軽量のデータ想定だから、書き換えたければ、毎回新規にOBJECTつくればいいでしょ
ぐらいなんだろうね。左辺への参照戻し不許可にするのはセキュリティ的には
正しいんだろうけどなぁ。。
C11で使うとなると、やっぱこれに手をいれるしかないか。

955 :デフォルトの名無しさん:2014/10/03(金) 12:43:34.83 ID:vVK7ZKzx
あまり理解できていないので変な事を聞いてるかしれませんが、
自分のハンドルから親のハンドルを取る関数ってあるのでしょうか?

956 :デフォルトの名無しさん:2014/10/03(金) 12:44:12.85 ID:zYcZx51K
ハンドルって何

957 :デフォルトの名無しさん:2014/10/03(金) 12:50:34.66 ID:lXIQAzKJ
あまり理解できていないので変な事を答えてるかしれませんが、
親のハンドル = getparent(自分のハンドル)という関数があるはずです?

958 :デフォルトの名無しさん:2014/10/03(金) 13:42:16.68 ID:gGzwLNzY
オブジェクトを指し示す論理的オブジェクト

959 :デフォルトの名無しさん:2014/10/03(金) 19:04:38.96 ID:ceUJAoE9
MSVCだと一時オブジェクトのアドレスを取得できちゃうんだけど、
このオブジェクトはいつまで有効なの?

#include <windows.h>
#include <iostream>

struct A { int x; };

int main()
{
  A *p = &A();  // なんぞこれ
  p->x = ::GetTickCount();
  std::cout << p->x << std::endl;

  return 0;
}

960 :デフォルトの名無しさん:2014/10/03(金) 20:03:47.80 ID:2ixhbIuP
;  // なんぞこれ

このセミコロンまで

961 :デフォルトの名無しさん:2014/10/03(金) 20:27:06.70 ID:ceUJAoE9
では、次のケースでは関数から制御が戻るまで有効なのだろうか?
(何の意味があるのかは別として)

struct A { int x; };
void func(A *p) { p->x = ::GetTickCount(); }

int main()
{
  func(&A());
  return 0;
}

962 :デフォルトの名無しさん:2014/10/03(金) 20:36:56.30 ID:yBfd1FLr
なんか大袈裟に MSVC だととか言ってるけど別にg++でもヘッダファイルを
など変更してやればおk

963 :デフォルトの名無しさん:2014/10/03(金) 20:51:39.95 ID:2ixhbIuP
>>961
クソレスでスレを汚す暇があったら
デストラクターにprint入れて調べろカス

964 :デフォルトの名無しさん:2014/10/03(金) 21:06:56.34 ID:F3skKHUN
この程度聞くより実行したほうが
どう考えても早い件

965 :デフォルトの名無しさん:2014/10/03(金) 21:10:40.63 ID:Bj0U/nno
struct A { int x; ~A(){printf("baka");}};
void func(A *p) { p->x = ::GetTickCount(); }

int main()
{
  func(&A()), printf("aho");
  printf("shine");
}

966 :デフォルトの名無しさん:2014/10/03(金) 21:13:18.67 ID:engCVLK6
>>965
func内で出力しないと証明にならないんじゃない?

967 :デフォルトの名無しさん:2014/10/03(金) 22:02:47.44 ID:ccTAdR9V
シーケンスポイントも知らないひとはこんな質問しないだろうから証明は必要だな
と思ったらC++11でシーケンスポイントという言葉が無くなってた

968 :デフォルトの名無しさん:2014/10/03(金) 23:07:33.71 ID:0o01OOek
すみません、誰か正規表現について教えてください

#define(空白文字が1個以上)(単語に使われる文字が1個以上)
を検索したいのですが、正規表現でどうやって書いたらいいか分かりません
#define([\s]+)([\w]+) とやってみたのですが、検索で引っかかりません
だれか教えて下さい(´;ω;`)

969 :デフォルトの名無しさん:2014/10/03(金) 23:11:05.22 ID:HP+NX9Yz
スレチ

970 :デフォルトの名無しさん:2014/10/03(金) 23:22:45.26 ID:B6mxhxuk
#define(\s+)(\w+)

文字列のエスケープシーケンスも確認

971 :デフォルトの名無しさん:2014/10/03(金) 23:30:10.04 ID:0o01OOek
>>970
> 文字列のエスケープシーケンスも確認
まさしく、それでした・・・

\がエスケープシーケンスとして解釈されるから\\と入力しなくちゃだめだったんですね
すっごい初歩的なミスでごめんないさい。吊ってきます ('A`)

972 :デフォルトの名無しさん:2014/10/03(金) 23:36:27.03 ID:0aZUNouk
>>970-971
スレ違いと言われてるのにスレを荒らすなゴミクズ

973 :デフォルトの名無しさん:2014/10/04(土) 21:28:16.62 ID:ytZZFNXo
だいぶ昔って、C言語で取得したメモリをプログラムでfreeし忘れると
プログラムが終了してもOSも解放してくれないっていう事があったのですか?

また、C言語で作成したプログラムの中でファイルポインタをクローズし忘れると
そのプログラムが終了した後も、そのファイルに対する入出力ができなくなってしまう(ロックされてしまっている状態)という
ことがあったのですか?

974 :デフォルトの名無しさん:2014/10/04(土) 21:32:20.16 ID:uBTtBUuA
大昔ならあったんじゃないかな

975 :デフォルトの名無しさん:2014/10/04(土) 22:04:04.72 ID:KbByyPwl
同時オープン数制限がきつかったからな

976 :デフォルトの名無しさん:2014/10/04(土) 22:07:11.31 ID:QZPta7oH
>>973
Windowsにはリソースを開放しない(M$が仕様と言い張っている)バグがあるそうです。
Linux板では有名な話です。

977 :デフォルトの名無しさん:2014/10/04(土) 22:08:37.39 ID:RXCsY/a+
>>973
WindowsはNT系より前はそうだった、NT系からはOSがよしなに解放してくれる、
ただしそれで解放しないプログラムはOS依存になる為汎用性が損なわれるし、
短いプログラムなら良いが長く起動するアプリケーションでそれをやるとメモリ食いつぶすのでやったらダメ。

978 :デフォルトの名無しさん:2014/10/04(土) 22:29:55.72 ID:j+aw4iLv
>>976
> Windowsにはリソースを開放しない(M$が仕様と言い張っている)バグがあるそうです。

具体的に何?
犬厨の妄想じゃないんだよね?

979 :デフォルトの名無しさん:2014/10/04(土) 22:31:35.39 ID:RXCsY/a+
>>977
s/汎用性/移植性/g

980 :デフォルトの名無しさん:2014/10/04(土) 23:26:04.11 ID:9kptgWt4
>>945
忙しくてお返事が遅れてしまいました、すいません。

つまりlistでオーバーライドは賢いやり方ではないということでしょうか...
もしそうであれば、代わりになる方法等はございますでしょうか
よろしくお願いします

981 :デフォルトの名無しさん:2014/10/04(土) 23:26:48.62 ID:OJABLBvT
ms officeなんてご丁寧にファイルを
ロックしてくれる上に、
プロセスが落ちたあとも何故か解放されず
再起動するまでファイルが弄れなくなるなんて
未だによく経験するだろう

982 :デフォルトの名無しさん:2014/10/05(日) 00:00:19.98 ID:ktqu8y2s
プロセスが死にきれなくて残ってることならある

983 :デフォルトの名無しさん:2014/10/05(日) 01:16:55.03 ID:ki3v4/8Q
そこはタスクマネージャでも何でも普通確認すると思うが

984 :デフォルトの名無しさん:2014/10/05(日) 01:45:00.81 ID:ECj89i9h
あれはオフィスのプロセスが掴んでるんじゃなくて
カーネルが掴んでるからタスクマネージャでプロセス殺すと自動的に再起動なのでは?( ´∀`)

985 :デフォルトの名無しさん:2014/10/05(日) 01:53:29.52 ID:OsaIba9z
エクスプローラプロセスが掴んでて消せないことはよくある
ファイルハンドルなどプライベートリソースはプロセス終了とともにクリア
共有リソースはいろいろ

986 :デフォルトの名無しさん:2014/10/05(日) 02:34:14.29 ID:eVa9bbGh
>>978
妄想に浸りたいんだから問いつめちゃだめ
自尊心が保てなくなっちゃうよ?

987 :デフォルトの名無しさん:2014/10/05(日) 07:32:55.81 ID:waE9omSr


988 :デフォルトの名無しさん:2014/10/05(日) 07:38:07.55 ID:e3IJDrLs


989 :デフォルトの名無しさん:2014/10/05(日) 08:28:31.22 ID:vX4qgpsa


990 :デフォルトの名無しさん:2014/10/05(日) 16:46:09.67 ID:x75CBE+a
とあるサイトで見つけたのですが

例)
{
int b = 0;
int* c = new int;
}
コープを抜けた後にはポインタのcが存在しないので
delete c とも書けない分けです。
・・・という分けでnewしたスコープやクラスが
きちんとdeleteの面倒を見るように注意を払う必要があります。



とありました。
この場合にdeleteをし忘れると
確保した領域はプログラム終了まで
開放する術は全くないのでしょうか?

991 :デフォルトの名無しさん:2014/10/05(日) 16:49:39.20 ID:kq2CsrMi
言語仕様の範囲では存在しない

992 :デフォルトの名無しさん:2014/10/05(日) 16:51:47.92 ID:a6/ySe32
次スレ


993 :デフォルトの名無しさん:2014/10/05(日) 16:52:15.28 ID:4FShMSYH
>>990
全くないとは言わないけどその程度の知識レベルでは使えないのでないに等しい

994 :デフォルトの名無しさん:2014/10/05(日) 16:53:31.72 ID:a6/ySe32
>>990
return c;

995 :デフォルトの名無しさん:2014/10/05(日) 16:54:39.32 ID:4FShMSYH
はいよ
http://peace.2ch.net/test/read.cgi/tech/1412495628/

996 :デフォルトの名無しさん:2014/10/05(日) 16:57:19.28 ID:x75CBE+a
私が扱える範囲では無理なのですね
newをしたらdeleteを忘れないよう心がけます
ありがとうございました

997 :デフォルトの名無しさん:2014/10/05(日) 17:01:55.58 ID:kq2CsrMi
>>996
やめてください
newしたらセミコロンに達するまでにスマポに挿れてください
deleteはしないでください

998 :デフォルトの名無しさん:2014/10/05(日) 17:06:54.96 ID:BWhErrhC
いやいやnewをオーバーロードしてGCにぶち込むのが今時の正解だよ

999 :デフォルトの名無しさん:2014/10/05(日) 17:07:27.83 ID:TPVUn8gD
埋め

1000 :デフォルトの名無しさん:2014/10/05(日) 17:08:09.41 ID:a6/ySe32
malloc はスマポに挿れられますか?

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

gc
lud20190713022443ca
このスレへの固定リンク: http://5chb.net/r/tech/1406801653/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「【初心者歓迎】C/C++室 Ver.92【環境依存OK】->画像>7枚 」を見た人も見ています:
【質問】C++でソフト開発したい!【初心者】
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
0からの、超初心者C++相談室
【初心者歓迎】最新COBOLについての質問スレ
くだすれPython(超初心者用) その41【Ruby禁止】
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
クラス設計、メソッド設計、実行側設計(初心者歓迎)
【論理】Prolog【初心者】
くだすれPython(超初心者用) その42【Ruby禁止】
【C/C++】統合開発環境CLion【JetBrains】
ユニケージってGPUで並列処理できるんかあぁぁん?
VBScriptについて必死に話し合うスレ
シェルスクリプトは歴史が長いローコードです?
【信者】C++の問題点【アンチ】
C言語なら俺に聞け
筆ペンでノート取る奴wwwwwww
オブジェクト指向を教えてくれ!
Eclipse統合M33【Java/C++/Ruby/Python/Scala】
おすすめの言語おしえて
Excel VBA 質問スレ Part63
SEになるために前もってできる勉強を知りたい
文字コード総合スレ Part11
プログラム言語は増えすぎた
ブロックチェーンの応用とか言うけどさ
ふらっと C#,C♯,C#(初心者用) Part132
Eclipse統合M36【Java/C++/Ruby/Python/Scala】
プログラミングのお題スレ Part10
【マウスだけで】Scratch【プログラミング】その1
C言語上級者スレ
HacktoberFest 迷惑行為 プルリク スパムでTシャツ貰おう
えぇ、ですからVB6の開発はやめろと言ったんです。
Android Studio Part3
古代VBプログラマ質問スレ(Ver.6.0 まで) part65
写真の保存形式の著作権なんかあったよね?
ノーコードについて語るスレ【bubble】
a4です。P2P人工知能「T」開発(2)
Rust part10
令和元年 vs 令和1年
Androidプログラミング質問スレ revision53
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
テストを書いてからリファクタリングなんてのは幻想
オブジェクトチンポシコシコ隔離病棟
Pythonのお勉強 Part54
Pythonのお勉強 Part67
学術的に優れた開発をしている会社ありませんか?
Raku 楽土 〜 心労がなく楽しい生活ができる楽園へ
逆コンパイラCodeReverseを作る
Excel Python 質問スレ
JavaScriptフロントエンド総合 Part.11
■特許庁新システムを作る■
ネットワークプログラミング相談室 Port30
プリンタの中のデータってどうやって見るの?
いまだにVC6から離れられない奴の数→
シェルスクリプト総合 その36
【PHP】作りたいものがない【独学】
【.NET】F#について語れ3【OCAML】
オブジェクト指向ってクソじゃねぇかよPart3
JCとかJKを見たらズボンの中に射精しそうになる
ハッシュ使うのやめてクラスにしましょう
使ってはいけないエディタ その2
Perl初心者スレ(マジレス回答)
コード作成依頼スレ。どんなコードでもタダで作るよ
パソコンのファイル整理中わい「これ半年前に暇つぶしに書いたプログラムやん、見てみよ」ポチ
05:15:35 up 28 days, 6:19, 0 users, load average: 138.79, 141.19, 141.13

in 0.01925802230835 sec @0.01925802230835@0b7 on 021019